Я хочу объединить аудиофайл и один файл изображения в видео. Вывод будет в формате .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 не улучшает качество.

3 ответа3

0

1-я команда: jpg не содержит webm. http://en.wikipedia.org/wiki/WebM

2-я команда: вы можете использовать -loop 1 перед inputfile и использовать -shortest за inputfile.

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

Если вы хотите установить fps, используйте фильтр fps.

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

3-я команда: вы можете использовать лучшее качество. 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
0

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

0

Вы можете попытаться получить качество, вручную установив битрейт видео "-b:v 2000M"

Что касается FPS, кажется, что это не сильно влияет на размер. Немного поэкспериментировал с -b:v и частотой кадров:

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

Первые два видео 25fps и 10000fps, но их размеры файлов почти равны: 101.3 и 102.7kB. Но поскольку в третьем битрейте он больше, его размер 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .