объединение 1 изображения + 1 аудио с использованием FFmpeg

1108
destor

Я хочу объединить аудиофайл и один файл изображения в видео. Вывод будет в .webmформате, поэтому я буду использовать libvpx. Видео должно иметь один кадр с лучшим / без потерь качеством.

Пока я пробовал это, но я получил плохие результаты или вообще никаких результатов:

1-я команда:

ffmpeg -i image.jpg -i audio.ogg -c:v copy -c:a copy outputvideo.webm 

Это не работает. Это дает эту ошибку:

[webm @ 0000000002c7f8a0] Only VP8 or VP9 video and Vorbis or Opus audio and Web VTT subtitles are supported for WebM. ... Could not write header for output file #0 (incorrect codec parameters ?): Error number -22 occurred 

2-я команда:

ffmpeg -i image.jpg -i audio.ogg -c:v libvpx -c:a copy outputvideo.webm 

Это производит плохое качество, не приемлемо для меня.

3-я команда:

ffmpeg -i image.jpg -i audio.ogg -c:v libvpx -crf 4 -c:a copy outputvideo.webm 

Поэтому я добавил -crf 4параметр. Я ожидал, что это даст видео без потерь. На самом деле это никак не влияет. -crf 4и -crf 63дает такие же результаты.

Затем я попробовал аналогичные настройки с libvpx-vp9кодеком, но не повезло. Даже -lossless 1параметр ничего не делает для улучшения качества.

0

3 ответа на вопрос

0
nico_lab

1st command: jpg is not contains webm. http://en.wikipedia.org/wiki/WebM

2nd command: You can use -loop 1 in front of inputfile, and use -shortest behind inputfile.

ffmpeg -loop 1 -i image.jpg -i audio.ogg -shortest -c:v libvpx -c:a copy outputvideo.webm 

If you want to set fps, use fps filter.

ffmpeg -loop 1 -i image.jpg -i audio.ogg -vf fps=10 -shortest -c:v libvpx -c:a copy outputvideo.webm 

3rd command: You can use quality best. http://ffmpeg.org/ffmpeg-codecs.html#libvpx

ffmpeg -loop 1 -i image.jpg -i audio.ogg -shortest -c:v libvpx -quality best -c:a copy outputvideo.webm 
Ваши команды создают более одного кадра. Поскольку мои аудиофайлы слишком длинные, размер видеопотока будет как минимум в 2 раза больше, чем у данного файла `.jpg`, с худшим качеством. Кстати, я пытался установить fps на меньшие значения, чем 1, но это не сработало. Я пробовал оба, `-r 1 / 60` параметр и` -vf fps = "fps = 1/60" `фильтр. Я не знаю почему. destor 9 лет назад 0
Я не знаю, почему libvpx не устанавливает fps при меньших значениях, чем 1, использование libx264 устанавливает fps при меньших значениях, чем 1. wiki: [Создание слайд-шоу видео из изображений] (https://trac.ffmpeg.org/wiki / Создать% 20a% 20видео% 20 слайд-шоу% 20из% 20 изображений) `ffmpeg -loop 1 -i image.jpg -i audio.ogg -vf -vf" fps = 1/60 "-pix_fmt yuv420p -shortest -c: v libx264 - c: копия outputvideo.mkv` nico_lab 9 лет назад 0
0
stib

Я не уверен, что это ошибка, но -qscale:vвместо -crflibvpx вместо нее работает. Qscale работает противоположно CRF, чем выше, тем больше / лучше качество. Попробуйте использовать вторую команду -qscale:v 10вместо -crfопции.

0
Adrian

You could try to get quality by manually setting video bitrate "-b:v 2000M"

As for FPS, seems like it doesn't affect size much. Experimented a bit with -b:v and framerates:

ffmpeg -loop 1 -i ./frames/0254.png -i camera-shutter-click-07.wav -r 10000 -pix_fmt yuv420p -shortest -vcodec libvpx -strict -2 -acodec vorbis outputvideo6.webm ffmpeg -loop 1 -i ./frames/0254.png -i camera-shutter-click-07.wav -pix_fmt yuv420p -shortest -vcodec libvpx -strict -2 -acodec vorbis outputvideo5.webm ffmpeg -loop 1 -i ./frames/0254.png -i camera-shutter-click-07.wav -r 10000 -pix_fmt yuv420p -shortest -b:v 2000M -vcodec libvpx -strict -2 -acodec vorbis outputvideo7.webm 

First two videos are 25fps and 10000fps but their filesizes are almost equal: 101.3 and 102.7kB But since in third bitrate is higher it's size 339.7kB

ffmpeg -i outputvideo5.webm -i outputvideo6.webm -i outputvideo7.webm ffmpeg version 2.5.git Copyright (c) 2000-2015 the FFmpeg developers built on Jan 11 2015 19:12:34 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) configuration: --prefix=/home/alexandrov/ffmpeg_build --extra-cflags=-I/home/alexandrov/ffmpeg_build/include --extra-ldflags=-L/home/alexandrov/ffmpeg_build/lib --bindir=/home/alexandrov/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab libavutil 54. 16.100 / 54. 16.100 libavcodec 56. 20.100 / 56. 20.100 libavformat 56. 18.100 / 56. 18.100 libavdevice 56. 3.100 / 56. 3.100 libavfilter 5. 7.100 / 5. 7.100 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Input #0, matroska,webm, from 'outputvideo5.webm': Metadata: encoder : Lavf56.18.100 Duration: 00:00:01.32, start: 0.000000, bitrate: 613 kb/s Stream #0:0: Video: vp8, yuv420p, 1280x720, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc (default) Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default) Input #1, matroska,webm, from 'outputvideo6.webm': Metadata: encoder : Lavf56.18.100 Duration: 00:00:01.30, start: 0.000000, bitrate: 631 kb/s Stream #1:0: Video: vp8, yuv420p, 1280x720, SAR 1:1 DAR 16:9, 10k fps, 25 tbr, 1k tbn, 1k tbc (default) Stream #1:1: Audio: vorbis, 48000 Hz, stereo, fltp (default) Input #2, matroska,webm, from 'outputvideo7.webm': Metadata: encoder : Lavf56.18.100 Duration: 00:00:01.30, start: 0.000000, bitrate: 2088 kb/s Stream #2:0: Video: vp8, yuv420p, 1280x720, SAR 1:1 DAR 16:9, 10k fps, 25 tbr, 1k tbn, 1k tbc (default) Stream #2:1: Audio: vorbis, 48000 Hz, stereo, fltp (default) 

Похожие вопросы