Xvfb画面の「基本」フレームレートは何ですか?

Xvfb画面の「基本」フレームレートは何ですか?

私はシミュレートされた画面で作業していますが、Xvfbffmpegを使ってキャプチャしたいと思います。フレームの欠落や重複を防ぐために画面の正確な走査率でキャプチャしたいのですがXvfbにはないようですが…こんなものはありますか?

xrandr0.0であることを確認してください。

$ Xvfb :123 -ac -nolisten tcp -screen 0 1920x1080x24 &
$ DISPLAY=:123 xrandr
xrandr: Failed to get size of gamma for output screen
Screen 0: minimum 1 x 1, current 1920 x 1080, maximum 1920 x 1080
screen connected 1920x1080+0+0 0mm x 0mm
   1920x1080      0.00*

画像はどのような速度で画面に描画されますか? ffmpegは、次のコマンドを使用したときのこの入力の29.97fpsのフレームレートを示していますx11grab

$ ffmpeg -f x11grab -i :123
ffmpeg version 4.3.5-0+deb11u1 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 10 (Debian 10.2.1-6)
  configuration: --prefix=/usr --extra-version=0+deb11u1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
[x11grab @ 0xaaaadaa0c2a0] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, x11grab, from ':123':
  Duration: N/A, start: 1669816070.219332, bitrate: 1988667 kb/s
    Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 1988667 kb/s, 29.97 fps, 1000k tbr, 1000k tbn, 1000k tbc

ただし、「基本」フレームレートを使用してリアルタイムでエンコードしたときに得られる結果は、〜17〜21fpsに近いです。

$ ffmpeg -progress - -nostats -f x11grab -re -i :123 -f null /dev/null
frame=198
fps=17.80
stream_0_0_q=-0.0
bitrate=N/A
total_size=N/A
out_time_us=11111100
out_time_ms=11111100
out_time=00:00:11.111100
dup_frames=0
drop_frames=0
speed=0.999x
progress=end

私が見ると、モニターにデフォルトのフレームレートがなく、代わりに勝手にサンプリングできるようです。

だから私の質問はこれが正しいですか?それでは、処理能力が十分に大きい限り、「無制限」fpsを達成できますか?

ベストアンサー1

フレームレートは映画プロジェクターから来ます。ボックス内に画像があり(「フレーム」)、画面でしばらく点滅してから空白になり、別のフレームがしばらく点滅し、持続する視力により次のようになります。写真の中のオブジェクトを動かします。

最初のコンピュータグラフィックスビデオディスプレイは、ベクトル描画にオシロスコープを使用しました。オシロスコープの画面には停止時間があり、その時間を超えると画面に描かれたベクトル線がゆっくり消えます。ドライバーは、明るさを変えるために様々な周波数と速度で様々な線を描いて再描画することができるので、ディスプレイの一部は特定の間隔で更新され、他の部分は異なる明るさに対する異なる間隔と速度で更新される。これに特別なフレームレートはありません。

その後、彼らは「範囲」の同じ電子ビームがスクリーンをスキャンするラスタースクリーンを作成しましたが、今では線が左から右に配置され、次に線が順次または交互に配置され、電子を回転させる長方形のパターンになりました。白黒画像を提供するためにビームのオン/オフを切り替える(または強度を変更)、画像が2倍インターレースされている場合は「半分のフレーム」レートがあり、画面の半分が描画され、残りの半分がその間に描画されます(同じ半分フレームの他のすべての線)。このインターレースされたハーフフレームレートは、2つのハーフフレームの動きが異なる可能性があるため、正確にフレームレートに変換されません。

最初のテレビにはラインがありましたが、ライン内のシミュレーションなので実際のピクセルはありませんでしたが、コンピュータにインポートするとラインがピクセルになり、ビデオカードにはピクセルレートとリフレッシュレートがありましたが、リフレッシュレートが表示されるまでにどのくらいかかりますか?戻る。 2つの半フレームを描いています...最終的に見えるのはフレームレートです。特に、1つのフィールドと同じ時間内に2つのフィールドの内容を描画できるように、より高いピクセルレートを取得し、インターレースから連続的なプログレッシブラインに移動することができる。

その後、チューブディスプレイからLCDディスプレイに切り替えました。もはや蛍光体の保持時間を使用しないので、突然もはやリフレッシュの頻度がなく、電子ビームがなく、走査速度がない。しかしながら、ビデオ信号フォーマット設計は依然として従来のピクセル走査フォーマットを使用する。もしそうなら、LCDモニタにはフレームレートがありますか?一種の。これには、連続したピクセルストリームを画面に収容できる最大ピクセル速度があり、全画面が更新される速度と移動するオブジェクトが更新される速度が制限されます。

これで、ピクセルに対応するために疑似アナログ信号が不要になったLCD画面やその他のフォーマットがあります。それらは圧縮と複雑なコマンドを含む完全なデジタルフォーマットを使用します。これにより、画面全体ではなく小さな領域のみを更新するように指示でき、フレームレートが再び消えます。

質問に戻り、Xvfbにはフレームレートがありますか?ハードウェアのない完全な仮想デバイスなので、物事を「表示」できる速度を制限することはありません。 X11プロトコルは、rawピクセルラスタアップデートだけでなく、完全な描画コマンドもサポートしているため、フレームレートはありません。

それでは、ソースはどうですか?画像ソースが送信できる描画コマンドはCPUとGPUの速度によってのみ制限されるため、すべてのフレームレートはその速度と更新する項目の複雑さによって異なります。

したがって、一部のゲームでは、シーンが部分的に描画されるのを見るのではなく、シーン全体をレンダリングし、全体の画像を一度に提供するため、フレームレートがあるため、通常はバッファを倍増して同時に1つのバッファを表示します.バッファ。隠しバッファーに描画し、交換します。その結果、映画のようなフレームレートが生成される。ゲームはハードウェアが許可する限り迅速にレンダリングできますが、これはかなり異なる場合があります。多くのゲームでは、内部ゲームの状態を表示される内容と同期させることができ、フレームレートを設定し、ハードウェアをその速度に人為的に制限します。 (またはハードウェアが追従できない場合は、フレームをスキップして低くても同期されたフレームを取得できます。)

Xvfbにはデフォルトのフレームレートはありません。可能な最大フレームレートを持ちます。録画ソフトウェアの最大フレームレートは、画像をキャプチャして処理し、ディスクに書き込むパイプラインによって制限されることがあります。

理想的には、xvfbでヒントを取得し、変更が行われ、完全に描画された後にのみフレームを保存できますが、これはフレームレートではなく、可変タイミングのフレームになります。あるいは、フレームなしで一連の描画コマンドを保存するだけです。

おそらく、可変タイミングまたは描画プリミティブのあるフレームを使用するのではなく、固定フレームレートで録画するビデオコーデックを選択したため、フレームレートが必要になるでしょう。

最良の方法は、目的の出力ファイルサイズに対応するランダムなフレームレートを選択することです。遅すぎず、不安定に見えません。

おすすめ記事