Saudações, posso converter um arquivo de vídeo em um arquivo gif animado de alta qualidade executando as duas linhas de comandos a seguir, uma após a outra.
ffmpeg -i test.mkv -vf palettegen palette.png
ffmpeg -i test.mkv -i palette.png -lavfi paletteuse animated.gif
Existe alguma maneira de encadear as duas linhas de comandos, então eu só tenho que executar uma linha?
A razão pela qual estou fazendo isso é que gostaria de usarwinffentão preciso encadear as duas linhas em uma operação de linha executável ffmpeg. Posso converter qualquer arquivo de vídeo em um gif animado com winff editando o arquivo xml para se parecer com as linhas abaixo.
<GifAnimation>
<label>Gif Animation Simple</label>
<params>-f gif</params>
<extension>gif</extension>
<category>Gif Animation</category>
</GifAnimation>
Mas que alteração preciso fazer na <params>
linha para encadear as duas linhas abaixo em uma operação de linha executável 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.
ATUALIZAÇÃO Pergunta graças asopa do malajuda
Eu tentei as respostas que o evilsoup me deu, veja o comando abaixo:
ffmpeg -i test.mkv -filter_complex 'palettegen[PAL],[0:v][PAL]paletteuse' output.gif
e
ffmpeg -i test.mkv -filter_complex 'palettegen,[v]paletteuse' output.gif
Ele cria um arquivo gif animado, mas só tem uma imagem no primeiro quadro, todos os outros quadros estão em branco / quase se parece com todos os quadros, mas o primeiro tem canais alfa. veja a imagem gif anexada.
Recebo erros quando executo o comando, veja abaixo. Qual pode ser o motivo de alguma ideia de como consertar isso?
[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
Veja lista completa abaixo:
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$
Responder1
Você precisa usar uma cadeia de filtros (veja oWiki do FFmpegeon-line documentação).
ffmpeg -i input.mkv -filter_complex 'palettegen[PAL],[0:v][PAL]paletteuse' output.gif
Basicamente, o palettegen
filtro recebe uma única entrada de vídeo (desde que você não tenha mais de um fluxo de vídeo entre suas entradas, não é necessário especificar onde está a entrada) e fornece uma saída de vídeo (bem, imagem). ; enquanto isso, paletteuse
levadoisentradas de vídeo (bem, um vídeo e uma imagem).
Normalmente, em uma cadeia de filtros, a primeira saída de cada filtro se torna a primeira entrada do próximo na cadeia. No entanto, o paletteuse
filtro espera que o vídeo seja sua primeira entrada, com a 'paleta' como sua segunda entrada - isso é parte do motivo pelo qual você não pode simplesmente usar palettegen,paletteuse
. O [0:v]
usa FFmpeg'sseleção de fluxosintaxe (Veja aquipara alguns exemplos de seu uso) para solicitar paletteuse
o vídeo do primeiro arquivo de entrada (o FFmpeg começa a contar a partir de 0 para a maioria das coisas) como sua primeira entrada.
Você poderia tecnicamente escrever o texto acima assim:
ffmpeg -i input.mkv -filter_complex 'palettegen,[v]paletteuse' output.gif
...e funcionaria tão bem (assumindo apenas um fluxo de vídeo entre as entradas). Mas acho que rotular a palettegen
saída e dizer explicitamente para onde ir torna as coisas um pouco mais claras de seguir.
Nunca usei WinFF, mas parece que você só precisa colocar todas as opções do FFmpeg entre as tags? Então, isso deve 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>
Responder2
Eu só queria adicionar o código que funcionou caso alguém precise dele
Esta é a linha final que funcionou. Todos os agradecimentos vão para Evilsoup e Mulvya.
ffmpeg -i test.mkv -filter_complex 'palettegen[PAL];[0:v]fifo[v0];[v0][PAL]paletteuse' test.gif
Além disso, se você quiser que o winff funcione com gifs animados, basta adicionar estas linhas ao presets.xml
arquivo 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>