FFMPEG додає аудіозапис під час перетворення форматів відео


2

Фон

Мені потрібно конвертувати 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 може справлятися з двома входами штрафу без додаткової конфігурації.

-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

Зауважте, що з усіх кодерів AAC, якими ви можете користуватися ffmpeg, libvo_aacenc пропонує найгіршу якість. Краще використовувати -c:a aac -strict experimentalі бітрейт понад 96 к. Це внутрішній кодер ffmpeg.
slhck

Як додати бітрейт або візьме його з вихідного файлу? Дякую, що покращили мою відповідь! Я зробив щось інше не так?
Грем Сміт

1
-b:aвстановлює бітрейт аудіо, тому у вашому прикладі потрібно буде лише змінити частину кодера. Деякі незначні речі: -yпараметр повинен працювати перед введеннями, а -f mp4він не потрібен. Крім того, це мені добре виглядає!
slhck


1

Ви можете створити безшумний аудіопотік із aevalsrcджерелом звуку :

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

Це простіше, ніж використовувати порожній аудіофайл як вхід.


Як працює найкоротша команда з цією установкою?
Грем Сміт

1
@GrahamSmith Мабуть, це нічого не робить у цьому випадку. Я припускав, що ваше відео має обмежену тривалість, і це aevalsrcбуде створювати тишу нескінченно, тому я додав, -shortestщоб переконатися, що вихід закінчується в кінці відео, але, здається, що результат все-таки закінчиться відео.
llogan

Чудовий внесок та велике спостереження. Думав, що мій коментар може бути корисним для інших, хто читає це. Знову дякую.
Грем Сміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.