よく使うffmpegのコマンドメモ | りっどのブログ

りっどのブログ

サブのブログ

テーマ:
大前提→ffmpegはビルドスクリプトでFDK-AAC込みにしたものを使ってます。これは実行ファイルとして配布されているものには、ライセンスの都合で入っていません

-analyzeduration 30M -probesize 30M
エンコードの前処理として行われる先読みの秒数指定。デフォルトでは5M(5秒)。30Mは30秒。
映像か音声のどちらかが5秒以上遅延した動画ファイルの場合、このオプションで秒数を増やさないと、映像がない動画ファイル・音声がない動画ファイルに仕上がる場合がある。

-pix_fmt yuv420p
ピクセルフォーマット指定。「 yuv420p」にしておかないとFlash Player上で上手く再生できない。

-ss 秒数
エンコードのスタート位置の指定。動画の切り出しに使う。秒数での指定の他、hh:mm:ss[.xxx]という形式での指定も可能。動画ファイルの入力である「-i input.mp4」(input.mp4は仮名)の前後どちらに置くかで処理が変わる。

前だとその地点までスキップしてから処理。
後だとその地点までデコードしながら移動してから処理(時間がかかる)。
因みに-vcodec copyをすると、位置指定の正確性が失われて位置がずれる。エンコードすれば指定がずれない。

-t 秒数
出力される動画の長さの指定。-ssと組み合わせることで、開始位置30秒から20秒間の動画、というように指定できる。

-vcodec copy
vcodecはc:vと同義。copyだと再エンコード無しで処理するが、出力時に指定したコンテナに入らないコーデックだとエラー。
mp3等の音楽ファイルでアートワーク(ジャケット画像)が埋め込まれている場合、このコマンドを使わないと出力時にアートワークが消えることが有ります。

-vcodec libx264
汎用性が高いので良く使います。スマホの動画プレイヤー系アプリでも、MP4(H.264/AAC)が大前提になっているものもあるので。細かいオプションは割愛。

-s 横x縦
横x縦サイズにリサイズする。

-sws_flags
リサイズオプションの指定。よく使うのは「lanczos+accurate_rnd」または「spline」。

-aspect
4:3にすると4:3の動画になり、16:9にすると16:9になる。
クロップした場合に明示しておかないと、解像度上は16:9なのに2:1.2等の妙なアスペクト比で再生されることがある。

-vsync
映像同期設定。
0でパススルー
1で固定フレームレート
2で可変フレームレート
-1で自動選択になる。
動画が可変フレームレートになっていて、動画編集ソフトで音ズレしてしまう場合、「-vsync 1」にしてエンコードすると固定フレームレートになるので扱いやすくなる。

-acodec libfdk_aac
acodecはc:aと同義。FDK-AACでエンコードする。「-profile:a」でプロファイル指定になり、
aac_low→LC-AAC
aac_he→HE-AACv1
aac_he_v2→HE-AACv2
aac_he_v2の場合、「-signaling explicit_sbr」または「-signaling implicit」を付け加える。
-abでビットレート指定。

-af volume=num
音量指定。1で100%(元の音量)、0.5で50%(半分の音量)になる。
-volというオプションもあるが、256で元の音量で512で2倍の音量という具合になっており、音量を20%だけ上げたいときなどに計算が面倒。

-filter_complex palettegen
-filter_complex paletteuse
256色に減色するためのフィルター。圧縮に一役買う他、GIFアニメ作成時にも役に立つ。


同一ソースで2出力
下記のようなコマンドを使うと、
1出力目は1280x720でIntel QSVによる書き出し
2出力目は640x360にリサイズしてx264でビットレート制限をつけて書き出し
と言うようなことが出来ます。現在ではニコ生の新配信があるのでほぼ関係ないですが、配信と録画で品質・解像度を変える言った使い方や、ニコ生+Youtube Liveで品質を変えて出力すると言った使い方ができます。配信用途では-f flvとか付ける必要があります。
ffmpeg.exe -rtbufsize 10MB -f dshow -video_size 1280x720 -i video="SCFF DirectShow Filter":audio="FFsplit Playback Mixer" -r 10 -s 1280x720 -pix_fmt yuv420p  -vcodec h264_qsv  -look_ahead 0 -global_quality 20 -acodec libfdk_aac -profile:a aac_low -ab 128k 1280x720.mp4 -r 10 -s 640x360 -sws_flags lanczos+accurate_rnd -pix_fmt yuv420p -crf 24.0 -maxrate 456k -bufsize 912k -vcodec libx264 -preset medium -profile:v high -acodec libfdk_aac -profile:a aac_he_v2 -signaling explicit_sbr -ar 22050 -ab 24k -ac 2 640x360.mp4

ただFFSplitとQSVは何か相性が悪いようで、出力された動画がバグりました。SCFFではその問題が出ませんでした。