FFMPEGを使用して、動画ファイルをGIFファイルに変換する方法を紹介します。
デフォルトのFFMPEG GIFエンコーダーでは色が変なることがありましたので、パレットを使用して最適化するコマンドを記載します。
また、最後に簡単に変換できるバッチファイルも記載いたします。
FFMPEG 動画 GIF 変換コマンド
下記コマンドで動画ファイルからGIFファイルへの変換が可能です。
ffmpeg -i input.mp4 -filter_complex "[0:v] fps=10,scale=640:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" output.gif
また、以下のようにパレットを使用しない方法でもGIFファイルは作成可能ですが、
FFMPEGのネイティブのGIFエンコーダーではおかしな色となってしまいますのでおすすめできません。
ffmpeg -i input.mov -r 10 -vf scale=640:-1 -f gif output.gif
オプションの解説
fps
fps=10
上記のオプションはGIFファイルのFPSを指定しています。
scale
scale=640:-1
上記のオプションはGIFファイルの解像度を指定しています。
横幅を640に固定し、縦幅をアスペクト比を維持した値に自動計算します。
指定した秒数で切り取りたい場合
「-ss」「-t」オプションを指定することで、指定秒数で切り取ることが可能です。
// 2秒地点から5秒間のGIFファイルを作成 ffmpeg -i -ss 2 -t 7 input.mp4 -filter_complex "[0:v] fps=10,scale=640:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" output.gif
動画 GIF変換 バッチファイル
毎回、上記のコマンドを入力するのは手間かと思いますので、バッチファイルを作成してみました。
バッチファイル(mov2gif.bat)
@echo off SETLOCAL ENABLEDELAYEDEXPANSION rem FFMPEGのパス set FFMPEG_PATH=C:\ffmpeg.exe rem --------------------------------------------------- if not "%~1"=="" ( rem 対話入力 set WIDTH=640 set /p WIDTH="WIDTHを入力してください。 (初期値=640):" echo WIDTH: !WIDTH! set FPS=10 set /p FPS="FPSを入力してください。 (初期値=10):" echo FPS: !FPS! set TRIM=n set /p TRIM="開始時刻・終了時刻を設定しますか? (y or n) (初期値=n):" echo TRIM: !TRIM! if "!TRIM!"=="y" ( set START=0 set /p START="開始時刻[秒]を入力してください。 (初期値=0):" echo START: !START! set END=1 set /p END="終了時刻[秒]を入力してください。 (初期値=1):" echo END: !END! set /a DURATION=!END!-!START! set TIME_OPTION=-ss !START! -t !DURATION! ) rem FFMPEG 実行 "%FFMPEG_PATH%" -y -i "%~f1" !TIME_OPTION! -filter_complex "[0:v] fps=!FPS!,scale=!WIDTH!:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" "%~d1\%~p1%~n1.gif" ) else ( echo [ERROR] 第一引数に変換する動画ファイルのパスを指定してください。 ) pause
使い方
「mov2gif.bat」バッチファイルに動画ファイルをドラッグ&ドロップします。
DOSウィンドウが開き、GIFファイル作成の設定を対話形式で入力します。
(未入力でEnterキーを押すことで初期値の値を設定します。)
また、このバッチファイルを実行するにはFFMPEGが必要です。
「mov2gif.bat」の5行目にffmpeg.exeがあるファイルパスを設定してください。
参考:
https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/
コメント