Kombinieren von 1 Bild + 1 Audio mit FFmpeg

1326
destor

Ich möchte eine Audiodatei und eine Bilddatei zu einem Video kombinieren. Die Ausgabe erfolgt in einem .webmFormat, das ich verwenden werde libvpx. Das Video muss ein Bild mit der besten / verlustfreien Qualität haben.

Bisher habe ich diese ausprobiert, aber ich habe schlechte oder keine Ergebnisse erhalten:

Erster Befehl:

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

Das funktioniert nicht. Es gibt diesen Fehler:

[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. Befehl:

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

Dies führt zu einer schlechten Qualität, die für mich nicht akzeptabel ist.

3. Befehl:

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

Also habe ich -crf 4Parameter hinzugefügt . Ich hatte erwartet, dass dies visuell verlustfreie Videos produzieren würde. In der Tat hat es überhaupt keine Wirkung. -crf 4und -crf 63produziert die gleichen Ergebnisse.

Dann habe ich die ähnlichen Einstellungen mit dem libvpx-vp9Codec Codec im Glossar erklärt versucht, aber kein Glück. Selbst der -lossless 1Parameter trägt nicht zur Verbesserung der Qualität bei.

0

3 Antworten auf die Frage

0
nico_lab

1. Befehl: jpg enthält kein webm. http://en.wikipedia.org/wiki/WebM

2. Befehl: Sie können -loop 1vor inputfile und -shortesthinter inputfile verwenden.

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

Wenn Sie fps einstellen möchten, verwenden Sie den fps-Filter .

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

3. Befehl: Sie können Qualität am besten verwenden. 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 
Ihre Befehle erzeugen mehr als nur einen Frame. Da meine Audiodateien zu lang sind, ist die Video-Stream-Größe mindestens zweimal größer als die angegebene `.jpg'-Datei, bei schlechterer Qualität. Übrigens habe ich versucht, fps auf kleinere Werte als 1 einzustellen, aber es hat nicht funktioniert. Ich habe sowohl den Parameter -r 1/60 als auch den Parameter -vf fps = "fps = 1/60" ausprobiert. Ich weiß nicht warum. destor vor 9 Jahren 0
Ich weiß nicht, warum bei libvpx für fps keine kleineren Werte als 1 festgelegt werden. Mit libx264 werden fps bei kleineren Werten als 1 festgelegt. Wiki: [Erstellen einer Videodiashow aus Bildern] (https://trac.ffmpeg.org/wiki /% 20a% 20video% 20slideshow% 20% von% 20images erstellen) `ffmpeg -loop 1 -i image.jpg -i audio.ogg -vf -vf" fps = 1/60 "-pix_fmt yuv420p -shortest -c: v libx264 - c: eine Kopie outputvideo.mkv` nico_lab vor 9 Jahren 0
0
stib

Ich bin mir nicht sicher, ob es ein Fehler ist, wobei jedoch -qscale:vanstelle von -crfWerken für libvpx. Qscale arbeitet entgegengesetzt zu CRF, höher ist höher / besser. Versuchen Sie es mit dem zweiten Befehl -qscale:v 10anstelle der -crfOption.

0
Adrian

Sie können versuchen, Qualität zu erzielen, indem Sie die Video-Bitrate "-b: v 2000M" manuell einstellen.

Was FPS angeht, scheint es, dass es die Größe kaum beeinflusst. Ein wenig mit -b: v und Frameraten experimentiert:

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 

Die ersten beiden Videos sind 25fps und 10000fps, aber ihre Dateigrößen sind fast gleich: 101.3 und 102.7kB. Da jedoch die dritte Bitrate höher ist, hat sie eine Größe von 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)