謎の黒帯(余白)が Windows10 標準機能で録画したらでてきたのでなんとかした話

お役立ち情報,プログラムffmpeg,Windows

先日、ある画面を Windows10 の標準搭載機能であるゲームバーを利用して録画したら謎の余白(黒帯)ができて困ったので、その対応方法についてメモします。

結論からいうと「システム設定の画面拡大倍率が 100% でない状態で撮ったらおかしくなった」ので「ffmpeg を利用して適当なサイズに変換した」話です。

Windows10 の録画機能とは

Window10 では画面の録画機能がデフォルトではいっています。 ショートカットキーとして “Win キー + G" でゲームバーを起動することで利用できます。

ゲームバーウインドウの一部

ゲームバーを起動するといくつかウインドウが表示されますが、この「キャプチャウインドウ」の録画ボタン(左から 2 番目の○ボタン)をクリックすると録画がはじまります。アクティブなウインドウの絵や音声しか録画されないあたりも便利です。

またこれは名前のとおり、ゲームをキャプチャするための機能のようで、全画面表示でも通常ウインドウでも録画できます。マイクをオンにすると実況しながら録画することもできます。

またショートカットキーとして “Win キー + Alt + R" を使うとゲームバーを起動せず、直接録画を開始することもできます。

動画に余白ができるとは

今回、全画面表示のアプリケーションを録画しました。録画し終わった動画を確認すると、以下のように謎の黒帯ができていました。

VLC プレイヤーで再生

画面部分は加工していますが、黒帯部分はそのままです。動画の右下に空間ができています。しかもこれは再生ソフトの問題ではありません。このスクリーンショットは VLC プレイヤーを使用していますが、Windows Media Player で開いても Adobe Premiere Pro で開いても、この謎の空間はできています。

さらに解像度も何かおかしい

動画の情報を見るために Windows エクスプローラでプロパティを確認してみました。

動画の「フレーム幅」「フレーム高さ」を確認すると 1920×1080 の動画になっていることがわかります。しかしこれはおかしいのです。なぜならば再生テストしてみた動画は明らかに 1920×1080 よりも大きいためです。

実際に再生している動画のスクリーンショットを撮り、ペイントソフト(GIMP)でピクセル数を確認してみました。すると以下に示したように、動画部分は 1920×1080 となっていますが、黒帯含めた全体は 2400×1350 となっていました。

この大きさは ffmpeg -i を使って調べても同じでした。どうやら動画ファイルのメタ情報と動画の実態が食い違ってしまっているようです。

黒帯が入った原因

色々調べると参考になる情報が出てきました。2021/06/07 のまだ出たばっかりの記事のようです。助かりました。

要は Windows のシステム設定にある「ディスプレイ」のうち、「拡大縮小とレイアウト」の設定で倍率を変更しているのが原因のようです。実際のところ、私の設定では 125% になっていました。

アプリによっては問題なく録画されるのだが、一部のソフトではなぜか実際よりも大きな解像度でキャプチャされるようなのだ。

ただ、操作パネルの中には録画中の解像度に関する設定がないし、ビデオドライバなどの問題でもない。

(中略)

この中の「ディスプレイ」の項目にある「拡大縮小とレイアウト」が100%以外で設定されているのだ。

Windowsの標準機能で画面録画したときに右下に余白が出てしまうときの解決法プチメタ3.0

すなわち、画面録画をする際には設定を変更し、拡大率の変更を 100% にしておけばよいということです。

確かに確認すると黒帯付きの動画サイズ 2400×1350 はそれぞれ 1920×1080 を 1.25 倍(125%)した大きさであり、辻褄が合います。

すでに録画した動画を処理しよう

録画するときに気をつけるべきことはわかったとはいえ、すでに撮った動画はどうすればよいでしょうか。私は ffmpeg を使って修正することにしました。

まず、ffmpeg は動画の一部を切り出す crop オプションがあります。以下のようにして使います。

ffmpeg -i ./src.mp4 -vf \
crop=[出力動画の幅]:[出力動画の高さ]:[元動画の左上をゼロとして X 距離]:[元動画の左上をゼロとして Y 距離]\
destination.mp4

まず、今回の例は右下に余白ができ、左上から全部抜き出せばよいので「元動画の左上をゼロとして X 距離」と「元動画の左上をゼロとして Y 距離」はどちらも 0 とします。

続いて出力サイズを考えます。画面キャプチャをして調べた結果、全体の大きさ 2400×1350 のうち必要な部分 1920×1080 を抜き出せばよいと思いました。そこで「出力動画の幅」と「出力動画の高さ」をそれぞれ 1920, 1080 に設定しましたが、うまくいいきませんでした。そもそも ffmpeg は動画のサイズを 1920×1080 と認識しているので、このままだと何も変更を加えない動画ファイルが生成されるだけになってしまうようです。

動画のメタデータは 1920×1080 なのに、実態が 2400×1350 となっています。仕方ないので 1920×1080 を 1.25 で割ったサイズ 1536×864 を用いることにしました。これはうまくいきました。

ffmpeg -i ./src.mp4 -vf crop=1536:864:0:0 destination.mp4

しかし解像度情報は変えられない

ffmpeg を利用して直す方法では(今回のケースにおいて)明らかに 1920×1080 の動画になっています。しかしファイルのメタデータ上は crop に指定したサイズの 1536×864 になっています。余白は消せましたが、ファイルの実態と違っているのはそのままです。

実際に直した動画を YouTube にアップロードしてみると、フル HD (1920×1080) の動画して処理されず、720p (1280×720, HD動画) になってしまいました。

自分の手元で適当に見るにはそれっぽくなりますが、どこかにアップロードしたり、動画編集ソフトなどで読み込もうとするとエラーが起きそうです。

mp4 のメタ情報も変更する方法はないものでしょうか。

参考資料