見出し画像

出力した動画に音声ノイズが入るのを避ける VOICEROID実況にYMM4を使いたい人のメモ【ゆっくりMovieMaker4】※不具合修正済

※MediaFoundation出力でも音声ノイズが入らないように修正されました。以下の記事は修正前のものとなります。
FFmpeg出力では細かくエンコード設定をできるメリットはありますが、普通に使う分ではデフォルトのMediaFoundation出力で充分だと思います。

---------------------------------------------------------------------------------

YMM4を使っていて1年経つのですけど、出力した動画に未だに悩まされる問題があります。

それはこちらの問題。

出力した動画の音声で一瞬だけ「ヂッ」って音が入るんですよね。1つの動画でほんの1、2回だけ。発生する場所は何回出力しても同じなようですが、出力してからしか分からないので対処が難しい問題です。

制作者様も挙げているとおり、現在でも原因調査中のまま修正はされていません。

ノイズは一瞬だけとはいえ、けっこう耳につんざく音が鳴ってしまうので無くせるものなら無くしたいですよね。今回はこの問題の対処法を考えていきます。

最低限の対処方法

動画の出力形式をMediaFoundationからFFmpeg方式に変更します。

1.ファイル(F)→動画出力(V)を選択する

2.MediaFoundation出力欄をクリックし、FFmpeg出力を選択する

上記の出力方式に切り替えることでノイズが発生することは無くなります。

……ではなぜ、これがデフォルト設定ではないのでしょうか?

デフォルトの状態ではエンコード時の設定がBaselineProfileに固定される等の制限があります。

YMM4で実装されているFFmpeg方式は初期設定のMediaFoundation方式に比べていくつか制限があります。画面を見てみましょう。左がMediaFoundation、右がFFmpegです。

画像1

目に見えて設定内容が減ってますね。

FFmpeg方式だと、BaselineProfileに固定され、ハードウェアエンコード、CABACといったファイルサイズの圧縮に有利な設定が使えなくなります。これらの符号化ツールはMainProfile以降で採用されている方式だからです。

簡単に考えると、BaselineProfile<MainProfile<HighProfileの順に高圧縮化、高画質化に有利な設定が行えるといえるでしょう。
(もちろん出力される動画にも依りますし、私も付け焼き刃の知識しかないです)

では、ある程度高画質にしつつ、音声ノイズをなくす方式をここから考えてみたいと思います。

必要なもの

制作者様のサイトでは以下のように記載されています。

MainProfile等でエンコードしたい場合、YMM4配置フォルダ\user\resources\ffmpeg内のdllを自力でビルドした物に差し替える必要があります。
なお、FFmpegのビルド方法に関してはサポート致しかねます。

動画出力に使用される、FFmpegのdllファイルを自力でビルドした物に差し替える必要があります。

以降の作業は多大な労力がかかるため、参考サイトのご紹介と注意書き程度に留めています。
次の段落でこのdllファイルの配布URL(※無保証)をご案内しています。

FFmpegのdllファイルをビルドする

ビルド、とはソフトウェア開発用語でプログラム言語が書かれたファイル群をまとめてパッケージ化することをいいます。自力でビルドする場合は以下のような方針になります。

①は先ほどの設定でご紹介した通りです。

②③のビルドまでの流れについては以下のサイトを参考に設定します。

ただし、FFmpegのビルド中エラーが表示されて最後まで進まない場合があります。この問題は以下のページのコメント欄にて管理人様が対処方法を記載しています。

ソースコードを展開した「libavformat」にある「os_support.c」の194~195行目を下記のようにコメントアウトするとmakeできましたよ。
/* case EAI_MEMORY:
return "Memory allocation failure"; */
なおこの部分はネットワーク系エラーの返り値の文字列変換をやっているところの様で、上記改変は動画を扱うffmpegの本業には影響しないとは思います。

※ C言語は「/*」「*/」の二つの記号で括った間がコメント扱いとなり処理に影響しなくなります。

上記の対処を行い、FFmpegをビルドするとdll(でもファイル名はffmpeg.exe)を含めたビルドファイル(バイナリファイル一式)が出力されます。

ビルド済みのFFmpegのdllファイル配布サイトの紹介(※無保証)

先ほどのFFmpegのビルドの解説記事を投稿された方が無保証という注意付きで配布して下さっています。

ページ内の「Code」→「Download ZIP」からファイルをダウンロードし、
\ffmpeg-master\ffmpeg-master\ffmpeg\Windows\x86_64\bin\
ffmpeg.exe
をコピーして、YMM4配置フォルダ\user\resources\ffmpeg\内に保存して下さい。

動作確認した所、こちらのファイルでも問題なく動画は出力されました。

動画関係については権利関係が非常にややこしいため、個人使用に留め二次配布などは避けておきましょう。

ビルドしたdllファイルをYMM4で使用する

YMM4配置フォルダ\user\resources\ffmpeg 内にビルドした、またはダウンロードしてきたdllを入れます。なお、dllという名称ですがファイル名は「ffmpeg.exe」となってますのでご注意下さい(騙された人)。

フォルダがない場合は一度FFmpeg形式で動画出力すると必要ファイルがダウンロードされます。
該当フォルダ内のファイル構成は以下のようになります。

画像2

これでFFmpegのコマンドで出力方式を切り替えられるようになります。

FFmpegのエンコードオプション

そのまま動画を出力するとFFmpegのデフォルト設定で動画が出力されてしまいます。MediaFoundation方式の出力のようにオプション設定を加えて出力するにはテキストボックスにコマンドを打ち込む必要があります。

画像3

このコマンドは各用語の意味を知らないと分からないことも多いため、参考サイトの設定内容を引用してきましょう。動画の解像度とFPS数によって最大ビットレート数が変わりますので注意して下さい。

また、映像ビットレートの指定方法も「自動」から「手動」に変更し、以下の値を入力してください。
(動画時間の長さによっては出力時にエラーが発生しました)

maxrate(最大ビットレート)の設定
720p/24~30FPS…5 Mbps
720p/48~60FPS…7.5 Mbps
1080p/24~30FPS…8 Mbps
1080p/48~60FPS…12 Mbps
※上記の解像度以外、およびHDR動画の設定は後述のリンク先を参照

コピペ用の設定例

[SDR動画720p/24~30FPSの設定]

-movflags +faststart -c:v libx264 -profile:v high -level:v 4.0 -b_strategy 2 -bf 2 -flags cgop -coder ac -pix_fmt yuv420p -crf 23 -maxrate 5M -bufsize 10M -c:a aac -ac 2

[SDR動画1080p/24~30FPS]

-movflags +faststart -c:v libx264 -profile:v high -level:v 4.0 -b_strategy 2 -bf 2 -flags cgop -coder ac -pix_fmt yuv420p -crf 23 -maxrate 8M -bufsize 16M -c:a aac -ac 2 -ar 48000 -b:a 384k

コマンドの設定内容について詳しく知りたい方は以下の記事をご参照下さい。

コマンドを設定して動画を出力し、エラーにならなければ正常に設定が完了しています。お疲れ様でした!

今回は以上となります。音声ノイズに悩まされていた方の一助となれば幸いです。

なお、この記事に掲載している内容はあくまで私個人で調査したものであるため、最適な設定と言えない場合があります。あらかじめご了承の上お使いください。

それでは、最後までご覧いただきありがとうございました!

この記事が気に入ったらサポートをしてみませんか?