「この動画の最初の1秒を切り出したい」「この動画とこの動画をくっつけたい」と言った、ちょっとした動画編集をコマンドラインでできるのがffmpeg。超多機能なのですが、とりあえず「今やりたいこと」に特化してメモをまとめてみました。
動画の一部をくり抜いて切り出し
例:1920×1080を中央の1080×1080に切り出す
% ffmpeg -i input.mp4 -vf crop=1080:1080:420:0 output.mp4
リサイズ
例:幅はアスペクト比を保ったまま、高さ720にする。
% ffmpeg -i input.mp4 -vf scale=-1:720 output.mp4
時間軸のトリミング
例:指定時間をトリミングして書き出す(48秒〜1分38秒部分を切り出す)
% ffmpeg -i input.mp4 -ss 00:00:48 -to 00:01:38 output.mp4
複数ファイルの結合
例:複数動画ファイルを結合する(1.mp4, 2.mp4, 3.mp4)
下記のようなテキストファイルを用意し、list.txt と命名し保存します。
file './file 1.mp4'
file './file 2.mp4'
file './file 3.mp4'
下記のコマンドで結合実行。
% ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
音声ノイズ除去
例:音声ノイズを除去して別名ファイルで保存する
nr: noise reduction, 0.01 to 97. Default value is 12 dB.
nf: noise floor, -80 to -20. Default value is -50 dB.
nt: noise type, w..ホワイトノイズ, v..ビニール, ..
om: output mode, o..ノイズ除去したデータ, n..ノイズデータ
% ffmpeg -i input.mp4 -af "afftdn=nr=12:nf=-25:nt=w:om=o" output.mp4
上記結合で音声ズレ、画像ズレが発生する場合、それぞれの素材を書き出しアプリが違うことが現にであることがあります(そういうじれいがありました)。一度、それぞれの素材を、ffmpegで何かしら処理してあげる(音声のノイズ除去とか)と解決するかもしれません(解決したことがありました)。
音声の調整
まず音声の状態を知る
mean_volume, max_volumeが分かる
% ffmpeg -i input.mp4 -vn -af volumedetect -f null -
音声のボリュームを上げる
% ffmpeg -i input.mp4 -af volume=2.8dB output.mp4
音声トラックを削除
そもそも音声トラックを削除したい場合、 ‘-an’で音声トラックを削除できます
% ffmpeg -i input.mp4 -an output.mp4
1枚の画像と音声ファイルから動画ファイルを作成
SNS投稿用など、ちょっとした動画を作るのに便利!
% ffmpeg -loop 1 -i image.png -i audio.wav -c:v libx264 -tune stillimage -c:a copy -shortest out.mp4