Erstellen Sie ein Video aus JPG-Bildern mit ffmpeg

4695
floppydisk

Ich möchte ein kurzes Zeitraffervideo mit ffmpeg unter ubuntu 12.04 LTS erstellen. Ich habe einen Ordner mit allen Bildern mit den Namen DSC_0000.jpg DSC_0001.jpg und so weiter. Ich habe diese Frage gefunden ffmpeg: Erstellen Sie ein Video aus Bildern und ich versuche, den gleichen Befehl wie dort auszuführen:

ffmpeg -i DSC_%d.jpg -vcodec mpeg4 timelapse.avi 

und es scheitert mit

DSC_% d.jpg: Keine solche Datei oder Verzeichnis

Ich habe es auch probiert

ffmpeg -i DSC_%04d.jpg -vcodec mpeg4 timelapse.avi 

und es schlägt mit dem gleichen Fehler fehl

Und aus irgendeinem Grund verstehe mein ffmpeg die Option -start_number nicht, wenn ich es ausführen möchte

ffmpeg -start_number 0 -i DSC_%d.jpg -vcodec mpeg4 timelapse.avi 

Ich erhalte diesen Fehler:

Nicht erkannte Option 'start_number'

Wert '0' für Option 'start_number' konnte nicht gesetzt werden

Ich würde mich über jede Hilfe freuen

UPD1: Ich habe den zweiten Befehl erneut versucht und jetzt funktioniert es aus irgendeinem Grund. Die Ausgabevideodatei ist jedoch etwas seltsam: Sie beginnt normal, aber die Qualität wird mit jedem Frame schlechter. Und wird am Ende des Videos schrecklich. Das Ergebnis ist, dass die Videodatei sehr klein ist (nur 1,2 MB, während 46 Frames jeweils 900 KB umfassen ). Die Option -start_number funktioniert jedoch immer noch nicht. Hier ist die volle Leistung:

$ ffmpeg -i DSC_%04d.jpg -vcodec mpeg4 timelapse.avi ffmpeg version 0.10.12-7:0.10.12-1~precise1 Copyright (c) 2000-2014 the FFmpeg developers built on Apr 26 2014 09:49:36 with gcc 4.6.3 configuration: --arch=amd64 --disable-stripping --enable-pthreads --enable-runtime-cpudetect --extra-version='7:0.10.12-1~precise1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static libavutil 51. 35.100 / 51. 35.100 libavcodec 53. 61.100 / 53. 61.100 libavformat 53. 32.100 / 53. 32.100 libavdevice 53. 4.100 / 53. 4.100 libavfilter 2. 61.100 / 2. 61.100 libswscale 2. 1.100 / 2. 1.100 libswresample 0. 6.100 / 0. 6.100 libpostproc 52. 0.100 / 52. 0.100 Input #0, image2, from 'DSC_%04d.jpg': Duration: 00:00:01.84, start: 0.000000, bitrate: N/A Stream #0:0: Video: mjpeg, yuvj422p, 2304x1536 [SAR 300:300 DAR 3:2], 25 fps, 25 tbr, 25 tbn, 25 tbc File 'timelapse.avi' already exists. Overwrite ? [y/N] y Incompatible pixel format 'yuvj422p' for codec 'mpeg4', auto-selecting format 'yuv420p' [buffer @ 0x7134e0] w:2304 h:1536 pixfmt:yuvj422p tb:1/1000000 sar:300/300 sws_param: [buffersink @ 0x70bbe0] auto-inserting filter 'auto-inserted scale 0' between the filter 'src' and the filter 'out' [scale @ 0x6f7a20] w:2304 h:1536 fmt:yuvj422p -> w:2304 h:1536 fmt:yuv420p flags:0x4 Output #0, avi, to 'timelapse.avi': Metadata: ISFT : Lavf53.32.100 Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 2304x1536 [SAR 1:1 DAR 3:2], q=2-31, 200 kb/s, 25 tbn, 25 tbc Stream mapping: Stream #0:0 -> #0:0 (mjpeg -> mpeg4) Press [q] to stop, [?] for help frame= 46 fps= 17 q=31.0 Lsize= 1143kB time=00:00:01.84 bitrate=5090.2kbits/s  video:1137kB audio:0kB global headers:0kB muxing overhead 0.591912%   roman@Z500i5:~/Camera/Thunder/video$ ffmpeg -start_number 0 -i DSC_%04d.jpg -vcodec mpeg4 timelapse.avi ffmpeg version 0.10.12-7:0.10.12-1~precise1 Copyright (c) 2000-2014 the FFmpeg developers built on Apr 26 2014 09:49:36 with gcc 4.6.3 configuration: --arch=amd64 --disable-stripping --enable-pthreads --enable-runtime-cpudetect --extra-version='7:0.10.12-1~precise1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static libavutil 51. 35.100 / 51. 35.100 libavcodec 53. 61.100 / 53. 61.100 libavformat 53. 32.100 / 53. 32.100 libavdevice 53. 4.100 / 53. 4.100 libavfilter 2. 61.100 / 2. 61.100 libswscale 2. 1.100 / 2. 1.100 libswresample 0. 6.100 / 0. 6.100 libpostproc 52. 0.100 / 52. 0.100 Unrecognized option 'start_number' Failed to set value '0' for option 'start_number' 

Mein ffmpeg wird von diesem ppa installiert: https://launchpad.net/~jon-severinsson/+archive/ffmpeg

Die Ausgabe von ffmpeg aus Standard-Ubuntu-Repos bestand nur aus den letzten beiden Zeilen:

Unrecognized option 'start_number' Failed to set value '0' for option 'start_number' 

UPD2: Siehe die Antwort unten

4
Bitte fügen Sie die vollständige Ausgabe der `ffmpeg`-Konsole bei. Ich vermute, Sie verwenden die Fälschung "ffmpeg" von einer Verzweigung, die die Option "-start_number" wahrscheinlich nicht unterstützt. Die Konsolenausgabe bestätigt dies. LordNeckbeard vor 9 Jahren 1
Aus irgendeinem Grund, der nur den Entwicklern am besten bekannt ist, ist die Standardqualitätseinstellung für ffmpeg auf "Müll" gesetzt. Wenn Sie also nicht die gewünschte Qualität oder Bitrate angeben, wird sie so codiert, dass Sie sie an jemanden senden möchten, der 1995 mit einem 14-kb / s-Modem im Internet surft. Versuchen Sie es mit der Einstellung Constant Rate Factor: `-crf n`, wobei n ein a ist Anzahl von 1 (höchste Qualität / geringste Komprimierung) bis 35 (ish) (Müllqualität, kompatibel mit Netscape Navigator 1.0). Mit -crf 20 erhalten Sie ungefähr die Kodierung in DVD-Qualität. -start-number ist wahrscheinlich redundant, wenn Ihre Bilder bei 0 beginnen. stib vor 9 Jahren 3
Vielen Dank, dass Sie die Schleife zu Ihrer Frage geschlossen haben. Es bleibt jedoch in der Warteschlange für unbeantwortete Fragen hängen. Das Q & A-Format basiert darauf, dass Fragen nur Fragen sind und Lösungen als Antworten gepostet werden. Sie haben die Lösung als Teil Ihrer Frage veröffentlicht. Könnten Sie Ihre Lösung als Antwort posten? Vielen Dank. fixer1234 vor 8 Jahren 0

1 Antwort auf die Frage

0
floppydisk

Endlich habe ich eine Lösung gefunden, aber ohne ffmpeg. Dieser Befehl macht, was ich wollte:

mencoder "mf://*.jpg" -mf fps=20:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vbitrate=7000 -oac copy -o timelapse.avi 

Scheint ein wenig überkompliziert, aber es macht den Job :)