イケダヤ

ITとか機械学習とか地獄のミサワとか

動画作成ドシロウトが使う、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を指定する。