任意の場所の映像や音声をコンテナを損傷することなくドロップさせたり、パケットにノイズをのせたりできるnoiseビットストリームフィルタの使い方。

基本コマンド

音声をドロップする。結果的に音声トラックがなくなる。
ffmpeg -i input -bsf:a noise=drop=1 -c copy output

映像のパケットを加工してグリッチのようなノイズをのせる。
ffmpeg -i input -bsf:v noise=amount=10 -c copy output

開始0秒から30秒までの映像と音声をドロップする。
ffmpeg -i input -bsf noise=drop="between(tb*pts\,0\,30)" -c copy output

python – How can I cut/drop specific undecoded h.264 (Key-)frames from a video using FFmpeg? – Stack Overflow

映像だけドロップさせて音声はそのままなら-bsf:vを指定する。
ffmpeg -i input -bsf:v noise=drop="between(tb*pts\,0\,30)" -c copy output

setptsフィルタと同じように0リセットする。
ffmpeg -i input -bsf noise=drop="between(tb*(pts-startpts)\,0\,30)" -c copy output

公式ドキュメント:FFmpeg Bitstream Filters Documentation : noise

オプション

  • amount[string]
    パケットを加工する。0だと加工しない。0未満の値を指定すると頻度が変動し、0より大きな値は程度が変動する。dropを指定してない時は-1を指定する。評価式が使える
    既定値:0
  • drop[string]
    正の値でドロップし、負の値でドロップする頻度が変動する。0だとドロップしない。評価式が使える。使えるのは一部のコーデックでH.264, H.265, MJPEG, MPEG2, VP9, AV1。Stack Overflow
    既定値:0
  • dropamount[int]
    正の値を受け付けてその値にマイナスを掛けた結果がdropと同じ値になる。評価式は使えない
    既定値:0
    範囲:0からINT_MAXまで

amount、dropに使える評価式

これも使える。ffmpeg で使える評価式

  • n:0から数えるパケット数。1毎増える
  • tb:パケットタイムスタンプで使われるタイムベース
  • pts:パケットのPTS
  • dts:パケットのDTS(デコードしたタイムスタンプ)
  • nopts:Constant representing AV_NOPTS_VALUE
  • startpts:最初のAV_NOPTS_VALUEではないPTS。固定値
  • startdts:最初のAV_NOPTS_VALUEではないDTS。固定値
  • duration, d:パケットごとの尺の長さ
  • pos:デコード時点での累積ファイルサイズ
  • size:パケットごとのバイトサイズ
  • key:パケットのキーフレームがマークされているかどうか
  • state:デコード開始時のパケットペイロードから派生した疑似乱数整数

コメントを残す

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

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