動画メタデータ分析ガイド:FFprobeで動画情報を読み解く
動画メタデータを深く理解し、FFprobeツールの使い方を習得し、コンテナ、動画ストリーム、オーディオストリームの情報を分析する方法を学びます。
続きを読む →高品質GIF作成のコアテクノロジーを習得し、画質の低下やファイルサイズの肥大化を解消
GIF(Graphics Interchange Format)は1987年に誕生した画像フォーマットです。古いフォーマットですが、現在でもインターネット上で広く使用されており、特にスタンプや動画デモなどのシーンで活躍しています。GIFフォーマットには独自の利点がありますが、明らかな技術的な制限も存在します。
GIFの256色制限により、MP4動画を直接GIFに変換すると、色の歪みや画質の低下が発生することがよくあります。高品質なGIFアニメーションを得るには、特別な最適化アルゴリズムを使用する必要があります。
FFmpegは効率的なGIF作成ソリューションである2パスアルゴリズム(Two-pass Palette Method)を提供しています。まずパレットを生成し、そのパレットを使用して変換を行うことで、GIFの画質を大幅に向上させます。
第1段階では palettegen フィルタを使用して動画全体の色分布を分析し、最適な256色パレットを生成します。このパレットは特定の動画コンテンツに合わせてカスタマイズされるため、元の動画の色情報を最大限に保持することができます。
ffmpeg -i input.mp4 -vf "palettegen" palette.png
このコマンドは palette.png ファイルを出力します。これがその動画専用に生成された256色パレット画像です。
第2段階では paletteuse フィルタを使用し、第1段階で生成したパレットと組み合わせて動画をGIFフォーマットに変換します。カスタマイズされたパレットを使用するため、変換後のGIFの色再現性は直接変換よりもはるかに高くなります。
ffmpeg -i input.mp4 -i palette.png -lavfi "paletteuse" output.gif
palettegenフィルタには、パレットの生成品質を調整するための複数のパラメータが用意されています。動画の内容に応じて適切なパラメータを選択することで、画質とファイルサイズの最適なバランスを得ることができます。
stats_mode パラメータを使用して、パレットの統計方式を選択できます:
ffmpeg -i input.mp4 -vf "palettegen=stats_mode=diff" palette.png
元の動画に透明チャンネルがある場合(WebMフォーマットなど)、透明情報を保持できます:
ffmpeg -i input.webm -vf "palettegen=reserve_transparent=1" palette.png
paletteuseフィルタは複数のディザリングアルゴリズムをサポートしており、画質をさらに向上させることができます:
ffmpeg -i input.mp4 -i palette.png -lavfi "paletteuse=dither=sierra2_4a" output.gif
よく使われるディザリングアルゴリズム:
フレームレートはGIFのファイルサイズと滑らかさに影響を与える重要な要素です。動画は通常24fpsまたは30fpsですが、GIFにはそれほど高いフレームレートは必要なく、フレームレートを下げることでファイルサイズを大幅に削減できます。
fps フィルタを使用してGIFのフレームレートを正確に制御できます:
ffmpeg -i input.mp4 -vf "fps=15, palettegen" palette.png
ffmpeg -i input.mp4 -i palette.png -lavfi "fps=15, paletteuse" output.gif
よく使われるフレームレートの選択肢:
GIFのサイズはファイルサイズに大きな影響を与えます。GIFのサイズを適切に縮小することは、ファイルサイズを削減する最も効果的な方法の1つです。
ffmpeg -i input.mp4 -vf "scale=480:-1, palettegen" palette.png
ffmpeg -i input.mp4 -i palette.png -lavfi "scale=480:-1, paletteuse" output.gif
scale フィルタでは、-1 は元のアスペクト比を保持して自動計算することを示します。幅と高さの両方を指定することもできます:
ffmpeg -i input.mp4 -vf "scale=320:240, palettegen" palette.png
フレームレートとサイズ以外にも、GIFファイルのサイズをさらに削減するための多くのテクニックがあります。
動画全体ではなく、必要な部分だけを変換します:
ffmpeg -ss 00:00:05 -t 00:00:10 -i input.mp4 -vf "palettegen" palette.png
ffmpeg -ss 00:00:05 -t 00:00:10 -i input.mp4 -i palette.png -lavfi "paletteuse" output.gif
-ss は開始時間、-t は継続時間を指定します。
色の要件が高くない場合は、パレットの色数を削減できます:
ffmpeg -i input.mp4 -vf "palettegen=max_colors=128" palette.png
以下は複数の最適化手法を組み合わせた完全な例です:
ffmpeg -ss 2 -t 8 -i input.mp4 -vf "fps=12, scale=480:-1:flags=lanczos, palettegen=stats_mode=diff" palette.png
ffmpeg -ss 2 -t 8 -i input.mp4 -i palette.png -lavfi "fps=12, scale=480:-1:flags=lanczos, paletteuse=dither=bayer" output.gif
使いやすさのために、2パスコマンドをスクリプトにまとめることができます。以下は完全な高品質GIF変換コマンドです:
ffmpeg -i input.mp4 -vf "fps=15, scale=iw*0.5:-1:flags=lanczos, palettegen=stats_mode=full" palette.png -y
ffmpeg -i input.mp4 -i palette.png -lavfi "fps=15, scale=iw*0.5:-1:flags=lanczos, paletteuse=dither=sierra2_4a" output.gif -y
LinuxまたはmacOSでは、簡単なシェルスクリプトで一括変換できます:
for file in *.mp4; do
ffmpeg -i "$file" -vf "fps=12, scale=480:-1, palettegen" palette.png -y
ffmpeg -i "$file" -i palette.png -lavfi "fps=12, scale=480:-1, paletteuse" "${file%.mp4}.gif" -y
done
rm palette.png
MP4→GIF変換は単純に見えますが、高品質で小サイズのGIFアニメーションを得るには、2パスアルゴリズムと複数の最適化テクニックを習得する必要があります。パレット、フレームレート、サイズなどのパラメータを適切に設定することで、画質とファイルサイズの最適なバランスを見つけることができます。
複雑なFFmpegコマンドを覚えたくない場合は、当社の MP4→GIFオンラインツール をご利用ください。ブラウザで動画をアップロードし、簡単なパラメータ設定で高品質なGIFアニメーションを作成できます。
その他の役立つ記事とツール
動画メタデータを深く理解し、FFprobeツールの使い方を習得し、コンテナ、動画ストリーム、オーディオストリームの情報を分析する方法を学びます。
続きを読む →4つのWebM→MP4変換方法の長所と短所を比較し、FFmpegによる効率的な変換テクニックと一括処理の方法を習得します。
続きを読む →最も実用的なFFmpegコマンドを集約。トランスコード、カット、結合、オーディオ抽出などの一般的な操作をカバーしています。
続きを読む →