
Ich folge diesem Dokument von der ffmpeg-Site:
Dadurch wird jede Minute ein Miniaturbild mit den Namen img001.jpg, img002.jpg, img003.jpg usw. erstellt. (%03d bedeutet, dass die Ordnungszahl jedes Miniaturbilds dreistellig sein muss.)
ffmpeg -i myvideo.avi -f image2 -vf fps=fps=1/60 img%03d.jpg
Dadurch wird alle 10 Minuten ein Miniaturbild mit den Namen „thumb0001.bmp“, „thumb0002.bmp“, „thumb0003.bmp“ usw. erstellt.
ffmpeg -i test.flv -f image2 -vf fps=fps=1/600 thumb%04d.bmp
Aber wenn ich die Optionen 1/600 verwende, funktioniert es nicht und es wird der folgende Fehler angezeigt:
ffmpeg -i src/e0b4c83e7ab2ada44c2785d25b0d4a9d45fc0c66.3gp -f image2 -vf fps=fps=1/250 thumbs/images%d.jpg
ffmpeg version 1.0.3 Copyright (c) 2000-2012 the FFmpeg developers
built on Oct 13 2013 21:48:31 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-3)
configuration:
libavutil 51. 73.101 / 51. 73.101
libavcodec 54. 59.100 / 54. 59.100
libavformat 54. 29.104 / 54. 29.104
libavdevice 54. 2.101 / 54. 2.101
libavfilter 3. 17.100 / 3. 17.100
libswscale 2. 1.101 / 2. 1.101
libswresample 0. 15.100 / 0. 15.100
Guessed Channel Layout for Input Stream #0.1 : mono
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'src/e0b4c83e7ab2ada44c2785d25b0d4a9d45fc0c66.3gp':
Metadata:
major_brand : 3gp4
minor_version : 512
compatible_brands: isomiso23gp4
creation_time : 2013-11-27 14:02:52
Duration: 00:05:01.33, start: 0.000000, bitrate: 177 kb/s
Stream #0:0(und): Video: h263 (s263 / 0x33363273), yuv420p, 176x144 [SAR 12:11 DAR 4:3], 161 kb/s, 15 fps, 15 tbr, 15 tbn, 29.97 tbc
Metadata:
creation_time : 2013-11-27 14:06:48
handler_name : VideoHandler
Stream #0:1(und): Audio: amr_nb (samr / 0x726D6173), 8000 Hz, mono, flt, 12 kb/s
Metadata:
creation_time : 2013-11-27 14:06:48
handler_name : SoundHandler
[mjpeg @ 0x3621940] bitrate tolerance too small for bitrate
[mjpeg @ 0x363c1c0] ff_frame_thread_encoder_init failed
Output #0, image2, to 'thumbs/images%d.jpg':
Metadata:
major_brand : 3gp4
minor_version : 512
compatible_brands: isomiso23gp4
Stream #0:0(und): Video: mjpeg, yuvj420p, 176x144 [SAR 12:11 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 0k tbc
Metadata:
creation_time : 2013-11-27 14:06:48
handler_name : VideoHandler
Stream mapping:
Stream #0:0 -> #0:0 (h263 -> mjpeg)
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Warum funktioniert 1/60 und nicht 1/600? Wie kann ich das beheben? Auch das Aktualisieren des Servers ist keine Option.
Antwort1
Ich weiß noch nicht, warum die Standardeinstellungen für die JPG-Ausgabe bei Verwendung derfps
Videofilterbei bestimmten Werten treten die folgenden Fehler auf:
[mjpeg @ 0x3621940] bitrate tolerance too small for bitrate
[mjpeg @ 0x363c1c0] ff_frame_thread_encoder_init failed
Beispiel
-qscale:v
Um dieses Problem zu umgehen, können Sie die Option (oder die Aliasoption ) verwenden -q:v
:
ffmpeg -i input.mkv -vf fps=1/250 -qscale:v 2 output%d.jpg
Anmerkungen
Der effektive Bereich für
-qscale:v
die Ausgabe im JPEG-Format ist eine lineare Skala von 2 bis 31. Ein niedrigerer Wert bedeutet eine höhere Qualität.-f image2
wird nicht benötigt.Du kannst den Zusatz auch weglassen,
fps=
wie in meinem Beispiel.Eine weitere Problemumgehung besteht darin, ein anderes Ausgabeformat wie beispielsweise PNG zu verwenden. Dies ist für Sie jedoch möglicherweise keine akzeptable Lösung.
Eine weitere mögliche Problemumgehung ist die Verwendung des
select
Videofilterstattdessen, aber es ist nicht so benutzerfreundlich.Die Verwendung
-threads 1
behebt denff_frame_thread_encoder_init failed
Fehler, jedoch nicht den anderen Fehler.-r
Bei Verwendung anstelle des Filters treten die gleichen Fehler auffps
.
Ich werde diese Antwort aktualisieren, wenn ich mehr herausfinde (mir ist die Zeit für eine gründliche Untersuchung ausgegangen ...).