FFmpegで映像のエンコード時に拡大/縮小を行う際のオプション指定について(バージョン0.6.1時点)
拡大/縮小時のサイズ指定
FFmpegで映像のエンコードを行う際、サイズを拡大もしくは縮小したい場合には-sオプションを用い、後ろにピクセル単位で「[幅]x[高さ]」を指定する。
$ ffmpeg -i [入力ファイル] -s [幅]x[高さ] (オプション...) [出力ファイル]
拡大/縮小の補間方式などの指定
拡大/縮小の処理はFFmpeg付属のlibswscaleというライブラリを用いて行われ、幾つかのパラメータ指定によりその挙動を調整することができる。ffmpegコマンドからは-sws_flags [フラグ文字列]の形で指定することになる。
例えば、拡大/縮小の補間方式はlibswscaleが提供する幾つかの方式の中から選択可能で、bilinear,lanczos,splineなどの値が指定できる。lanczosやsplineは高品質だがファイルサイズはbilinearやbicubicより大きくなる。
この他、libswscaleが行う処理についての幾つかのフラグが用意されており、例えば「print_info」を指定するとエンコード処理中に
[swscaler @ 0x2cf24a0]Bicubic spline scaler, from yuv420p to yuv420p using MMX2
のような形の情報を表示するようになる(上は「spline」指定の場合)。
フラグ文字列の一覧はヘルプから確認できるが、バージョン0.6.1の時点ではmanページには書かれていない。
$ ffmpeg --help (中略) SWScaler AVOptions: -sws_flags <flags> E.V.. scaler/cpu flags fast_bilinear E.V.. fast bilinear bilinear E.V.. bilinear bicubic E.V.. bicubic experimental E.V.. experimental neighbor E.V.. nearest neighbor area E.V.. averaging area bicublin E.V.. luma bicubic, chroma bilinear gauss E.V.. gaussian sinc E.V.. sinc lanczos E.V.. lanczos spline E.V.. natural bicubic spline print_info E.V.. print info accurate_rnd E.V.. accurate rounding mmx E.V.. MMX SIMD acceleration mmx2 E.V.. MMX2 SIMD acceleration 3dnow E.V.. 3DNOW SIMD acceleration altivec E.V.. AltiVec SIMD acceleration bfin E.V.. Blackfin SIMD acceleration full_chroma_int E.V.. full chroma interpolation full_chroma_inp E.V.. full chroma input bitexact E.V..
2つ以上のフラグを組み合わせる場合は「+」で区切る(例:「print_info+spline」)。
拡大/縮小の補間方式の既定値
-sws_flagsオプションなしでエンコードした場合に適用される拡大/縮小の補間方式は
[引用]ファイル名: ffmpeg-0.6.1/ffmpeg.c より
static unsigned int sws_flags = SWS_BICUBIC;
bicubic方式のようで、実際、同じ元ファイルを-sws_flagsオプションなしでエンコードしたものと-sws_flags bicubicオプションを付けてエンコードしたものはMD5などのダイジェストが一致した。
下のMD5は手元でテストしたファイルのものとなる。
$ ffmpeg -i [入力ファイル] -s [幅]x[高さ] (中略) noflags.avi $ ffmpeg -i [入力ファイル] -s [幅]x[高さ] -sws_flags bicubic (中略) bicubic.avi $ md5sum noflags.avi bicubic.avi b1a2d0107b9d2e8c5044f64c1496ae12 noflags.avi b1a2d0107b9d2e8c5044f64c1496ae12 bicubic.avi
関連記事:
使用したバージョン:
- FFmpeg 0.6.1