ピクセルフォーマットを変換するformat
フィルタと、サンプルフォーマットとサンプルレートを変換するaformat
フィルタの使い方。
format
指定されたピクセルフォーマットのいずれかに変換し、複数指定したときは適切なものを選びアップサンプリングはしない。ビット深度は同じもの、RGBからYUV変換するときはサブサンプリングが一番大きなもの、ビット深度とサブサンプリングではビット深度が高いものを優先して選ぶ。
基本コマンド
ffmpeg -i input -vf "format=yuv420p|yuv422p|yuv444p|yuv420p10le" -c:a copy output
BGR(RGBではない)からYUVに変換するときはscale
フィルタのフラグにaccurate_rndをつける。
ffmpeg -i bgr_input -vf "format=yuv420p|yuv422p|yuv444p|yuv420p10le,scale=flags=accurate_rnd" -c:a copy output
ffmpegのwiki:Scaling – FFmpeg
公式ドキュメント:FFmpeg Filters Documentation : format
オプション
垂直棒|で複数指定できる。1種類しかオプションがないのでオプション名の宣言は不要。
- pix_fmts[string]
ピクセルフォーマットの指定
ピクセルフォーマットは以下のコマンドで調べられる。
ffmpeg -pix_fmts
- yuv420p = planar 8-bit YUV 4:2:0
- nv12 = semi-planar 8-bit YUV 4:2:0
- p010le = semi-planar 10-bit YUV 4:2:0
- NVENC – Difference between p010le and p016le ? : ffmpeg
- 10-bit and 16-bit YUV Video Formats – Win32 apps | Microsoft Docs
- How to output yuv420 instead of nv12 when hardware decoding h265 into raw video? : ffmpeg
- ‘-vf format=<pixel format>’ vs. ‘-pix_fmt <pixel format>’ : ffmpeg
aformat
指定したサンプルフォーマットとサンプルレートのいずれかに変換し、複数選択すると最適なものを選びアップサンプリングはしない。
サンプルレートの変換にはaresample
フィルタ、レイアウト変更にpan、channelmap
フィルタなどがある。
各チャンネルの音声を合わせたり調整する pan
音声のチャンネルレイアウトを変えるchannelmap
基本コマンド
ffmpeg -i input -af "aformat=f=u8|s16|s32:r=44100|48000:cl=stereo" -c:v copy output
公式ドキュメント:FFmpeg Filters Documentation : aformat
オプション
すべて垂直棒|で複数指定できる。
- sample_fmts, f[string]
サンプルフォーマットの指定 - sample_rates, r[string]
サンプルレートの指定 - channel_layouts, cl[string]
チャンネルレイアウトの指定。指定方法はチャンネルレイアウトの書式に準ずる。
サンプルフォーマットは以下のコマンドで調べられる。
ffmpeg -sample_fmts
pありがplanar、pなしがpacked。
name depth u8 8 s16 16 s32 32 flt 32 dbl 64 u8p 8 s16p 16 s32p 32 fltp 32 dblp 64 s64 64 s64p 64
U8, U8P :Unsigned 8bits(符号無し8ビット整数)
S16, S16P :Signed 16bits(符号付き16ビット整数)
S32, S32P :Signed 32bits(符号付き32ビット整数)
FLT, FLTP :Single-precision floating point(単精度浮動小数点 32bit)
DBL, DBLP :Double-precision floating point(倍精度浮動小数点 64bit)