Объединить аудио и изображение -> Вывести как видео с помощью FFmpeg

Объединить аудио и изображение -> Вывести как видео с помощью FFmpeg

У меня есть 1 изображение (jpg) и 1 аудиофайл (MP3), и я хотел бы вывести их как видеофайл (например, AVI).

Кто-нибудь знает, как с помощью FFMPEG объединить два? Я бы хотел, чтобы изображение отображалось на протяжении всего аудио.

Есть у кого-нибудь идеи?

решение1

Если вы работаете в Windows, вы также можете сделать это в Windows Movie Maker... если вам нужны инструкции, пожалуйста, оставьте комментарий.

Для FFmpeg используйте это

ffmpeg -loop_input -vframes 14490 -i imagine.jpg -i audio.mp3 -y -r 30 
    -b 2500k -acodec ac3 -ab 384k -vcodec mpeg4 result.mp4
  • vframes 14490 — это количество кадров, которые должны быть зациклены, чтобы получить непрерывное изображение для всего файла audio.mp3

    Пример: 8 минут и 3 секунды ((8 мин x 60 с + 3 с) x 30 кадров в секунду = 14490 vf)

Ресурс изздесь

решение2

Есть гораздо более простой способ, чем предложенные здесь, который не требует расчета количества кадров или ввода длины отдельных файлов (особенно лучше для пакетной обработки). С последней версией ffmpeg вы можете использовать опцию -shortest, которая останавливает кодирование, когда заканчивается самый короткий поток - в данном случае input.mp3 (поскольку изображение будет зацикливаться вечно, оно имеет бесконечную длину):

ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \
-shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4

Для изображения/видео используется 2 кадра в секунду, что должно быть нормально, но при желании можно установить более стандартное значение — 25.

решение3

subanki почти правильно понял. Рабочая командная строка выглядит следующим образом;

ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4

перезаписывать выходные файлы без запроса

-петля 1

Параметр '-loop_input' устарел, используйте -loop 1. См.документация ffmpeg.

входной файл(ы)

Кадров в секунду.
Также можно выразить как: -r 30000/1001, что дает fps 29.97nnn.

-б:в

битрейт видео; чем выше число, тем лучше качество и больше размер файла.

-vframes

Как объяснялось выше; возьмите общее время вашего аудиофайла в секундах (например, 00:02:41 (2 минуты 41 секунда) равно 161 общей секунде (2 x 60) + 41). Затем умножьте общее количество секунд на количество кадров в секунду, которое вы указали с помощью -r (например, 161 x 30 = 4830).

-vframes можно заменить на -t 161 (-t длительность записи или перекодирование «длительности» секунд аудио/видео)

-акодек

Используйте правильный аудиокодек для типа создаваемого файла. Для .mp4 это должен быть формат AAC. Кодек libvo_aacenc был правильным кодирующим кодеком для моей системы Windows 7.

-аб

аудио битрейт

результат.mp4

Это имя выходного файла. Это может быть любое допустимое имя файла для вашей системы. Расширение поможет ffmpeg определить правильный видеокодек, если вы не укажете его с помощью -vcodec.

решение4

СкачатьVirtualDub, то сделайте это:

  1. Откройте изображение так же, как вы открываете обычный видеофайл.

  2. Рассчитайте длительность аудио в секундах и округлите ее до ближайшей целой секунды (например, 78,34 секунды станут 79 секундами). Это значение далее будет называться x.

  3. Перейдите в "видео > частота кадров", выберите "изменить на частоту кадров (fps)" и введите "1/x" в качестве значения. Кроме того, если вы хотите иметь нормальную частоту кадров в конечном файле, например 25 кадров в секунду, выберите "Преобразовать в fps" и введите желаемую частоту кадров.

  4. Выберите "видео > сжатие" и выберите свой любимый вкус. Может быть, вам нужно будет настроить размер изображения с помощью фильтра изменения размера.

  5. Перейдите в "аудио > аудио из другого файла" и выберите там свое аудио. При необходимости выберите сжатие для аудио.

  6. Сохраните файл.

Источник:stephanV

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