如何獲得近乎完美的螢幕錄製品質?

如何獲得近乎完美的螢幕錄製品質?

有人建議我將未修改的 X 顯示的副本定向到一個文件,然後將該文件轉換為通用視訊文件。我將使用什麼命令在 Kubuntu 系統上執行此操作? (編輯:他說了一些關於將顯示端口附加到文件的事情。)如果不可能,那麼對於不依賴快速硬體的高品質螢幕錄製來說,我的最佳選擇是什麼?

背景:我嘗試將 avconv 與 -f x11grab 和一些 GUI 程式一起使用。然而,無論我嘗試什麼,生成的影片要么有偽影/模糊,要么不穩定(丟失幀)。這可能是由於 CPU/記憶體限製造成的。

目標:

  • 視訊品質不得與直接在螢幕上看到的會話有明顯不同,因為目的是演示動畫應用程式。
  • 最終影片必須採用通用格式,可以傳送給 Windows 使用者並在網路上使用。我認為 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!
    • avconv -formats注意:h264 在輸出中列出為DE h264 raw H.264 video format

答案1

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

首先寫入未壓縮的檔案:

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

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

之後您可以隨時壓縮它:

ffmpeg -i grab.avi grab.mkv

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

答案2

我已經取得了成功:

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

關鍵點:

  • -qp 0:x264無損模式
  • -預設超快:最小的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

[編輯 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()

答案3

這是一種解決方法,可能不是“近乎完美”,因為它可能取決於網路速度或可能阻礙視訊串流的其他因素。

使用 VNC 或 Teamviewer 並從筆記型電腦或桌上型電腦連接到另一台電腦。如果您有 Windows 或 OSX 筆記型電腦,您可能有可以記錄此情況的工具,並且我相信 teamviewer 可以自行記錄會話。嘗試很容易,然後您就可以決定品質是否足夠好。

Teamviewer 傾向於擴展,但我不知道錄製的會話是否也會發生這種情況。

VNC 不會壓縮或縮放,而且您的筆記型電腦/桌上型顯示器需要比其他電腦更高的解析度。品質很好。也許您使用的 VNC 檢視器可以錄製。我現在使用的是 Ubuntu,標準檢視器無法執行此操作。

用於向觀眾或在網路上顯示的螢幕錄製 - 有專門的工具可以捕捉點擊、追蹤和放大滑鼠,並且還有其他選項可以讓您更清楚地了解您正在做什麼。我建議你也去看看那些。谷歌搜尋「螢幕錄製軟體」。

答案4

我正在使用 Camtasia 錄製我的遊戲影片和線上影片。我之前也用過fraps錄影機,但播放時fps下降。 Camtasia 提供了更高的 fps,但唯一麻煩的問題是每次我都必須將輸出 .CAMREC 轉換為 avi,如您所見在此輸入連結描述在此輸入連結描述。 .camrec 是 camtasia 的專有格式,無法在 Windows Media Player 和 vlc 等任何第三方播放器上播放。

相關內容