Saludos. Puedo convertir un archivo de video en un archivo gif animado de alta calidad ejecutando las siguientes dos líneas de comandos debajo, una tras otra.
ffmpeg -i test.mkv -vf palettegen palette.png
ffmpeg -i test.mkv -i palette.png -lavfi paletteuse animated.gif
¿Hay alguna forma de encadenar las dos líneas de comandos para que solo tenga que ejecutar una línea?
La razón por la que hago esto es que me gustaría usarwinffentonces necesito encadenar las dos líneas en una operación de línea ejecutable ffmpeg. Puedo convertir cualquier archivo de vídeo en un gif animado con winff editando el archivo xml para que se parezca a las líneas siguientes.
<GifAnimation>
<label>Gif Animation Simple</label>
<params>-f gif</params>
<extension>gif</extension>
<category>Gif Animation</category>
</GifAnimation>
Pero, ¿qué modificación debo hacer en la <params>
línea para encadenar las dos líneas siguientes en una operación de línea ejecutable ffmpeg?
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.
ACTUALIZACIÓN Pregunta gracias asopa malvadaayuda
Probé las respuestas que me dio Evilsoup, vea el comando a continuación:
ffmpeg -i test.mkv -filter_complex 'palettegen[PAL],[0:v][PAL]paletteuse' output.gif
y
ffmpeg -i test.mkv -filter_complex 'palettegen,[v]paletteuse' output.gif
Crea un archivo gif animado pero solo tiene una imagen en el primer fotograma, todos los demás fotogramas están en blanco/casi se parece a todos los fotogramas, pero el primero tiene canales alfa. ver imagen gif adjunta.
Recibo errores cuando ejecuto el comando que se muestra a continuación, lo que podría ser la razón por la que ¿tiene alguna idea de cómo solucionar este problema?
[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
Vea la lista completa a continuación:
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$
Respuesta1
Necesita utilizar una cadena de filtros (consulte laFFmpegwikiyen línea documentación).
ffmpeg -i input.mkv -filter_complex 'palettegen[PAL],[0:v][PAL]paletteuse' output.gif
Básicamente, el palettegen
filtro toma una sola entrada de video (por lo que, siempre que no tenga más de una transmisión de video entre sus entradas, no necesita especificar dónde está la entrada) y proporciona una salida de video (bueno, imagen). ; mientras tanto,paletteuse
tomadosEntradas de vídeo (bueno, un vídeo y una imagen).
Normalmente, en una cadena de filtros, la primera salida de cada filtro se convierte en la primera entrada del siguiente en la cadena. Sin embargo, el paletteuse
filtro espera que el video sea su primera entrada, con la 'paleta' como su segunda entrada; esta es una de las razones por las que no puede usar simplemente palettegen,paletteuse
. El[0:v]
usos de FFmpegselección de flujosintaxis (mira aquípara ver algunos ejemplos de su uso) para indicarle paletteuse
que tome video del primer archivo de entrada (FFmpeg comienza a contar desde 0 para la mayoría de las cosas) como su primera entrada.
Técnicamente podrías escribir lo anterior así:
ffmpeg -i input.mkv -filter_complex 'palettegen,[v]paletteuse' output.gif
...y funcionaría igual de bien (suponiendo que solo haya una transmisión de video entre las entradas). Pero creo que etiquetar el palettegen
resultado y decirle explícitamente adónde ir hace que las cosas sean un poco más claras de seguir.
Nunca he usado WinFF, pero parece que solo necesitas poner todas las opciones de FFmpeg entre las etiquetas. Entonces, esto debería funcionar:
<GifAnimation>
<label>Gif Animation Simple</label>
<params>-filter_complex 'palettegen[PAL],[0:v][PAL]paletteuse'</params>
<extension>gif</extension>
<category>Gif Animation</category>
</GifAnimation>
Respuesta2
Solo quería agregar el código que funcionó en caso de que alguien más lo necesite.
Esta es la línea final que funcionó. Todo el agradecimiento a evilsoup y Mulvya.
ffmpeg -i test.mkv -filter_complex 'palettegen[PAL];[0:v]fifo[v0];[v0][PAL]paletteuse' test.gif
Además, si desea que winff funcione con gifs animados, simplemente agregue estas líneas al presets.xml
archivo winff.
<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>