オプションについて
・コーデック
-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へ+エンコード(ファイルサイズを落とす)
バッチ版
1 2 3 4 5 6 7 8 9 10 11 |
@echo off for %%i in (*.mkv) do ( set x="%%i" call :sub ) pause exit :sub set y=%x:.mkv=.mp4% ffmpeg -i %x% -b:v 4000k -c:a copy _%y% exit /b |
・カレントディレクトリのエンコード(ファイルサイズを落とす)
PowerShell版
1 2 3 |
(Get-ChildItem -File -Filter *.mp4) | ForEach-Object { &ffmpeg.exe -i $_ -r 24 -vcodec hevc_nvenc -b:v 4000k -acodec copy _$_ } |
1 2 3 |
(Get-ChildItem -File -Filter *.mp4) | ForEach-Object { &ffmpeg.exe -i $_ -r 24 -vf yadif=1:-1:0 -vcodec hevc_nvenc -b:v 4000k -maxrate 7000k -acodec libmp3lame -ab 128k -ar 44100 _$_ } |