Вопрос или проблема
Я привык конвертировать все мои аудио и видео файлы с помощью bat-файлов FFMPEG, потому что это удобно.
В настоящее время я использую ffmpeg -i "%1" %~dpn1.wav
в bat-файле перетаскивания, который действительно конвертирует MP3 (и другие) в WAV, но, к сожалению, несколько миллисекунд тишины в начале и в конце звука, похоже, теряются. По крайней мере, длина звука больше не та же.
Есть ли способ заставить FFMPEG выводить звук точно такой же длины, не обрезая никакие части?
Ответ: Благодаря Рикардо Бонеру, который предложил добавить -ss 00:00:00
в код, превратив его в ffmpeg -ss 00:00:00 -i "%1" %~dpn1.wav
-c copy также был предложен, но почему-то не сработал. Это также сделало Audacity неспособным открыть преобразованный звуковой файл, хотя Adobe Audition все же смог это сделать.
Только опция -c copy
может гарантировать, что входной и выходной потоки имеют одинаковые данные/длительность:
ffmpeg -i "%1" -c copy %~dpn1.wav
Любое преобразование кодека (например, полное пропускание опции -c
или использование любой другой опции, кроме -c copy
) может привести к некоторым различиям между входными и выходными данными. С другой стороны, данная команда не будет работать в случаях, когда формат wav
не сможет использовать кодек из входного файла.
Ответ или решение
Для решения задачи конвертации MP3 в WAV с помощью FFMPEG, сохраняя при этом оригинальную длительность звукового файла и не обрезая тишину, важно учитывать особенности работы с кодеками и параметрами команды.
Анализ проблемы
При использовании команды FFMPEG, вы вероятно сталкиваетесь с проблемой, когда концы аудиозаписей обрезаются, что приводит к изменению длительности выходного файла WAV по сравнению с оригинальным MP3. Это может быть связано с тем, что при конвертации кодеки FFMPEG могут по-разному обрабатывать тишину в начале и конце записи.
Решение
-
Использование параметра
-ss
:Команда
ffmpeg -ss 00:00:00 -i "%1" %~dpn1.wav
позволяет контролировать начало конверсии с самого начала записи, что может помочь в сохранении оригинальной длины файла. -
Использование параметра
-c copy
:ffmpeg -i "%1" -c copy %~dpn1.wav
Параметр
-c copy
позволяет выполнить прямую копию потоков данных, что может сохранить идентичную длительность аудиофайлов, так как это исключает любую перекодировку. Однако, данная команда не сработает, если кодек MP3 не совместим с форматом WAV, так как формат WAV требует выделенного аудиокодека PCM.
Разъяснение и рекомендации
Формат WAV обычно не использует сжатие, как MP3, следовательно, простая копия потока -c copy
зачастую невозможна. В таких случаях мы должны соблюдать преодоление разницы в формате и обеспечить перекодировку, гарантируя минимальные искажения данным:
ffmpeg -i "%1" -acodec pcm_s16le %~dpn1.wav
Параметр -acodec pcm_s16le
указывает использование некомпрессированного линейного PCM 16-битного аудио, что является стандартом для WAV-файлов.
Принимая во внимание разные возможности обработки аудиофайлов среди различных программ для редактирования, важно протестировать выходной файл в ваших рабочих средах, чтобы удостовериться в корректной передаче данных.
Вывод
Оптимальной стратегией будет использовать подход без изменения кодека, там где это возможно, или прибегать к минимальной необходимой перекодировке. Это не только сохранит длину звукового файла, но и обеспечит его совместимость с большинством аудиоредакторов.
Последовательные эксперименты и тестирование с различными параметрами помогут вам добиться желаемого результата в вашей конкретной программной инфраструктуре.