moviepyで動画合成時のノイズ対策


 

けっこうたいへんでしたので、少しここにメモしておきます。

画像と音声を合わせた動画クリップを複数あわせて、一つの動画にする際に、
あわせた部分にノイズが発生してしまう。
検索してみると、海外の件やmoviepy開発者の解決策なども発見。

結論)
一つ一つの動画クリップを少し時間を短くする -0.2秒程度がよかったです。
無音.mp3を1秒用意して、そこにつける
各音声をノイズリダクションしておく

そうすると、問題解決しました。

原因の類推)
moviepyとwindowsの音声持続時間の計算が違うのが理由かと。
windowsの最小単位は、秒。
moviepyの動画書き込み時には、秒以下にアクセスしているようです。
しかし、windowsのプロパティも参照しているように見えました。
なので、持続時間を変更することで、それが原因でのノイズが消えるのかと。

うまくいなかった方法)
フェードアウトを先にしておくとよいという記載があったので、してみましたが
リフレインが発生して使えませんでした。

要は、各音声ファイルに、十分な最後の無音部分があるとよいように思えました。
ノイズリダクションし、かつ無音を追加すると、問題が解決しました。

moviepyでのクリップの合成は、合成の設計図を書いているだけで、そこでは実際は合成してないんですね。レンダリング、ここではライティングで、その設計図を元に合成しているということがわかりました。なので、エラー発生は、クリップの合成時ではなく、書き込み時(レンダリング時)で発生しやすかったです。

追記します。
以下、いろいろなパターンで行った記録です。
・1秒無音のWAVファイルを作成し、各WAVファイルの末尾に、Pythonで追加。
 その後にMoviePyで画像などと結合していく。これはノイズが入らなかった。

・1秒無音のWAVファイルを作成し、MoviePyで音声ファイルと無音ファイルを結合してから、画像と結合していく。これはノイズが入った。

・手法が同じなら、mp3からでも行ける。ただし、そもそもノイズは入りやすい。圧縮したものをいろいろ加工すると、入りやすいのかも。

・音声WAVファイルに、MoviePy上で、無音を作り、それを末尾に追加してから、画像などと係合していく。これはノイズが入った。

WEBプログム、WEBデザインなどの制作については、以下を御覧ください。

WEBプログム、WEBデザインなどの制作