FFmpeg メモ

オプションについて

・コーデック

-c(-codec)
は-vcodecと-acodecをまとめてという意味で、
それぞれ指定する場合、
-vcode -acode
または、
-c:v -c:a
と指定する。

ストリームについて

ffmpeg -i xxx
でファイルを読み込むとストリームが表示される。

Stream #0:0
0番目(読み込まれた順)ファイルのストリーム0番という意味。

0:v
は0番目ファイルの映像全て、
0:a
は0番目ファイルの音声全てと書くこともできる。

インターレース

インターレース方式(NTSC)と、プログレッシブ方式
(720pなどのpはプログレッシブの略)
インターレースは走査線が一本おきになる。

・NTSC
30フレーム/525走査線
アメリカ、日本など

・PAL
25フレーム/625走査線
欧州、中国など

・1度の走査の画をフィールドと呼び1フレーム2フィールド
60i:インターレースで60フィールド(30フレーム)/秒
24p:プログレッシブで24フレーム/秒

***

プログレッシブ動画でも縞ノイズは消える。

-vf yadif=1:-1:0
のように指定する。

・モード

0:フレームごとに1フレーム(既定)
1:フィールドごとに1フレーム
2:0 + 空間インターレースチェックをスキップ
3:1 + 空間インターレースチェックをスキップ

・フィールドタイプ
0:上のフィールドが最初
1:下のフィールドが最初
-1:自動検出(既定)

・フレーム指定
0:すべてのフレーム(既定)
1:インターレースとしてマークされたフレームのみ

サンプル

・分割されたVOBファイルを結合する(FFmpegとは関係ない)
copy /b VTS_01_1.VOB + VTS_01_2.VOB o.vob

・VOBファイルをMP4に変換
インターレース解除、ビットレート指定
ffmpeg -i o.vob -b:v 2000k -c:v libx264 -c:a libmp3lame -b:a 256k -ar 44100 -vf yadif=1:-1:0 o.mp4

品質そこそこなら、ビットレート2000k指定で問題ないが、
もしビットレート指定、ビットレート最大値を指定する場合、
ffmpeg -i o.vob -b:v 4000k  -maxrate 8000k -c:v libx264 -c:a libmp3lame -b:a 256k -ar 44100 -vf yadif=1:-1:0 o.mp4

・DVDに書き込む用の動画を作成
ffmpeg -i i.mp4 -target ntsc-dvd o.mpg

・スケール変更(アスペクト比維持)
ffmpeg -i i.mp4 -vf scale=1280:-1 o.mp4
ffmpeg -i i.mp4 -vf scale=720:-1 o.mp4

・部分的に切り出す
ffmpeg -ss スタート ポジション -i i.mp4 -t 切り出す長さ o.mp4

開始

終了

ffmpeg -ss 0 -i i.mp4 -t 0 -c copy o.mp4

ss無、t有:最初から指定時間まで。
ss有、t無:指定時間から最後まで。
単位を省略すると秒となり、hh:mm:ssでも指定できる。

・ファイルサイズを落とす
ffmpeg -i i.mp4 -vcodec libx264 -b:v 1000k -acodec libmp3lame -ab 192k o.mp4

フレームレート、オーディオサンプルレートまで指定
ffmpeg -i i.mp4 -r 24 -vcodec h264_nvenc -b:v 3500k -acodec libmp3lame -ab 128 -ar 44100 o.mp4
※h264_nvenc(GeForce)

・mp3に変換
ffmpeg -i i.mp4 -acodec libmp3lame -ab 256k o.mp3

・mp4の連結(ワンライナー)

カレントディレクトリにある指定した拡張子(*.mp4の部分)のファイルの一覧をi.txtに書き込み、そのファイルを元に結合、処理後i.txtを削除している。

(for %f in (*.mp4) do echo file %f >> i.txt) && ffmpeg -f concat -i i.txt -c:v libx264 o.mp4 && del i.txt

・結合
ffmpeg -i m.mp4 -i a.mp4 -c copy -map 0:v -map 1:a o.mp4
ストリーム指定が不要の場合、
ffmpeg -i i.mp4 -i i.mp3 -c copy o.mp4
でも可能。

・静止画とmp3の結合
ffmpeg -f image2 -loop 1 -r 24 -i i.jpg -i i.mp3 -vcodec libx264 -shortest o.mp4

・指定秒数でサムネイル
ffmpeg -ss 10 -i i.mp4 -vframes 1 -f image2 o.jpg

・m3u8を保存
ffmpeg -protocol_whitelist “file,http,https,tcp,tls” -i i.m3u8 -movflags faststart -c copy -bsf:a aac_adtstoasc o.mp4

・指定領域の切抜き
ffmpeg -i i.mp4 -vf crop=W:H:L:T o.mp4

・指定領域の塗りつぶし
ffmpeg -i i.mp4 -vf fillborders=left=0:right=0:top=130:bottom=0:mode=fixed:color=black o.mp4

・ノーマライズ①
ffmpeg -i i.mp4 -vn -af volumedetect -f null null
で最大dB(max_volume)を確認し、
ffmpeg -i i.mp4 -af volume=6dB -c:v copy -c:a aac o.mp4
volumeでマイナス分プラスする。

・ノーマライズ②
ffmpeg -i i.mp4 -af dynaudnorm -c:v copy o.mp4
ゲインのかかり具合を自動で調整してくれる。

・ファイル結合時の音ズレ修正

音ズレをチェックする場合VLCが便利。(ツール>トラックの同期化)
ここでは-0.8s(音を映像に対して先行させる)で合うことを確認。
ffmpeg -i i.mp4 -itsoffset -0.8 -i i.mp3 -c copy o.mp4

・一つファイル内で音ズレ修正
ffmpeg -i i.flv -itsoffset -0.5 -i i.flv -c copy -map 0:v -map 1:a o.mp4

・コントラスト、彩度、明度
ffmpeg -y -i i.mkv -vf “eq=contrast=1:brightness=0:saturation=1” o.mp4
https://ffmpeg.org/ffmpeg-filters.html#eq

・カレントディレクトリのmkvをmp4へ+エンコード(ファイルサイズを落とす)
バッチ版

・カレントディレクトリのエンコード(ファイルサイズを落とす)
PowerShell版