ffmpeg -ss 00:00:00 -i 'input.mp3' -to 00:25:00 -c копировать output.mp3
Я заметил во время написания скрипта, что этот конкретный скрипт работает для файлов mp3, но не для файлов .wav. Что происходит, так это то, что он копирует (как ни странно) в 25-минутный файл .mp3, но обрезает звук в конце по сути. Кажется, по какой-то причине он растягивает фактическое аудио за пределы 25-минутной границы, поэтому происходит обрезание. Однако с файлами .wav этого не происходит. Просматривая страницы руководства, я наткнулся на это ниже:
-ss позиция (вход/выход) При использовании в качестве опции ввода (перед -i) выполняется поиск позиции в этом входном файле.Обратите внимание, что в большинстве форматов точный поиск невозможен, поэтому ffmpeg будет искать ближайшую точку поиска перед позицией.При транскодировании и включении -accurate_seek (по умолчанию) этот дополнительный сегмент между точкой поиска и позицией будет декодирован и отброшен. При выполнении копирования потока или при использовании -noaccurate_seek он будет сохранен.
Мой вопрос, во-первых, похоже, что .mp3 не является поддерживаемым форматом, который ищет точно, но похоже, что файлы .wav поддерживаются, учитывая то, что произошло. Это ли причина, по которой он обрезал звук? Во-вторых, есть ли какая-либо документация относительно поддерживаемых форматов, которые имеют 100% точное время -ss? Я не могу найти ее ни на одной из страниц руководства. Возможно, документация существует, но если она есть, я предполагаю, что она должна была быть указана в этом разделе. Это плохая документация по ffmpeg и ее следует обновить! Расплывчатая информация, которая бесполезна.
решение1
Единственные форматы, которые идеально подходят для поиска, это несжатые форматы. То есть wav и pcm. Все сжатые форматы кодируются в «кадры» (потому что именно так работает сжатие). Используя копирование кодека, вы можете копировать только целые кадры. Каждый кодек использует разное количество сэмплов на кадр.