Как объединить аудио и видео файл в ffmpeg

Я хочу объединить аудиофайл (формат.wav или.au) с видеофайлом (формат.mp4).

Пожалуйста, предложите мне, как этого добиться. Я хочу объединить эти файлы в новый видео файл.mp4. Команда ffmpeg была бы очень кстати.

7 ответов

Решение

Объединение видео и аудио с перекодированием аудио

Посмотрите этот пример, взятый из этой записи в блоге, но обновлен для более нового синтаксиса. Должно быть что-то с эффектом:

ffmpeg -i video.mp4 -i audio.wav \
-c:v copy -c:a aac -strict experimental output.mp4

Здесь мы предполагаем, что видеофайл еще не содержит аудиопоток, и вы хотите иметь тот же формат вывода (здесь, MP4), что и формат ввода.

Вышеприведенная команда перекодирует аудио, поскольку MP4 не могут переносить аудиопотоки PCM. Вы можете использовать любой другой нужный аудио кодек, если хотите. См. Руководство по кодированию AAC для получения дополнительной информации.

Если ваш аудио или видео поток длиннее, вы можете добавить -shortest опция, так что ffmpeg прекратит кодирование, как только закончится один файл.

Копирование аудио без перекодирования

Если ваш выходной контейнер может обрабатывать (почти) любой кодек - например, MKV - тогда вы можете просто скопировать аудио и видео потоки:

ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv

Замена аудиопотока

Если ваше входное видео уже содержит аудио, и вы хотите заменить его, вам нужно указать ffmpeg, какой аудио поток взять:

ffmpeg -i video.mp4 -i audio.wav \
-c:v copy -c:a aac -strict experimental \
-map 0:v:0 -map 1:a:0 output.mp4

map опция заставляет ffmpeg использовать только первый видеопоток с первого входа и первый аудиопоток со второго входа для выходного файла.

Поскольку мне не разрешено писать комментарии к первому ответу с моей репутацией, добавление здесь, потому что у меня была эта проблема при кодировании webms.
Если ваш аудиопоток, например, длиннее, чем видеопоток, вам придется его обрезать, иначе у вас будет последний видеокадр в виде неподвижного изображения и звука.

Чтобы обрезать любой поток, вы можете использовать -ss [чч: мм: сс] -t [сс] перед каждым из -i "file.ext".
-ss [...] определит начальную точку для обрезки
-t [...] определит длину сегмента в секундах

Пример:

ffmpeg.exe -ss 00:00:10  -t 5 -i "video.mp4" -ss 0:00:01 -t 5 -i "music.m4a" -map 0:v:0 -map 1:a:0 -y out.mp4

-open командная строка (windows + r -> cmd-> enter)

- затем перейдите в папку, где у вас есть аудио и видео файл

применить этот cmd

ffmpeg -i "videoFile.mp4" -i "audioFile.mp3" -shortest outPutFile.mp4

Введите.... вы получите новый файл с именем outPutFime.mp4 (объединенный файл аудио и видео)

Это сработало для меня:

ffmpeg.exe -i AudioT.m4a -i VideoT.mp4 -acodec copy -vcodec copy muxed.mp4

Попробуйте использовать mencoder (да, он основан на ffmpeg, но вы никогда не знаете). Я использую -audiofile аргумент. Я обычно использую ffmpeg, поэтому примите этот совет с щепоткой соли.

И, если вы используете Windows, Mediacoder (больше не к сожалению, с открытым исходным кодом) работает... это в основном оболочка для многих кодировщиков gnu и нескольких несвободных.

Если вы хотите объединить аудио и видео разной длины, а также применить Fade In и Fade Out, мне помогло следующее:

      ffmpeg -i Video001.mp4 -i Audio001.mp3 -af afade=t=in:st=0:d=3,afade=t=out:st=47:d=4 -c:v copy -c:a aac -shortest Output.mp4

В моем случае выше видео имело длину 51, поэтому я выбрал Fade In продолжительностью 3 [сек] и Fade Out* ~4 [сек]. Поскольку затухание применяется с помощью фильтра, требуется перекодирование звука. В приведенном выше случае я выбралaacкодировка.

Ответ во основан на ответе @PatrickGeorgi . Patrick Georgi

Для этого я написал скрипт на Python, если хотите, можете попробовать. Загрузите его на github:https://github.com/mmakarov/replicator .

Или посмотрите видео здесь:https://www.youtube.com/watch?v=4Uu1hS3-eQM

Replicator — это скрипт Python для объединения нескольких видеофайлов, прозрачного наложения, текстовых областей со звуковой дорожкой в ​​формате mp3. Финальное видео будет такой же длины, как и ваша звуковая дорожка. Длина вашего видео будет рассчитана автоматически.

Я создал этот скрипт, пытаясь объединить любые файлы видеопоследовательности с прозрачным наложением PNG, добавив текстовые области на видео со звуковой дорожкой в ​​формате mp3. Полученный видеофайл готов к загрузке на Youtube или любой другой видеохостинг.

Вы можете изменить его на свой вкус.

Как его использовать: 0. Откройте терминал и введите: git clone https://github.com/mmakarov/replicato...

  1. Поместите свои видеофайлы в каталог проекта как «source1.mp4», «source2.mp4» и т. д.
  2. Поместите прозрачное изображение PNG в каталог проекта как overlay.png.
  3. Поместите файл MP3 в каталог проекта под именем voice.mp3.
  4. при запуске терминала: python3 source-to-medium.py (здесь будет создан «medium.mp4»)
  5. при необходимости введите содержимое текстовых областей... преобразование исходных файлов *.mp4 в один файл Medium.mp4 занимает некоторое время.
  6. при запуске терминала: python3 medium-to-fin.py ... он рассчитает окончательную длину видео, разделив voice.mp3.length() / medium.mp4.length() = Silent_fin.mp4.length() ... также это добавит voice.mp3 в Silent_fin.mp4 в качестве звуковой дорожки
  7. Наконец у вас есть файлы youtube_ready.mp4.

Внимание: русские комментарии в источниках!

Другие вопросы по тегам