リモート講義 ffmpeg - eiichiromomma/CVMLAB GitHub Wiki

(リモート講義) ffmpeg

豪華すぎるCUIな動画編集コマンド

事例いろいろ

ハードウェアエンコード(NVIDIA)

ffmpeg -encoders

と打ってみて_nvencが付いたコーデックが出てくればGPUを使える。 例えばh264_nvencがあった場合には-iで入力ファイル名を指定した後あたりに

-c:v h264_nvenc

を指定すると数倍速いエンコードができる

特定時間のみ抽出

take1.mkvの10:02から02分44秒抽出してtest-1.mkvに保存したい場合。-tは抽出する長さな点に注意

ffmpeg -ss 00:10:02 -i take1.mkv -t 00:02:44 test-1.mkv

NVIDIAのGPUを使える場合は

ffmpeg -ss 00:10:02 -i take1.mkv -c:v h264_nvenc -t 00:02:44 test-1.mkv

とする。

特定時間のカット

take1.mkvファイルの02:46から03:40を削除したい場合,面倒だが00:00から02:46までと,03:40から最後までを切り抜き,くっ付ければ良い -ss は開始時間の指定,-iは入力ファイル,-tは長さ,最後は出力ファイルを意味する。

ffmpeg -ss 00:00 -i take1.mkv -t 00:02:46 test-1.mkv
ffmpeg -ss 03:40 -i take1.mkv  test-2.mkv

で,くっつけるには

file test-1.mkv
file test-2.mkv

というテキストファイルを作り(ここではconcat.txtと名付ける)

ffmpeg -safe 0 -f concat -i concat.txt -c:v copy -c:a copy -map 0:v -map 0:a test.mkv

のようにconcat命令でくっつけたファイルをtest.mkvに保存する。 なので,間違えたりしたときも,そこで録画を止めずに撮り流して後でカットすれば良い。

mp4に変換

test.mkvをout.mp4に変換する。

ffmpeg -i test.mkv out.mp4

で変換できる。(concatで出力をmp4にすると音声が消えたので分けて使っている)

圧縮

640x480の講義動画だと 200kbpsくらいで十分なのでvbrを-vbで指定する

ffmpeg -i test.mkv -vb 200k out.mp4

GPUを使いたいときは

ffmpeg -i test.mkv -c:v h264_nvenc -vb 200k out.mp4

音量調整

take1.mkvの音量を1.5倍してtake1-1.mkvに保存する

ffmpeg -i take1.mkv -filter:a "volume=1.5" take1-1.mkv

より確実にやるにはvolumedetectを使う。

ffmpeg -i take1.mkv -vn -af volumedetect -f null -

として出てくるmax_volumeの値をチェックする。例えば-12.5dBだったら0dBになるよう指定する。

ffmpeg -i take1.mkv -af volume=12.5dB take1-1.mkv

とする。他の処理を並べてもよい。

画像のスケール変換

take1.mp4のアスペクト比は維持して高さを480pixelにしてtake1_480p.mp4に保存する。

ffmpeg -i take1.mp4 -vf scale=-1:480 take1_480p.mp4

字幕の追加(埋め込み)

下のような.srtファイルを作る。ここではiPhoneCP01.srtというファイル名。

srtファイルは雰囲気で作る。

1
00:00:00,000 --> 00:00:09,000
Koderで左下の+を押し,New Fileを選択してhelloworld.cと入力

2
00:00:09,000 --> 00:01:15,000
右上のCreateを押して,表示されたファイルを選択し,プログラムを書く

3
00:01:15,000 --> 00:01:22,000
キーボードを消して左上の←を押し,左上の家アイコンを押す

4
00:01:22,000 --> 00:01:24,000
ファイルを左にスワイプしてManageを選ぶ

5
00:01:24,000 --> 00:01:37,000
Shareを選んで"Save to Files"を選択し保存したい場所を選び右上の保存

6
00:01:37,000 --> 00:01:43,000
※ideoneで使うのでhelloworld.cを開いてソースを全文コピーしておく

まずass形式に変換

ffmpeg -i iPhoneCP01.srt iPhoneCP01.ass

tmp.mp4にiPhoneCP01.assを字幕として書き込んで,iPhoneCP01.mp4に保存する例

ffmpeg -i tmp.mp4 -vf ass=iPhoneCP01.ass iPhoneCP01.mp4

ffplayで再生時間の確認

ffplayはffmpegに送る命令を視覚的に確認できるツールでffmpegを入れると通常一緒に入る。

ffmpegで編集する際にmsオーダーでカットしたいときに使う方法。ここが元ネタ。映像フィルタのdrawtextで文字表示が可能なので,そこに流し込む。

ffplay -vf "drawtext=text='%{pts\:hms}':box=1:x=(w-tw)/2:y=h-(2*lh)" input.mp4