2016-06-01 21 views
2

ffmpegを使用して高品質のビデオをgifに変換すると、ほとんどのビデオは60fps以上で720pですが、以下のコードを使用してビデオをgifに変換すると、幅が大きくなると、私はさらに低いFPSを得る720代わりの480を例えばとして - 私が指摘している別の問題があるffmpegを使用してmp4をgifに変換するとき

#!/usr/bin/env 
palette=/tmp/pallete.png 
filter="fps=50,scale=480:-1:flags=lanczos" 

ffmpeg -y -i test.mov -vf $filter,palettegen=stats_mode=diff $palette 
ffmpeg -y -i test.mov -i $palette -lavfi "$filter [x]; [x][1:v] paletteuse" test.gif 

、GIF出力のための非常に低いFPSを取得します。ここ

は、出力ログの例では、出力FPSが割り当てられ50fps

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/201631203815.mp4': 
Metadata: 
major_brand  : isom 
minor_version : 512 
compatible_brands: isomiso2avc1mp41 
encoder   : Lavf56.36.100 
Duration: 00:00:05.48, start: 0.016000, bitrate: 1579 kb/s 

Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1/0x31637661), yuv420p, 1334x1334, 1576 kb/s, 60.18 fps, 60 tbr, 1000k tbn, 50 tbc (default) 
Metadata: 
    handler_name : VideoHandler 

Input #1, png_pipe, from '/tmp/pallete.png': 
    Duration: N/A, bitrate: N/A 
Stream #1:0: Video: png, rgba(pc), 16x16 [SAR 1:1 DAR 1:1], 25 tbr, 25 tbn, 25 tbc 

Output #0, gif, to '/tmp/201631203815.gif': 
Metadata: 
    major_brand  : isom 
    minor_version : 512 
    compatible_brands: isomiso2avc1mp41 
    encoder   : Lavf56.40.101 
Stream #0:0: Video: gif, pal8, 480x480, q=2-31, 200 kb/s, 50 fps, 100 tbn, 50 tbc (default) 
Metadata: 
    encoder   : Lavc56.60.100 gif 
Stream mapping: 
    Stream #0:0 (h264) -> fps 
    Stream #1:0 (png) -> paletteuse:palette 
    paletteuse -> Stream #0:0 (gif) 
Press [q] to stop, [?] for help 

frame= 275 fps= 32 q=-0.0 Lsize= 2480kB time=00:00:05.50 bitrate=3693.5kbits/s  

より低いどのように私は、ユーザーが設定したいただきまし出力FPSが常にあることを保証するのですか? これに関するリソースは高く評価されています。

UPDATE

私は高いFPS例えばfilter="fps=90,scale=480:-1:flags=lanczos"の使用は、スローモーションの効果と同様に、出力FPSが15fpsの周りはまだ低く、GIFを遅くする効果がある

ことも気づいています

答えて

5

明示的に同じ低いFPS出力を与え 結果フレーム= 346 FPS = 24、Q = -0.0 LSIZE = 6506kB時間= 00:00:06.92 ビットレート= 7701.8kbits/S

これは出力fpsではありません。エンコードの速度はです。ほとんどのプレーヤーは、50より高いfpsでGIFを正しく再生しません。この動作を示すdemoを参照してください。

+0

多くの意味があり、gfycatを使ってgifをmp4に変換すると、最高のビデオを提供するように思われます。 –

+1

@ 8bittreeアーカイブリンクに変更されました。 – Mulvya

2

私はFFmpegでGIFファイルを作成する経験はありませんが、私が知る限り、fpsフィルタには実際のフレームレート値のための個別の "fps"パラメータがありますので、省略すると正しく動作しない可能性があります。

だけフィルタが正しい値を取得することを確認するために、あなたが明示的にfpsの値を設定する必要があります

filter="fps=fps=50,scale=480:-1:flags=lanczos" 

を、それが働いていない場合は、私があまりにも定期的に「率」オプションを試してみた:

ffmpeg -y -i test.mov -i $palette -lavfi "$filter [x]; [x][1:v] paletteuse" -r 50 test.gif 

これ以外の場合は、コンソール出力が良好に表示されます(出力は50fpsになります)ので、現象は少し不思議です。


作業溶液:

あなたがする必要があるのは3つの個別のステップにプロセスを中断し、「-framerate」分離・オプションを使用することです。画像ファイルにビデオフレームを破る、第二

ffmpeg -i <input_file> -filter_complex "scale=w=480:h=-1:flags=lanczos, palettegen=stats_mode=diff" palette.png 

まずは、パレットファイルを生成させる

ffmpeg -i <input_file> -r 50 -f image2 image_%06d.png 

をそして最後に、参加1つのGIFシーケンスに画像を言った: (ここで重要な部分はimage2 demuxerのフレームレートオプションです!)

ffmpeg -framerate 50 -i img_%06d.png -i palette.png -filter_complex "[0]scale=w=400:h=-1[x];[x][1:v] paletteuse" -pix_fmt rgb24 output.gif 

編集:最後に答えを見つけよう!

使用する必要がありますimage2 demuxerの-framerateオプション!フレーム遅延

  • ImageMagicを設定することができ、GIFに画像を変換する - -

    • gifsickle直接、優れたGIF品質制御オプションをGIFへビデオを変換することができる:

      別の方法を(答えは、それに応じて編集されました)。 FPS値を設定

  • +0

    FFmpegフィルタでは、ソースコードで指定された順序で値を指定する必要はありません。 – Mulvya

    +0

    これは問題ではありません、情報のおかげで! –

    +0

    fps値を明示的に設定すると、同じ低いfps出力結果が得られます。 '' 'frame = 346 fps = 24 q = -0.0 Lsize = 6506kB time = 00:00:06.92 bitrate = 7701.8kbits/s' '' –

    関連する問題