如何获得近乎完美的屏幕录制质量?

Ole*_*leg 34 ffmpeg x11 screencasting kubuntu avconv

有人建议我将未经修改的 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,然后使用ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • 图像质量很好,但在我的测试系统上它落后于计算机。在更快的目标系统上它不会滞后,但显然会跳过帧,使视频不是很流畅
    • 我仍在尝试弄清楚如何将grab.avi 文件保存到SHM 以查看是否有帮助。
  • 使用伊斯坦布尔和 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

Edd*_*_Em 30

如果您的硬盘允许,您可以尝试这样做:

首先写入未压缩文件:

ffmpeg -f x11grab -s SZ -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi
Run Code Online (Sandbox Code Playgroud)

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

之后,您可以随时压缩它:

ffmpeg -i grab.avi grab.mkv
Run Code Online (Sandbox Code Playgroud)

当然,您可以更改压缩,选择编解码器等。


hda*_*nte 11

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

ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :1 \
       -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p \
       video.mkv
Run Code Online (Sandbox Code Playgroud)

关键点:

  • -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
Run Code Online (Sandbox Code Playgroud)

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

[edit 20180418] Gnome Shell 和 Wayland 更新:

ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :1 \
       -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p \
       video.mkv
Run Code Online (Sandbox Code Playgroud)