X11

如何獲得近乎完美的錄屏質量?

  • March 17, 2022

有人建議我將未修改的 X 顯示器的副本直接複製到文件中,然後將該文件轉換為通用影片文件。在 Kubuntu 系統上我會使用什麼命令來執行此操作?(編輯:他說了一些關於將顯示埠附加到文件的內容。)如果不可能,對於不依賴於快速硬體的優質螢幕錄製,我的最佳選擇是什麼?

*背景:*我嘗試將 avconv 與 -f x11grab 和一些 GUI 程序一起使用。但是,無論我嘗試什麼,生成的影片要麼有偽影/模糊,要麼是斷斷續續的(失去幀)。這可能是由於 CPU/記憶體限制。

目標:

  • 影片質量不能與直接在螢幕上看到會話有明顯不同,因為目的是展示動畫應用程序。
  • 最終影片必須採用可以發送給 Windows 使用者並在 Web 上使用的通用格式。我認為 H.264 MP4 應該可以工作。
  • 解決方案不應該假設很多先驗知識。我熟悉命令行和基本的 Linux 命令,但我還在學習 Linux,對影片編解碼器了解不多。

我已經嘗試過的:

  • 迄今為止最好的命令:ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avi,然後用 . 轉換為 mp4 ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4

    • 圖片質量很好,但在我的測試系統上它落後於電腦。在更快的目標系統上,它不會滯後,但明顯會跳過幀,使影片不太流暢
    • 我仍在試圖弄清楚如何將 grab.avi 文件保存到 SHM 以查看是否有幫助。
  • 使用 Istanbul 和 RecordMyDesktop GUI 記錄器

  • 簡單命令:avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpg使用 avconv 版本 0.8.3-4:0.8.3-0ubuntu0.12.04.1

  • 添加-codec:copy(失敗Requested output format 'x11grab' is not a suitable output format:)

  • 添加-same_quant(質量很好,但非常不穩定/缺少很多幀)

  • 添加-vpre lossless_ultrafast(失敗: Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')

  • 添加各種值-qscale

  • 添加各種值-b

  • 添加-vcodec h264(重複輸出: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)

    • 注意:h264 在avconv -formats輸出中列為DE h264 raw H.264 video format

如果您的硬碟允許,您可以嘗試這樣做:

首先寫入未壓縮的文件:

ffmpeg -f x11grab -s SZ -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi

SZ是您的顯示尺寸(例如 1920x1080)。

之後,您可以隨時壓縮它:

ffmpeg -i grab.avi grab.mkv

當然,您可以更改壓縮,選擇編解碼器等。

我在以下方面取得了成功:

ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :1 \
      -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p \
      video.mkv

關鍵點:

  • -qp 0:x264 無損模式
  • -preset ultrafast:最小的cpu使用率,大尺寸
  • -pix_fmt yuv444p:預設,但是ffmpeg建議yuv420p,有損

提示:擷取螢幕和網路攝像頭覆蓋:

ffmpeg -f x11grab -thread_queue_size 64 -video_size 1920x1080 -framerate 30 -i :1 \
      -f v4l2 -thread_queue_size 64 -video_size 320x180 -framerate 30 -i /dev/video0 \
      -filter_complex 'overlay=main_w-overlay_w:main_h-overlay_h:format=yuv444' \
      -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p \
      video.mkv

https://trac.ffmpeg.org/wiki/Capture/Desktop

$$ edit 20180418 $$Gnome Shell 和 Wayland 更新:

#!/usr/bin/env python3
from dbus import SessionBus, Interface
from os import getcwd, path
from sys import argv

BUS_NAME = 'org.gnome.Shell.Screencast'
PATH_NAME = '/org/gnome/Shell/Screencast'
INTERFACE_NAME = BUS_NAME
PIPELINE='x264enc pass=qual quantizer=0 speed-preset=ultrafast ! queue ! matroskamux'

if path.isabs(argv[1]):
   name = argv[1]
else:
   name = path.join(getcwd(), argv[1])

bus = SessionBus()
screen_cast = bus.get_object(BUS_NAME, PATH_NAME)
screen_cast = Interface(screen_cast, INTERFACE_NAME)

ret, name = screen_cast.Screencast(name, {'pipeline': PIPELINE})

if not ret:
   print('Error starting screencast.')
   raise SystemExit(1)

try:
   i = input()
except (EOFError, KeyboardInterrupt):
   pass
finally:
   screen_cast.StopScreencast()

引用自:https://unix.stackexchange.com/questions/73622