ffmpeg が難しいと言われる理由の一つにフィルタの書き方がわからないというのがある。コマンドプロンプトだと改行できないので長くなるほど読みにくくなる。これを解決するのが-filter_script、-filter_complex_scriptである。

-filter_scriptは映像と音声別々に扱い、同じ種類の2番目以降のストリームを扱えない。-filter_complex_script-filter_complexと同じ書き方をする。-filter_script、-filter_complex_scriptどちらもコメントを書き込めない。さらにffplay、ffprobeでは使えない。

ffmpeg : フィルタの記述方法

基本コマンド

  • ffmpeg -i input -filter_script:v scriptv.txt output

    scriptv.txtの内容。

    yadif=0:-1:1,
    decimate,
    setpts=N/(24000/1001)/TB,
    scale=1280:-2

    ffmpeg でインターレース解除

  • ffmpeg -i input -filter_script:v scriptv.txt -filter_script:a scripta.txt output

    scripta.txtの内容。

    dynaudnorm

    ffmpeg で聞き取りやすい音量に変える dynaudnorm

  • ffmpeg -i input -filter_complex_script script.txt output

    script.txtの内容。

    [0:v:0]yadif=0:-1:1,
    decimate,
    setpts=N/(24000/1001)/TB,
    scale=1280:-2;
    [0:a:0]dynaudnorm
  • 再生確認するときは-f sdl –-f opengl –を使う。上と同じコマンドだとデコード速度で再生するので-rerealtimeフィルタで1倍速にする。
    ffmpeg -i input -filter_script:v scriptv.txt -f sdl -

    scriptv.txtの内容。

    yadif=0:-1:1,
    decimate,
    setpts=N/(24000/1001)/TB,
    scale=1280:-2,
    realtime
  • 音声も再生するなら標準出力する。-fflags nobufferは読み込みバッファをなくしすぐに再生する。decimateフィルタを併用すると音ずれするので再生確認では使わない方がよい。
    ffmpeg -i input -filter_complex_script script.txt -c:v rawvideo -c:a pcm_s16le -f nut - | ffplay -fflags nobuffer -

    How to minimize the delay in a live streaming with ffmpeg – Stack Overflow

公式ドキュメント:ffmpeg Documentation : Main options

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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