任意の場所の映像や音声をコンテナを損傷することなくドロップさせたり、パケットにノイズをのせたりできる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
映像だけドロップさせて音声はそのままなら-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:デコード開始時のパケットペイロードから派生した疑似乱数整数