Grüße, ich kann eine Videodatei in eine hochwertige animierte GIF-Datei konvertieren, indem ich die folgenden beiden Befehlszeilen direkt nacheinander ausführe.
ffmpeg -i test.mkv -vf palettegen palette.png
ffmpeg -i test.mkv -i palette.png -lavfi paletteuse animated.gif
Gibt es eine Möglichkeit, die beiden Befehlszeilen miteinander zu verketten, sodass ich nur eine Zeile ausführen muss?
Der Grund, warum ich das mache, ist, dass ich gerne verwenden möchtefrankalso muss ich die beiden Zeilen zu einer ausführbaren ffmpeg-Zeilenoperation zusammenfassen. Ich kann jede Videodatei mit WinFF in ein animiertes GIF umwandeln, indem ich die XML-Datei so bearbeite, dass sie wie die folgenden Zeilen aussieht.
<GifAnimation>
<label>Gif Animation Simple</label>
<params>-f gif</params>
<extension>gif</extension>
<category>Gif Animation</category>
</GifAnimation>
Aber welche Änderungen muss ich an der Zeile vornehmen, <params>
um die beiden folgenden Zeilen zu einer ausführbaren ffmpeg-Zeilenoperation zu verketten?
ffmpeg -i test.mkv -vf palettegen palette.png
ffmpeg -i test.mkv -i palette.png -lavfi paletteuse animated.gif
It looks like it needs to:
1) generate the color palette from the video
2) save the color palette to a file
3) read the color palette back in
4) apply it to the gif animation file.
UPDATE Frage dankböse Suppehelfen
Ich habe die Antworten von evilsoup ausprobiert, siehe Befehl unten:
ffmpeg -i test.mkv -filter_complex 'palettegen[PAL],[0:v][PAL]paletteuse' output.gif
Und
ffmpeg -i test.mkv -filter_complex 'palettegen,[v]paletteuse' output.gif
Es erstellt eine animierte GIF-Datei, aber nur das erste Frame enthält ein Bild. Alle anderen Frames sind leer. Es sieht fast so aus, als ob alle Frames außer dem ersten Alphakanäle hätten. Siehe beigefügtes GIF-Bild.
Ich erhalte Fehlermeldungen, wenn ich den Befehl ausführe (siehe unten). Was könnte die Ursache sein? Irgendwelche Ideen, wie man das beheben kann?
[Parsed_paletteuse_1 @ 0xd526c0] [framesync @ 0xec5108] Buffer queue overflow, dropping.
Last message repeated 82 times
[Parsed_paletteuse_1 @ 0xd526c0] [framesync @ 0xec5108] Buffer queue overflow, dropping.
Last message repeated 36 times
Die vollständige Liste finden Sie unten:
rt@sys76:/tmp$ ffmpeg -i test.mkv -filter_complex 'palettegen[PAL],[0:v][PAL]paletteuse' output.gif
ffmpeg version 2.8.6-1ubuntu2 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.3.1 (Ubuntu 5.3.1-11ubuntu1) 20160311
configuration: --prefix=/usr --extra-version=1ubuntu2 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
WARNING: library configuration mismatch
avcodec configuration: --prefix=/usr --extra-version=1ubuntu2 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv --enable-version3 --disable-doc --disable-programs --disable-avdevice --disable-avfilter --disable-avformat --disable-avresample --disable-postproc --disable-swscale --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libvo_aacenc --enable-libvo_amrwbenc
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Input #0, matroska,webm, from 'test.mkv':
Metadata:
ENCODER : Lavf56.40.101
Duration: 00:00:07.40, start: 0.000000, bitrate: 125 kb/s
Stream #0:0: Video: h264 (High), yuv420p, 560x480, SAR 1:1 DAR 7:6, 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
Metadata:
ENCODER : Lavc56.60.100 libx264
DURATION : 00:00:07.400000000
File 'output.gif' already exists. Overwrite ? [y/N] y
Output #0, gif, to 'output.gif':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Video: gif, pal8, 560x480 [SAR 1:1 DAR 7:6], q=2-31, 200 kb/s, 25 fps, 100 tbn, 25 tbc (default)
Metadata:
encoder : Lavc56.60.100 gif
Stream mapping:
Stream #0:0 (h264) -> palettegen
Stream #0:0 (h264) -> paletteuse:default
paletteuse -> Stream #0:0 (gif)
Press [q] to stop, [?] for help
[Parsed_paletteuse_1 @ 0xd526c0] [framesync @ 0xec5108] Buffer queue overflow, dropping.
Last message repeated 82 times
[Parsed_paletteuse_1 @ 0xd526c0] [framesync @ 0xec5108] Buffer queue overflow, dropping.
Last message repeated 36 times
[Parsed_palettegen_0 @ 0xd52220] 255(+1) colors generated out of 201259 colors; ratio=0.001267
frame= 65 fps= 47 q=-0.0 Lsize= 130kB time=00:00:07.40 bitrate= 143.5kbits/s
video:128kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.005128%
rt@sys76:/tmp$
Antwort1
Sie müssen eine Filterkette verwenden (sieheFFmpeg-WikiUndonline Dokumentation).
ffmpeg -i input.mkv -filter_complex 'palettegen[PAL],[0:v][PAL]paletteuse' output.gif
Im Grunde genommen nimmt der palettegen
Filter einen einzelnen Videoeingang (solange Sie nicht mehr als einen Videostream unter Ihren Eingängen haben, müssen Sie nicht angeben, wo der Eingang ist) und gibt einen Videoausgang (also ein Bildausgang) aus; in der Zwischenzeit paletteuse
nimmtzweiVideoeingänge (also ein Video und ein Bild).
Normalerweise wird in einer Filterkette der erste Ausgang jedes Filters zum ersten Eingang des nächsten in der Kette. Der paletteuse
Filter erwartet jedoch, dass das Video sein erster Eingang ist, mit der „Palette“ als zweitem Eingang – dies ist einer der Gründe, warum Sie nicht einfach verwenden können palettegen,paletteuse
. Der [0:v]
verwendet FFmpegsStreamauswahlSyntax (siehe hierfür einige Anwendungsbeispiele), um anzugeben, paletteuse
dass als erste Eingabe das Video aus der ersten Eingabedatei verwendet werden soll (FFmpeg beginnt bei den meisten Dingen bei 0 zu zählen).
Technisch könnten Sie das Obige wie folgt schreiben:
ffmpeg -i input.mkv -filter_complex 'palettegen,[v]paletteuse' output.gif
... und es würde genauso gut funktionieren (unter der Annahme, dass es nur einen Videostream unter den Eingängen gibt). Aber ich denke, dass palettegen
die Dinge etwas klarer nachvollziehbarer sind, wenn man die Ausgabe beschriftet und ihr explizit mitteilt, wohin sie gehen soll.
Ich habe WinFF noch nie verwendet, aber es sieht so aus, als müssten Sie nur alle FFmpeg-Optionen zwischen die Tags setzen. Das hier sollte also funktionieren:
<GifAnimation>
<label>Gif Animation Simple</label>
<params>-filter_complex 'palettegen[PAL],[0:v][PAL]paletteuse'</params>
<extension>gif</extension>
<category>Gif Animation</category>
</GifAnimation>
Antwort2
Ich wollte nur den Code hinzufügen, der funktioniert hat, falls jemand anderes ihn braucht
Dies ist die letzte Zeile, die funktioniert hat; alles dank evilsoup und Mulvya.
ffmpeg -i test.mkv -filter_complex 'palettegen[PAL];[0:v]fifo[v0];[v0][PAL]paletteuse' test.gif
Wenn Sie Winff auch mit animierten GIFs verwenden möchten, fügen Sie einfach diese Zeilen zur Winff- presets.xml
Datei hinzu
<GifAnimationSimple>
<label>Gif Animation Simple</label>
<params>-f gif</params>
<extension>gif</extension>
<category>Gif Animation</category>
</GifAnimationSimple>
<GifAnimationbitrate>
<label>Gif Animation bitrate Quality</label>
<params>-f -b 2048k gif</params>
<extension>gif</extension>
<category>Gif Animation</category>
</GifAnimationbitrate>
<GifAnimationHigh>
<label>Gif Animation high Quality paletteuse</label>
<params>-filter_complex 'palettegen[PAL];[0:v]fifo[v0];[v0][PAL]paletteuse' </params>
<extension>gif</extension>
<category>Gif Animation</category>
</GifAnimationHigh>