リモート講義 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