質問: 適切な品質のffmpegを使用してビデオをgifに変換する方法を教えてください。 私はffmpegでflv映画をgifファイルに変換しています。ffmpeg -i input.flv -ss 00:00:00.000 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif うまく動作しますが、出力gifファイルは非常に低品質です。どのように変換gifの品質を向上させることができますか?コマンドの出力:ffmpeg -i input.flv -ss 00:00:00.000 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif ffmpeg version 0.8.5-6:0.8.5-0ubuntu0.12.10.1, copyright (c) 2000-2012 the libav developers built on jan 24 2013 14:52:53 with gcc 4.7.2 *** this program is deprecated *** this program is only provided for compatibility and will be removed in a future release. please use avconv instead. input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.flv': metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2013-02-14 04:00:07 duration: 00:00:18.85, start: 0.000000, bitrate: 3098 kb/s stream #0.0(und): video: h264 (high), yuv420p, 1280x720, 2905 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc metadata: creation_time : 1970-01-01 00:00:00 stream #0.1(und): audio: aac, 44100 hz, stereo, s16, 192 kb/s metadata: creation_time : 2013-02-14 04:00:07 [buffer @ 0x92a8ea0] w:1280 h:720 pixfmt:yuv420p [scale @ 0x9215100] w:1280 h:720 fmt:yuv420p -> w:320 h:240 fmt:rgb24 flags:0x4 output #0, gif, to 'output.gif': metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2013-02-14 04:00:07 encoder : lavf53.21.1 stream #0.0(und): video: rawvideo, rgb24, 320x240, q=2-31, 200 kb/s, 90k tbn, 10 tbc metadata: creation_time : 1970-01-01 00:00:00 stream mapping: stream #0.0 -> #0.0 press ctrl-c to stop encoding frame= 101 fps= 32 q=0.0 lsize= 8686kb time=10.10 bitrate=7045.0kbits/s dup=0 drop=149 video:22725kb audio:0kb global headers:0kb muxing overhead -61.778676% ありがとう。
回答: ffmpegは高品質のgifを出力できるようになりました。古いビルドを使っているなら、 最近の静的ビルドをダウンロードする か ffmpeg をコンパイルすることを検討してください。ffmpegの例 203kこの例では、入力の最初の30秒をスキップして3秒の出力を作成します。それは幅320ピクセルになるように出力を拡大縮小し、アスペクト比を維持しながら自動的に高さを決定します。 palettegen および paletteuse フィルタは、ソースから生成されたカスタムパレットを生成して使用します。 パレットを生成する: ffmpeg -y -ss 30 -t 3 -i input.flv \ -vf fps=10,scale=320:-1:flags=lanczos,palettegen palette.png パレットを使用してgifを出力します。 ffmpeg -ss 30 -t 3 -i input.flv -i palette.png -filter_complex \ "fps=10,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif もっと多くの例とオプションについては ffmpeg を使った高品質gifを見てください。convertの例別のコマンドラインメソッドは、ffmpegを使用してムービーをフレームにエクスポートしてから、imagemagick(またはgraphicsmagick)のconvertを使用してgifを作成することです。 246k フレームをエクスポートする: mkdir frames ffmpeg -i input -vf scale=320:-1:flags=lanczos,fps=10 frames/ffout%03d.png それから、アニメーションgifを作成するためにconvert(またはgraphicsmagickが好きならgm convert)を使ってください: convert -loop 0 frames/ffout*.png output.gif convertを使用すると、必要に応じて-delayを使用してフレーム間の遅延を制御できます。