FFMPEG добавляет звуковую дорожку при конвертации видеоформатов

FFMPEG добавляет звуковую дорожку при конвертации видеоформатов

Фон

Мне нужно конвертировать файлы AVI в H264 (MP4). Я успешно делаю это с помощью следующего:

-i mymovie.avi -c:v libx264 -crf 19 -preset slow -c:a libfaac -pix_fmt yuv420p -f mp4 -b:a 192k -y -an output.mp4

Я вызываю команду через приложение C# .Net Winforms, хотя подозреваю, что это мало повлияет на ответ.

Вопрос

Как добавить звуковую дорожку? Мне нужно добавить ее, так как мне нужно загрузить видео в Instagram, который, похоже, отклоняет файлы без звуковой дорожки (к моему раздражению). На самом деле мне не нужна очень длинная звуковая дорожка. Мои мысли были о паре секунд «тишины» в формате MP3.

Думаю, мне понадобится аудиоформат AAC на выходе.

Для справки: я также понимаю, что эта -anкоманда не будет воспроизводить звук, и я убрал это в своих последующих попытках.

Попытки на данный момент

Я понял, что мне нужно будет использовать -shortestкоманду, так как аудио будет короче видео. На самом деле я буду добавлять пустой MP3 (или что-то подобное), просто чтобы при кодировании получить аудиопоток, встроенный в видео.

Я также пытался использовать эту -mapкоманду, но безуспешно.

решение1

libfaacХорошо, вот команда, которая у меня работает. Я обнаружил, что в моей сборке ffmpeg ее нет, поэтому я переключился. Мне -mapтакже не нужны были опции, так как FFMPEG может работать с 2 входами без дополнительных настроек.

-i test.avi -i music.mp3 -c:v libx264 -crf 19 -preset slow -c:a libvo_aacenc -pix_fmt yuv420p -f mp4 -b:a 192k -y -shortest output.mp4

Различия между моим оригиналом и тем, что работает:

  • libvo_aacenc заменяетlibfaac
  • -shortestдобавлен для обработки более коротких аудиофайлов, чем видео
  • -iиспользуется для обеспечения аудиовхода

Обновлять

Команда после большого вклада в комментарии теперь выглядит так:

-i test.avi -i music.mp3 -c:v libx264 -crf 19 -preset slow -c:a aac -strict experimental -pix_fmt yuv420p -f mp4 -b:a 192k -y -shortest output.mp4

решение2

Вы можете создать тихий аудиопоток с помощьюaevalsrcисточник звука:

ffmpeg -y -i test.avi -f lavfi -i aevalsrc=0 -c:v libx264 -crf 19 -preset slow \
-pix_fmt yuv420p -shortest output.mp4

Это проще, чем использовать пустой аудиофайл в качестве входных данных.

Связанный контент