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

コメントを残す

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

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