私は少しググったが、答えを見つけることができなかった。画面上のテレビからのビデオとオーディオのノイズをシミュレートするための最初のアプローチは何ですか?つまり、テレビのアンテナを外してもテレビの電源が入っているとき(日本のホラー映画で時々見られるように)。 ffmpegやその他のテクニックを使用できますが、信号の最も単純な形式は何ですか?
ffmpeg
を使用して、ビデオとオーディオのノイズ、アーティファクト、およびエラーを作成しますgeq
(ビデオ「一般方程式」)フィルター( nullsrc
を "として空白のキャンバス」)はビデオノイズを生成する可能性があり、 aevalsrc
フィルターはホワイトノイズオーディオを生成する可能性があります。
ffmpeg -f lavfi -i nullsrc=s=1280x720 -filter_complex \
"geq=random(1)*255:128:128;aevalsrc=-2+random(0)" \
-t 5 output.mkv
これにより、白黒のビデオノイズが発生することに注意してください。
/dev/urandom
の使用geq
フィルターを使用することをお勧めしますが、/dev/urandom
を使用してビデオおよびオーディオノイズを生成することもできます(Windowsユーザーは上記のようにgeq
フィルターを使用する必要があります)。これは小さなスクリーンショットですが、もちろんビデオは静止画像ではありません。
ffmpeg -f rawvideo -video_size 1280x720 -pixel_format yuv420p -framerate 25 \
-i /dev/urandom -ar 48000 -ac 2 -f s16le -i /dev/urandom -codec:a copy \
-t 5 output.mkv
これにより、カラービデオノイズが発生します。白黒だけが必要な場合は、 hue
フィルターを追加できます。
ffmpeg -f rawvideo -video_size 1280x720 -pixel_format yuv420p -framerate 25 \
-i /dev/urandom -ar 48000 -ac 2 -f s16le -i /dev/urandom -codec:a copy \
-t 5 -vf hue=s=0 output.mkv
noise
ビットストリームフィルター の使用:元のバージョンと変更されたバージョン。
ffmpeg -i input.mp4 -codec:v huffyuv -bsf:v noise -codec:a copy noise.mkv
ドキュメント によると:
ビットストリームフィルターは、エンコードされたストリームデータを操作し、デコードを実行せずにビットストリームレベルの変更を実行します。
このビットストリームフィルターは、ノイズの量を増減する値を受け入れることができます。逆数であるため、数値が大きいほどノイズが少なくなり、1が最小の数値であるため、ノイズが最大になります。何が最適かを確認するには、実験する必要があります。
この最初の例 ストリームはオーディオをコピー し、ビデオのみをグリッチしましたが、ストリーム指定子を削除することで、オーディオとビデオの両方にフィルターを適用できます。
ffmpeg -i input.mp4 -codec:v huffyuv -c:a pcm_s16le -bsf noise=1000000 noise.mkv
または、ビデオとオーディオに別々の値を指定します。
ffmpeg -i input.mp4 -codec:v huffyuv -c:a pcm_s16le -bsf:v noise=1000000 -bsf:a noise=100 noise.mkv
これは、ビデオの場合はrawvideo
またはhuffyuv
、オーディオの場合はpcm_s16le
でうまく機能するようですが、実験することをお勧めします。さまざまなエンコーダーがノイズの破損にどのように反応するかを示すビデオについては、 ロスレスvs破損 ( notes )を参照してください。
出力noise.mkv
が破損していますが、プレーヤーで機能するように再エンコードできます。
ffmpeg -i noise.mkv -codec:v libx264 -pix_fmt yuv420p output.mkv
エンコードの詳細については、FFmpeg Wikiの H.264 および [〜#〜] aac [〜#〜] エンコードガイドを参照してください。情報。
これを行うにはいくつかの方法がありますが、この例ではノイズビットストリームフィルターが使用されます。 TSでMPEG-2ビデオに出力します。これは、目的の効果の影響を受けやすくなるためです。
ffmpeg -i input.mp4 -bsf:v noise -c:v mpeg2video -q:v 2 -c:a copy macroblock.ts
より「エンコードされた」外観が必要な場合は、-q:v
の値を〜20に増やします。さらにノイズが必要な場合は、上記のセクションに示すようにノイズ値を追加します。
出力macroblock.ts
が破損していますが、プレーヤーで機能するように再エンコードできます。
ffmpeg -i macroblock.ts -codec:v libx264 -pix_fmt yuv420p output.mp4
ノイズビットストリームフィルターの詳細については、上記のセクションを参照してください。
結果は異なる場合があるため、探しているものが得られない場合があります。以下の16進エディターの方法を参照してください。
もう1つの方法は、16進エディターを使用することです。これは、より簡単で、より制御可能で、より一貫性があることがわかります。見る:
Ffmpegに嘘をついて、色空間とクロマサブサンプリングが実際には奇妙なエラーのような効果をもたらしているのとは異なると思わせることができます。
元のバージョンと変更されたバージョン。
入力を調べます。
ffmpeg -i original.mp4
フレームレートとビデオフレームサイズに注意してください。
ffmpeg -pix_fmts
を参照し、yuv420p16le
などの使用可能な形式の1つを選択します。
Rawvideoを作成し、それを別のffmpeg
インスタンスにパイプします。
ffmpeg -loglevel error -i original.mp4 -f rawvideo - | ffmpeg -y -f rawvideo -framerate 25 -video_size 1280x720 -pixel_format yuv420p16le -i - -pix_fmt yuv420p video.mp4
-framerate
と-video_size
の値は、手順1のコンソール出力に表示された元の入力ファイル情報からコピーされました。もちろん、これらを操作してさまざまな効果を得ることができます。
必要に応じてマルチプレクサオーディオ
ffmpeg -i video.mp4 -i original.mp4 -map 0 -map 1:a -c copy output.mp4
はい、ffmpeg
を使用できます:
ffmpeg -s 640x480 -t 8 \
-f rawvideo -pix_fmt gray16be -i /dev/urandom \
-f s32le -i /dev/urandom \
output.mp4
比較のために、疑似乱数を生成する3つの異なる方法をテストしました。ご覧のとおり、速度は大きく異なります。悪い幅が大きい場合は、最初の解決策をお勧めします。ここでソースを見つけることができます: https://github.com/Zibri/Rand
ちなみに、ソースをさらに最適化して、さらに高速にすることができます。
$ ./Rand|pv -S -s 2G >/dev/null
2,00GiB 0:00:01 [1,58GiB/s] [========================================================================>] 100%
$ cat /dev/urandom|pv -S -s 2G >/dev/null
2,00GiB 0:00:11 [ 178MiB/s] [========================================================================>] 100%
$ dd if=/dev/zero bs=1k count=2M 2>/dev/null | openssl enc -rc4-40 -pass pass:weak |pv -S -s 2G >/dev/null
2,00GiB 0:00:04 [ 413MiB/s] [========================================================================>] 100%