Ich habe eine AVI-Datei aus 30 PNG-Bildern erstellt, 15 Bilder/Sekunde:
ffmpeg -i %02d.png -r 15 video.avi
Aber als ich versuchte, die Bilder aus dem AVI-Format wiederherzustellen:
ffmpeg -i src.avi %02d.png
Ich habe nur 19 Bilder bekommen, statt 30! Ich habe auch diese beiden probiert:
ffmpeg -i src.avi -r 15 %02d.png
ffmpeg -r 15 -i src.avi %02d.png
beides mit dem gleichen Ergebnis. Es muss nicht extra erwähnt werden, dass Frames fehlen (z. B. Sprünge vom 4. zum 6.). Wie kommt das und wie löse ich das Problem?
Ausgabe für den ersten Befehl ( ffmpeg -i %02d.png -r 15 video.avi
):
ffmpeg version N-50314-gf6fff8e Copyright (c) 2000-2013 the FFmpeg developers
built on Feb 25 2013 21:57:41 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 17.103 / 52. 17.103
libavcodec 54. 92.100 / 54. 92.100
libavformat 54. 63.100 / 54. 63.100
libavdevice 54. 3.103 / 54. 3.103
libavfilter 3. 41.100 / 3. 41.100
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, image2, from '%02d.png':
Duration: 00:00:01.20, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb24, 713x386 [SAR 3779:3779 DAR 713:386], 25 fps, 25 tbr, 25 tbn, 25 tbc
Output #0, avi, to 'video.avi':
Metadata:
ISFT : Lavf54.63.100
Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 713x386 [SAR 1:1 DAR 713:386], q=2-31, 200 kb/s, 15 tbn, 15 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png -> mpeg4)
Press [q] to stop, [?] for help
frame= 19 fps=0.0 q=2.0 Lsize= 46kB time=00:00:01.26 bitrate= 297.1kbits/s dup=0 drop=11
video:40kB audio:0kB subtitle:0 global headers:0kB muxing overhead 15.248175%
Ausgabe für zweiten Befehl ( ffmpeg -i video.avi %02d.png
):
ffmpeg version N-50314-gf6fff8e Copyright (c) 2000-2013 the FFmpeg developers
built on Feb 25 2013 21:57:41 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 17.103 / 52. 17.103
libavcodec 54. 92.100 / 54. 92.100
libavformat 54. 63.100 / 54. 63.100
libavdevice 54. 3.103 / 54. 3.103
libavfilter 3. 41.100 / 3. 41.100
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, avi, from 'video.avi':
Metadata:
encoder : Lavf54.63.100
Duration: 00:00:01.27, start: 0.000000, bitrate: 297 kb/s
Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 713x386 [SAR 1:1 DAR 713:386], 15 tbr, 15 tbn, 15 tbc
Output #0, image2, to '%02d.png':
Metadata:
encoder : Lavf54.63.100
Stream #0:0: Video: png, rgb24, 713x386 [SAR 1:1 DAR 713:386], q=2-31, 200 kb/s, 90k tbn, 15 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 -> png)
Press [q] to stop, [?] for help
frame= 19 fps=0.0 q=0.0 Lsize=N/A time=00:00:01.26 bitrate=N/A
video:129kB audio:0kB subtitle:0 global headers:0kB muxing overhead -100.016665%
Antwort1
Gleiche Bildrate für Eingabe und Ausgabe
Verwenden Sie -framerate
diese Option als Eingabeoption, um die Bildrate für Bildeingaben festzulegen. Beispiel:
ffmpeg -framerate 15 -i %02d.png -pix_fmt yuv420p output.mp4
Wenn Sie diese Option weglassen, wird die Standardeinstellung -framerate 25
angewendet. Wenn Sie nur eine Eingabebildrate angeben, wie im obigen Beispiel gezeigt, übernimmt ffmpeg dieselbe Bildrate für die Ausgabe, ohne Bilder zu löschen oder zu duplizieren.
-pix_fmt yuv420p
wird empfohlen, aus Kompatibilitätsgründen bei der Ausgabe von H.264-Videos hinzuzufügen.
Unterschiedliche Bildraten für Ein- und Ausgabe
Wenn Sie die Eingabe- und Ausgabebildrate variieren möchten, fügen Sie die -r
Ausgabeoption hinzu. Dies kann nützlich sein, wenn Sie eine niedrige Eingabebildrate, aber aus Kompatibilitätsgründen eine standardmäßigere Ausgabebildrate wünschen:
ffmpeg -framerate 1 -i input_%03d.png -r 24 -pix_fmt youv420p output.mp4
Im obigen Beispiel wird ein Eingabebild pro Sekunde angezeigt, die Ausgabebilder werden jedoch dupliziert, sodass die Ausgabe tatsächlich mit 24 Bildern pro Sekunde wiedergegeben wird.