実験動画編集のためのffmpegコマンド集
モチベーション
- 長時間の実験を記録した映像から興味のある部分だけを取り出して解析に使うとか,動画からフレームをいくつか抜き出してデータセットを作る,みたいなシチュエーションがあった
- 生データから解析用の動画を作る過程をffmpegのコマンドとして記述しておくと,大量の動画を処理できるようになったり,編集ミスによる手戻りが発生したときの対処が楽になった
- いちいちffmpegのオプションを調べるのがめんどくさいのでメモがてら記事としてまとめる
コマンド
以下,コマンド集.
出力先のファイル名が重複してるときに確認無しで上書きさせるならffmpeg -y
のようにオプションをつけるとよい.
Jupyter Notebook上からコマンドを実行するときなんかに便利.
MTS形式の動画をMP4に変換しつつ,特定の区間を切り出す.
また,MTS動画のインターレースも解除する(-deinterlace
).
ffmpeg -i video.mts -ss hh:mm:ss.xxx -to hh:mm:ss.xxx \ -vcodec libx264 -crf 18 -pix_fmt yuv420p -an -qscale 0 -deinterlace \ output.mp4
動画の各フレームを静止画として保存する.
ffmpeg -y -i video.mp4 -qscale 0 images/%05d.png # 1秒あたりの画像の枚数を`-r`オプションで指定 ffmpeg -y -i video.mp4 -qscale 0 -r 30 images/%05d.png
複数のMTS形式の動画を連結する(Windowsでもcopy /b
とかでいけたはず).
cat a.MTS b.MTS > c.MTS
バラバラになった画像をくっつけて動画にする.
# 24fpsで抜き出された画像を24fpsでくっつける ffmpeg -r 24 -i %05d.png -vcodec libx264 -pix_fmt yuv420p -r 24 output.mp4 # +音声 ffmpeg -r 24 -i %05d.png -i audio.mp3 -shortest -acodec copy -vcodec libx264 -pix_fmt yuv420p -r 24 output.mp4 # Twitterにアップロードするときは音声のビットレートをいじる ffmpeg -r 24 -i %05d.png -i audio.mp3 -shortest -acodec aac -b:a 5000k -vcodec libx264 -pix_fmt yuv420p -r 24 output.mp4
特定のタイミングのフレームを動画から抜き出す
ffmpeg -ss 00:00:08 -i video.mp4 -vframes 1 frame.png
2つの画像系列を横にくっつける
FFMPEG Merge two videos into one with side-by-side same quality output - Stack Overflow
ffmpeg -i left/%05d.png -i right/%05d.png \ -filter_complex hstack \ -vcodec libx264 -pix_fmt yuv420p -r 24 output.mp4