こんにちは。ナミレリです。今回はMacユーザー向けに強力で多機能なツールであるFFmpegを使用して、動画をGIFに変換する方法を紹介します。
基本的な変換から、高品質でカスタマイズされたGIFの作成までわかりやすく紹介したいと思います。
この記事はこんな人にオススメ
- Macで動画からGIFを作成したいと思っている方
- とにかくコマンドラインが大好きな方
- FFmpegの基本的な使い方を知りたい方
- MacBook Pro 14インチ M1Max(メモリ32GB)
- macOS Ventura 13.5
- Parallels Desktop 18 for Mac(Parallelsの公式サイト)
- ffmpeg version 6.0
- macOS Ventura 13.5
- ffmpeg version 6.0
目次
FFmpegのインストール
早速、MacにFFmpegをインストールします。FFmpegは、動画と音声の変換、編集、ストリーミングなど、多岐にわたるメディア処理が可能なオープンソースのツールです。
brewをアップデートします
brew update && brew upgrade
FFmpegをインストールします
brew install ffmpeg
バージョンを確認します
ffmpeg -version
GIFへの変換(基本編)
FFmpegのインストールが完了したら、次は動画からGIFへの基本的な変換方法を見てみましょう。ここではシンプルな変換コマンドから始め、その後で各オプションの意味について解説します。
シンプルなGIF変換
最も基本的なGIF変換のコマンドは、下のようになります。
ffmpeg -i input.mov output.gif
コマンド | 説明 |
---|---|
-i | -iで入力ファイルとして、input.movを指定しています。 また、入力ファイルの後に、出力ファイルとして output.gif を指定しています。 |
サイズとフレームレーの指定
サイズとフレームレートを指定するには、下のようになります。
ffmpeg -i input.mov -vf "fps=15,scale=960:-1" output.gif
コマンド | 説明 |
---|---|
-vf | -vfでビデオフィルタを指定しています。ビデオフィルタの内容は "fps=15,scale=960:-1"で、フレームレートを15に、幅を960ピクセルに 指定しています。 |
GIFへの変換(パレット編)
次に、パレットを生成しそれを使用して、品質の高いGIFに変換してみます。
GIFは256色までしかサポートされないため、動画から直接変換するとグラデーションなどのバンディングが生じることがあります。これを解決するためにパレットを使用します。
パレットの生成
ffmpeg -i input.mov -vf "fps=15,scale=960:-1:flags=lanczos,palettegen" palette.png
コマンド | 説明 |
---|---|
flags=lanczos,palettegen | lanczosは、画像のリサンプリングの際に使用されるサンプリング法で、 リサイズの品質を向上させます。 palettegenは、動画から最適な256色のパレットを生成します。 |
生成したパレットを使用
ffmpeg -i input.mov -i palette.png -filter_complex "fps=15,scale=960:-1:flags=lanczos [x]; [x][1:v] paletteuse" output.gif
コマンド | 説明 |
---|---|
-filter_complex | 複数のフィルターを接続してフィルターグラフを作成します。 |
[x]; [x][1:v] | ffmpegのフィルターグラフの中で、 特定のフィルター処理の出力と入力をラベル付けして 接続するための構文です。 ザックリな説明としては下のようになります。 最初のフィルターがビデオをリサイズしてフレームレートを変更し、 その結果を [x] ラベルに保持し、次のフィルター(paletteuse)は、 [x] ラベルからの出力とpalette.png からの入力([1:v] )を受け取り、これらを組み合わせて最終的なGIFを生成します。 |
- [x]: 一時的なラベルで、フィルターの出力を一時的に保持するために使用されます。このラベルは次のフィルターへの入力として再利用できます。
- [x][1:v]: この部分は、[x]ラベルからの出力とセカンド入力ビデオストリーム(
[1:v]
)を次のフィルターへの入力として結合します。
パレットありなしのGIF変換比較
下のGIFは、以前にQuickTimeで画面録画したものをGIFに変換したものです。Macのメモ.appでMacGPTを動かしている動画です。
パレットなし
パレットあり
GIFへの変換(パレット応用編)
これまで紹介した例では、パレットを生成するコマンドと生成したパレットでGIFに変換するコマンドを分けて紹介しましたが、1つにまとめることもできます。
少し複雑でパッと見て理解しにくいコマンドなので、パレット応用編として紹介します。
一度にパレットを生成しGIFに変換
ffmpeg -i input.mov -vf "fps=15,scale=960:-1:flags=lanczos,split[a][b]; [a]palettegen[c]; [b][c]paletteuse" output.gif
splitを用いた複雑なフィルター構文の解説
上の「一度にパレットを生成しGIFに変換」コマンドで使用した、split[a][b]; [a]palettegen[c]; [b][c]paletteuseというフィルターの意味について紹介します。
コマンド | 説明 |
---|---|
split[a][b] | 1. 入力ビデオストリームを2つに分割。 splitフィルターは、入力ストリームを複数に分割します。 例の場合は、元のビデオストリームを2つの[a]と[b]に分割します。 2つラベル([a]と[b])は、元のストリームと同じ内容です。 |
[a]palettegen[c] | 2. 一方のストリームから最適な色のパレットを生成。 ラベル[a]のビデオストリームからパレットを生成し、 新しいラベル[c]とします。 |
[b][c]paletteuse | 3. もう一方のストリームと生成したパレットでGIFに変換。 最後に、ラベル[b]のビデオストリームと[c]のパレットを組み合わせ、 paletteuseフィルターでGIFに変換します。 |
GIF作成のための応用テクニック
テキスト追加
テキストを追加してGIFを生成するコマンドの例です。
ffmpeg -i input.mov -vf "drawtext=text='Your Text Here':fontsize=24:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2,fps=15,scale=640:-1:flags=lanczos" text_added.gif
オーバーレイ
適当な画像をオーバーレイ表示してGIF生成するコマンドの例です。
ffmpeg -i input.mov -i overlay.png -filter_complex "[0:v][1:v] overlay=W-w-10:H-h-10:format=auto, fps=15,scale=640:-1:flags=lanczos" overlay.gif
リバースエフェクト
リバースエフェクトでGIFを生成するコマンドの例です。
ffmpeg -i input.mov -vf "reverse,fps=15,scale=640:-1:flags=lanczos" reverse.gif
再生速度(スローモーション、高速化)
生成速度を速くしたり遅くしてGIFを生成するコマンドの例です。
スローモーション(2倍遅く)
ffmpeg -i input.mov -vf "setpts=2.0*PTS,fps=15,scale=640:-1:flags=lanczos" slowmotion.gif
高速化(2倍速く)
ffmpeg -i input.mov -vf "setpts=0.5*PTS,fps=15,scale=640:-1:flags=lanczos" fast.gif
フェードイン・フェードアウト
フェードインとフェードアウト効果でGIFを生成するコマンドの例です。
ffmpeg -i input.mov -vf "fade=in:0:30,fade=out:90:30,fps=15,scale=640:-1:flags=lanczos" fade.gif
ビネット効果
ビネット効果(周辺部を暗くして中心に焦点を当てる効果)でGIFを生成するコマンドの例です。
ffmpeg -i input.mov -vf "vignette=PI/4,fps=15,scale=640:-1:flags=lanczos" vignette.gif
カラフルな効果
カラフルな効果(色相を時間に応じて変化させる)でGIFを生成するコマンドの例です。
ffmpeg -i input.mov -vf "hue=H=2*PI*t,fps=15,scale=640:-1:flags=lanczos" hue_rotate.gif
クロップとパディング
特定の部分を強調するためにクロップする、またはパディングを追加してサイズを調整することも可能です。
クロップ
ffmpeg -i input.mov -vf "crop=in_w/2:in_h/2" output_cropped.gif
パディング
ffmpeg -i input.mov -vf "pad=width=800:height=600:x=80:y=60" output_padded.gif
ffmpeg -i input.mov -vf "pad=width=in_w+80:height=in_h+80:x=0:y=0" output_padded.gif
最後に
最後まで読んでいただきありがとうございます。FFmpegで動画を綺麗なGIFに変換するはいかがでしたでしょうか。今回はGIFの変換にフォーカスしましたが、ffmpegは動画と音声の変換、編集、ストリーミングなど、多岐にわたるメディア処理が可能です。ffmpegのコマンドラインの理解は、膨大なオプションやフィルタがあり難解ですがぜひチャレンジしてみてください。
macのオススメ初期設定の紹介
macを綺麗に保つお手入れ方法を紹介
HHKBをMacで使う