ffmpeg
次のコマンドを使用してGIFを作成しました。
ffmpeg -i foo.mp4 -ss 00:00:18 -t 00:00:06 -pix_fmt rgb24 bar.gif
ただし、結果として得られbar.gif
たサイズは300 MBを超え、ムービーファイルfoo.mp4
は約15MBでした。
何が得られますか?
この質問に対する包括的な答えは難しいです:-p 一言で言えば、圧縮が各フォーマットでどのように行われるかということになります。
GIF アニメーションでは、各フレームは概念的に個別の GIF 画像です。次に、すべての GIF 画像が 1 つの大きな GIF ファイルに保存され、フレーム間に一定の遅延を加えてフレームを再生するように指示されます。フレームを最適化するには、あるフレームから次のフレームへの重複情報を削除できるプログラムを介して GIF を実行できます (GIMP の「アニメーション最適化」フィルターは、これを行うのに適した方法です: GIMP – シンプル アニメーション)。
一方、MP4 などのビデオ形式には別のアプローチがあります。フレームは似ていると想定し、2 つのフレームの違いのみを保存します。さらに、各フレームのデータ量は、圧縮を開始するときに指定したビデオ ビットレートに制限されます。非可逆圧縮は、ビデオ ファイルを目的のビットレートに下げるために実行されます。ビデオ ファイルをさらに最適化するために、ほとんどのビデオ トランスコーダには「2 パス エンコーディング」のオプションが含まれています。これはビデオを 2 回実行します。1 回目はファイルのどの部分がより複雑であるかに関する情報を収集するだけで、2 回目はビデオの複雑でない部分をより積極的に圧縮します。
ビデオ エンコーディング プロセスの一部として、GIF ファイル形式に欠けている他の多くの最適化があります。また、GIF アニメーションは 256 色のパレットに制限されるため、画像のディザリングが発生する可能性があることにも注意してください。MP4 は、ビデオ フレームに JPEG 圧縮に似たものを使用します (ただし、特にビデオを対象とした追加の最適化が行われています... 古い MJPEG 形式は、GIF アニメーションが GIF 画像のスタックであるのと同様に、基本的に JPEG 画像のスタックにすぎません)。
特定のユース ケースに関する詳細情報を提供していただければ、より良い解決策を見つけるお手伝いができるかもしれません。
私はあなたに同意します、このコマンドを使用することは最適ではありません:
avconv -i input.mp4 -pix_fmt rgb24 output.gif
この変換後、次のように Gimp を使用します。