動画作成ドシロウトが使う、FFmpegの引数まとめ
数値解析の業務をやっていると、動画で結果を見せてくれ、なんてことがよくある。
ところが、商用のCAEソフトでさえ、動画の出力オプションがしょぼかったり、動作が非常に不安定だったりする。
そこで、画像を連番出力して、FFmpegを使って高品質・低容量なイケてる動画を作るときのメモ。
動画作成はドシロウトなので、ドシロウトが使う、最低限の引数をまとめました。
参考: http://tech.ckme.co.jp/ffmpeg.shtml
FFmpegダウンロード: https://www.ffmpeg.org/download.html
細かいコトはおいておいて、よく使うコマンドはコレ。
ffmpeg -i img%05d.png -r 20 -crf 23 -vcodec libx264 out.mp4
複数の静止画からの動画作成
業務ではコレをよく使う。
連番ファイルのフォーマットを引数に指定すればおk。
例えば、img00001.png, img00002.png, img00003.png...
なんて連番ファイルがある場合、
ffmpeg -i img%05d.png out.mp4
Windowsの場合は、%を重ねて、以下でおk。
ffmpeg -i img%%05d.png out.mp4
-sameq
でロスレスになるらしい。未確認。
フレームレートの指定 -r
10fpsで変換する例
ffmpeg -i in.avi -r 10 out.mp4
H.264でエンコードする
動画の圧縮形式のデファクト・スタンダードがH.264。らしいよ。 出力ファイル名でmp4を指定すればデフォルトでH.264で圧縮されるが、H.263になる環境もあるというウワサ。 一応↓で明示的に指定可能。
ffmpeg -i in.avi -vcodec libx264 out.mp4
品質の指定について
デフォルトでは、品質固定。なので品質固定で良いか。
以下、一応メモ。
* 品質は-crfで0-51をとり、デフォルトは23。
* 通常使われる範囲としては18から28の間
* ビットレートは、crf値が6減るごとに、およそ倍になる。
* 18以下でほぼ見た目上の劣化がなくなる
* 0でロスレス
- ロスレスエンコードには、-crf 0
よりも-qp 0
が推奨
- ロスレスエンコードを行うと、再生できないプレーヤーもあり
H.265でエンコードする
H.264の半分のビットレートで同等の画質を実現できるらしい。 が、再生できるプレイヤーが少ないらしいので注意。
ffmpeg -i in.avi -vcodec hevc out.mp4
知ってると便利な引数
動画の情報を調べる
-i
を指定するだけで、動画の圧縮形式などを調べることができる。
コンテナだけを変えたい場合なんかには事前に知っておく必要がある。
ffmpeg -i in.mp4
コンテナを変える
コーデックはそのままに、動画のコンテナのみを変えたい場合。 変換時間は早く、非常に便利。 ただし、出力のコンテナが、元動画の圧縮形式に対応している必要がある。
ffmpeg -i in.flv -vcodec copy -acodec copy out.mp4
指定時間を切り取る
開始時間00:00:10から、50秒間切り取る。
ffmpeg -i in.mp4 -ss 00:00:10 -t 00:00:50 out.mp4
動画を画像にする
未確認だが、↓でいけるっぽい。
ffmpeg -i in.mp4 -f image2 -vcodec mjpeg -qscale 1 -qmin 1 -qmax 1 img%05d.jpg
wmvに変換する
xpとかオワコンOSで、再生できない等と文句を言われた場合。極稀にいる。
2パスエンコード?とかで、↓な感じに実行すればおk。
wmvだとしょぼいので、-b
でビットレートを指定してやる必要があるかもしれない。
ffmpeg -i in.mp4 -b 3000k -vcodec wmv2 -pass 1 -an out.wmv ffmpeg -i in.mp4 -b 3000k -vcodec wmv2 -pass 2 out.wmv
動画から音声を抜き出す
出力形式を指定すればおk。
ffmpeg -i in.flv out.mp3
無劣化でそのまま取り出したい場合、-acodec copy
を指定する。