名古屋出身ソフトウェアエンジニアのブログ

FFmpeg で個人的によく使うコマンドまとめ

公開:
更新:

時間範囲で切り出し

ffmpeg -ss 00:01:45.200 -to 00:02:11.000 -i INPUT.mp4 -c copy OUTPUT.mp4

色補正

ffmpeg -i INPUT.MOV -vf "eq=brightness=0.05:saturation=1.5:contrast=2.5:gamma=0.9,colortemperature=temperature=6500" -c:a copy -movflags faststart OUTPUT.MOV

各フィルタの値範囲は以下の表の通りです。

下限上限デフォルト
brightness-1.01.00.0
saturation0.03.01.0
contrast-1000.01000.01.0
gamma0.110.01.0

アンシャープマスク

# 横窓サイズ:縦窓サイズ:強度
ffmpeg -i INPUT.mp4 -vf unsharp=3:3:1.5 -c:a copy -movflags faststart OUTPUT.mp4

フレーム補間

# 60 のところが出力フレームレート
ffmpeg -i INPUT.mp4 -vf "minterpolate=60:2:0:1:8:16:32:0:1:5" -c:a copy -movflags faststart OUTPUT.mp4

TS (Transport Stream) 動画の結合

ffmpeg -i INPUT.m3u8 -c copy -movflags faststart OUTPUT.mp4

このときの m3u8 ファイルは以下のようになっているべきです。

v1.ts
v2.ts
...

concat プロトコルを使う場合

ffmpeg -i "concat:00.ts|01.ts|02.ts|03.ts|04.ts|05.ts|06.ts|07.ts|08.ts|09.ts" -c copy -movflags faststart OUTPUT.mp4

mp4 を concat する場合、一旦 ts にしないと使えない場合があるので注意が必要です。

seq -w 0 10 | xargs -IXX ffmpeg -i XX.mp4 -c copy XX.ts

音声トラックの分離

ffmpeg -i INPUT.mp4 -vn -c:a copy OUTPUT.m4a

連番静止画取得

mkdir imgs
ffmpeg -i INPUT.mp4 -f image2 imgs/%08d.png

連番静止画から動画化

ffmpeg -i AUDIO.wav -framerate 60 -i imgs/%08d.png -c:v libaom-av1 -vf format=yuv444p -g 120 -crf 25 -cpu-used 5 -c:a libopus -b:a 128k OUTPUT.mkv

VP9 へエンコード

Google のチュートリアルのままを掲載しています。ポータビリティを重視して Matroska コンテナを使います。

ffmpeg -i INPUT.mp4 -c:v libvpx-vp9 -c:a libopus OUTPUT.mkv

以下は HTML 埋め込み用にもう少し詰めるバージョン。

ffmpeg -i INPUT.mp4 -c:v libvpx-vp9 -b:v 1500K -frame-parallel 0 -tile-rows 0 -tile-columns 0 -c:a libopus -b:a 96k OUTPUT.webm

実際に埋め込んでみた例です。

SSX Tricky - Aloha Ice Jam 1'32.09

H.265 へエンコード

正直 H.265 はほとんど使っていません。

ffmpeg -i INPUT.mp4 -c:a copy -c:v libx265 -preset slower -crf 18 -movflags faststart OUTPUT.mkv

AV1 へエンコード

アニメ想定のセッティングです。遅いです。

ffmpeg -i INPUT.avi -c:v libaom-av1 -frame-parallel 0 -tile-rows 0 -tile-columns 0 -g 120 -cpu-used 5 -crf 27 -c:a libopus -b:a 128k OUTPUT.mkv

スクリーンキャプチャ用 GIF をつくる

パレットを最適化して、綺麗な GIF をつくります。-r はフレームレートを指定するオプションです。

ffmpeg -i INPUT.mp4 -r 10 -filter_complex "[0:v] split [a][b];[a] palettegen [p];[b][p] paletteuse" OUTPUT.gif

ストリームをテスト(破損チェック)

エラーがあれば、STDERR に出力されます。

ffmpeg -v error -i INPUT.mp4 -f null -