
У меня есть 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, то сделайте это:
Откройте изображение так же, как вы открываете обычный видеофайл.
Рассчитайте длительность аудио в секундах и округлите ее до ближайшей целой секунды (например, 78,34 секунды станут 79 секундами). Это значение далее будет называться x.
Перейдите в "видео > частота кадров", выберите "изменить на частоту кадров (fps)" и введите "1/x" в качестве значения. Кроме того, если вы хотите иметь нормальную частоту кадров в конечном файле, например 25 кадров в секунду, выберите "Преобразовать в fps" и введите желаемую частоту кадров.
Выберите "видео > сжатие" и выберите свой любимый вкус. Может быть, вам нужно будет настроить размер изображения с помощью фильтра изменения размера.
Перейдите в "аудио > аудио из другого файла" и выберите там свое аудио. При необходимости выберите сжатие для аудио.
Сохраните файл.
Источник:stephanV