Вопрос: Соедините одно изображение + один аудиофайл, чтобы сделать одно видео с помощью FFmpeg
Это должно быть довольно тривиально, но я не могу найти способ заставить его работать.
Я хочу, чтобы FFmpeg принимал одно изображение JPEG и аудиофайл в качестве входных данных и генерировал видеофайл с той же продолжительностью, что и аудиофайл (растягивая неподвижное изображение на протяжении всей продолжительности).
Мне не очень-то интересно, какой видеокодек используется для вывода, но очень важно, чтобы я мог использовать «копию» в качестве аудиокодека (т. Е. Копировать аудиопоток без его перекодирования).
Какая правильная командная строка будет делать это?
Я пытался:
ffmpeg -i image8.jpg -i sound11.amr -acodec copy test.avi
и попробовал много комбинаций с и без -s 640x360
, -loop_input
, -shortest
, -t xxx
, -r 0.1
(искусственно низкая частота кадров в надежде на то, что видео будет больше) и -f image2
Либо я получаю ошибки, либо получаю видеофайл продолжительности одного кадра.
Я googled вокруг и нашел дюжину предлагаемых решений (предположительно к этому самому самому вопросу), ни один из которых не работает.
Может ли кто-нибудь предложить рабочую команду и объяснить обоснование этого?
148
2018-05-04 17:19
Источник
Ответы:
Порядок опций в командной строке имеет значение. Следующие работы для моего случая:
ffmpeg -loop 1 -shortest -y -i image8.jpg -i sound11.amr -acodec copy -vcodec mjpeg result.avi
В более общем случае, где image.jpg
а также audio.wav
ваш ввод, вы можете использовать следующую команду, адаптированную из FFmpeg wiki:
ffmpeg -loop 1 -i image.jpg -i audio.wav -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest out.mp4
Это будет использовать libx264
кодировщик и обеспечить лучшее сжатие, чем кодек MJPEG, использованный выше. Аудио - это AAC, со встроенным ffmpeg
AAC.
115
2017-12-16 14:21
Вы делаете это путь Сильнее чем это должно быть. FFmpeg намного умнее, чем вы даете ему кредит - он знает, что вы хотите, чтобы видео было такой же длины, как и ваша звуковая дорожка.
ffmpeg -i still.png -i narrate.wav -acodec libvo_aacenc -vcodec libx264 final.flv
pause
Единственные атрибуты вы иметь для определения input filenames
, output codecs
, и output filename
(который eo ipso включает output container
,).
Конечно, имеет смысл начать с неподвижного изображения, которое имеет те же размеры, что и ваше видео; если вы используете выделенный редактор изображений вместо указания выходных измерений для встречи FFmpeg, вам нужно убедитесь, что ваши входные размеры - это четные числа,
Размер выходного файла один из самых распространенных разворотов FFmpeg; некоторые кодеки более ограничены в размерах вывода, чем другие, но ни один вывод не может иметь атрибуты высоты или ширины нечетного числа.
pause
команда в конце командного файла открывается CLI - лучший способ отладки вашей командной строки - это прочитать сообщения об ошибках он генерирует. Они чрезвычайно специфичны - и лучшая документация FFmpeg - но тяжелая работа разработчиков пропадает, если вы разрешите закрыть окно, прежде чем сможете их прочитать.
Командная оболочка имеет переключатель cmd /k
который поддерживает открытое окно, в котором вы можете запускать те же самые инструкции из вашего пакетного сценария в командной строке.
FFmpeg а также avconv оба помогут вам использовать -c:a
для -acodec
а также -c:v
для -vcodec
в конце концов, но старые инструкции прекрасно работают в строках, которые я использую.
Нота Бене: Каждое совершение имеет идиосинкразии. Если ваша командная строка не работает без видимых причин, часто бывает полезно попробовать другую сборку - или следовать за развилкой libav, где наиболее активные разработчики FFmpeg были в течение последних нескольких лет. Их инструмент перекодирования был переименован avconv но ваши командные файлы должны работать с одним из них.
32
2018-05-26 02:09
Еще проще:
ffmpeg -i ep1.png -i ep1.wav ep1.flv
FFmpeg попытается выбрать лучший кодек автоматически, в зависимости от расширения вашего выходного файла.
Обновление: я заметил, что YouTube испытывает трудности с обработкой видео (застрял на 95%). Я думаю, потому что есть только один кадр. Решение, которое я нашел, чтобы сделать YouTube счастливым: добавьте больше фреймов. Кроме того, я добавил-acodec copy
для сохранения качества звука. Тебе нужно -shortest
или он петли навсегда. (Он останавливается в конце кратчайшего потока, который является звуком, потому что цикл изображения бесконечен.) Порядок ваших параметров очень важен для скорости, так как фильтры (и такие) обрабатываются в указанном порядке. Если вы измените порядок этих параметров, результаты резко отличаются.
ffmpeg -r 1 -loop 1 -i ep1.jpg -i ep1.wav -acodec copy -r 1 -shortest -vf scale=1280:720 ep1.flv
Также обратите внимание, что я дважды установил частоту кадров, это не случайность - первая частота кадров для входа, вторая - для выхода. Если вы сделаете это правильно, должен быть только один кадр в секунду видео, что означает, что он кодирует относительно быстро. Также я установил разрешение на 720p, что означает, что вы должны получить HD-звук на YouTube :-)
27
2018-01-28 20:16
Версия, которая работала для меня:
ffmpeg -loop 1 -y -i pic.jpg -i sound.amr -shortest video.mp4
Оформить заказ -shortest
должен быть перед выходным файлом, если нет, я получаю следующую ошибку:
Опция кратчайшая (завершение кодирования в кратчайшем вводе) не может быть применена к входному файлу pic.jpg - вы пытаетесь применить параметр ввода к выходному файлу или наоборот. Переместите эту опцию перед файлом, к которому он принадлежит.
Параметры анализа ошибок для входного файла pic.jpg.
13
2018-05-22 00:40
Из справочной страницы ffmpeg:
ffmpeg [[infile options][-i infile]]... {[outfile options] outfile}...
Как вы выяснили, параметры вторжения должны быть до вторжения, к которому они применяются.
Однако это не ошибка, а просто механизм, с помощью которого вы можете указать, к каким аргументам относятся.
7
2018-04-15 22:15
Это сработало для меня
ffmpeg -loop 1 -shortest -y -i image.jpg -i audio.mp3 -acodec copy -vcodec libx264 video.avi
Я нашел vcodec libx264
создал гораздо меньше файлов, чем mpjeg
(10 МБ, а не 100 МБ).
4
2017-09-18 11:44
Я пытался сделать так: @matteo, но без звука и @Colonel PanicЛучшее решение:
ffmpeg -loop 1 -shortest -y -i still.png -vcodec libx264 -t 10 video.avi
Мне нужно было добавить аргумент продолжительности в секундах (-t 10
).
1
2017-07-22 12:15
ffmpeg -loop 1 -i img.jpg -i audio.wav -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest out.mp4
0
2017-07-12 16:20
Если кто-то хочет их конвертировать, попробуйте это.
Вы можете установить входную и выходную папку, а также формат, в котором вы хотите, чтобы видео было. В этом случае я установил его в AVI.
Этот ответ Соедините одно изображение + один аудиофайл, чтобы сделать одно видео с помощью FFmpeg Мне очень помогли.
@echo off
set "sourcedir=C:\Users\CodeHard\Desktop\BOX\Newfolder"
set "outputdir=C:\Users\CodeHard\Desktop\BOX\Converted"
PUSHD "%sourcedir%"
for %%F in (*.mp3) DO ffmpeg -r 1 -loop 1 -i abc.jpeg -i "%%F" -acodec copy -r 1 -shortest -vf scale=1280:720 "%outputdir%\%%F.avi"
POPD
0
2018-05-24 07:43
Попробуйте эту команду. Это сработало для меня.
-y -i /storage/emulated/0/images.jpg -i /storage/emulated/0/audio.wav -acodec aac -vcodec mpeg4 -s 480*320 -f mp4 -r 2 /storage/emulated/0/output.mp4"
-1