ピクセルフォーマットを変換する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

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

ffmpeg 音声の内部形式の話 – 脳内メモ++

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)

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)