FFMPEG x11grab/pulse AVキャプチャ: 非単調DTS

FFMPEG x11grab/pulse AVキャプチャ: 非単調DTS

これを修正するために、多くのオプションをいじってみましたが、最初に自分が望むことから始めて、助けを求めるのが良いと思いました。エミュレートされたゲーム映像をキャプチャしたいのですが、通常は解像度 256*240 です。そのため、ついでにロスレスで再スケーリングせずに映像をキャプチャしたほうがよいと考えました。次のコマンド ラインを使用します。

ffmpeg -f x11grab -i :0.0 -f pulse -i alsa_output.pci-0000_08_00.3.analog-stereo.monitor -ac 2 -c:v libx264rgb -pix_fmt bgr0 -c:a copy -y /tmp/capture.mkv

(ちなみに、私は /tmp を RAM ディスク/tmpfs パーティションとして使用していますが、それが影響するかどうかはわかりません。)

しかし、常に何らかのタイムスタンプの問題が発生し、次のような警告が表示されます。

[matroska @ 0x55b042f269b0] Non-monotonous DTS in output stream 0:1;
previous: 144, current: 141; changing to 144. This may result in
incorrect timestamps in the output file.

結果として得られるビデオはオーディオとビデオが同期がずれており、再生するとビデオがランダムにフリーズしたり、速度が上がったりしますが、オーディオが歪んで再生の途中で完全に停止してしまうこともあります。ビデオまたはオーディオを個別に録画することは問題なく機能しますが、ffmpeg がそれらを同期しようとすると問題が発生し始めるようです。

私は、特に StackExchange ネットワーク上のフォーラム投稿からあらゆる種類のオプションを試しましたが、正しい方向に機能していると思われる唯一のものは次のとおりです-async 1/-af aresample=async=1:min_hard_comp=0.100000:first_pts=0

ffmpeg -f x11grab -i :0.0 -f pulse -i alsa_output.pci-0000_08_00.3.analog-stereo.monitor \
    -ac 2 -c:v libx264rgb -pix_fmt bgr0 -c:a pcm_s16le \
    -af aresample=async=1:min_hard_comp=0.100000:first_pts=0 -y /tmp/capture.mkv

これは DTS 関連の警告を出力しませんが、実際にゲームプレイ中にオーディオ/ビデオがフリーズし、結果として得られるビデオもあまり良くありません。少し疑わしいですが、私のハードウェアがゲームのエミュレーション、録画、エンコードのオーバーヘッドを同時に処理できないだけなのかもしれません。おそらく、vcodec と acodec の両方を「コピー」に設定し、それを .nut に多重化し (mkv はどうやら raw ビデオを好まないようです)、何らかの方法でポストでビデオとオーディオを再同期できれば、それがそのような問題かどうか確認できるでしょう。

この質問はうまくまとまっていないかもしれません。申し訳ありませんが、もう困っています。まずは目的から始めて、試したことについて少し書いて、自分で質問を投稿するのが一番だと思いました。トラブルシューティングを行い、さまざまな提案をもう一度試して、自分のハードウェアで実際に実行できるかどうかを評価したいと思います。質問者が自分の質問が 5 時間以内に解決されず、誰も他に何も提案できないと感じた場合、ほとんどの StackExchange の質問は終了するようですから、その程度では少し楽観的すぎるかもしれません。

「neofetch」によると、これらは関連性のある仕様です。

CPU: AMD Ryzen 5 1600 (12) @ 3.200GHz
GPU: NVIDIA GeForce GTX 970
Memory: 2910MiB / 16017MiB

関連情報