Làm thế nào để có được chất lượng ghi màn hình gần như hoàn hảo?


27

Có người đề nghị tôi hướng một bản sao của màn hình X chưa sửa đổi vào một tệp và sau đó chuyển đổi tệp đó thành tệp video có mục đích chung. Những lệnh nào tôi sẽ sử dụng để làm điều này trên hệ thống Kubfox? (Chỉnh sửa: Anh ấy đã nói điều gì đó về việc gắn cổng hiển thị vào một tệp.) Nếu không thể, tùy chọn tốt nhất của tôi cho bản ghi màn hình chất lượng tuyệt vời không phụ thuộc vào phần cứng nhanh là gì?

Bối cảnh: Tôi đã thử sử dụng avconv với -f x11grab và một số chương trình GUI. Tuy nhiên, bất kể tôi cố gắng gì, video kết quả đều có hiện vật / độ mờ hoặc bị chói (thiếu khung). Điều này có thể là do hạn chế CPU / bộ nhớ.

Những mục tiêu:

  • Chất lượng video không được khác biệt đáng kể so với xem phiên trực tiếp trên màn hình, vì mục đích là để thể hiện một ứng dụng hoạt hình.
  • Video cuối cùng phải ở định dạng phổ biến có thể được gửi cho người dùng Windows và được sử dụng trên web. Tôi nghĩ rằng H.264 MP4 nên hoạt động.
  • Các giải pháp không nên suy đoán nhiều kiến ​​thức trước. Tôi quen thuộc với dòng lệnh và các lệnh Linux cơ bản, nhưng tôi vẫn đang học Linux và không biết nhiều về codec video.

Những gì tôi đã thử:

  • Lệnh tốt nhất cho đến nay : ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avi, sau đó chuyển đổi sang mp4 với ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • Chất lượng hình ảnh là tuyệt vời, nhưng trong bài kiểm tra của tôi, nó làm chậm máy tính. Trên hệ thống mục tiêu nhanh hơn, nó không bị lag, nhưng các khung hình rõ ràng bị bỏ qua, làm cho video không được mượt mà .
    • Tôi vẫn đang cố gắng tìm ra cách lưu tệp Grab.avi vào SHM để xem có giúp được không.
  • Sử dụng máy ghi GUI Istanbul và RecordMyDesktop
  • Lệnh đơn giản: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpgsử dụng phiên bản avconv 0.8.3-4: 0.8.3-0ubfox0.12.04.1
  • Thêm -codec:copy(không thành công với Requested output format 'x11grab' is not a suitable output format:)
  • Thêm -same_quant(kết quả là chất lượng tuyệt vời, nhưng rất khó hiểu / thiếu nhiều khung hình)
  • Thêm -vpre lossless_ultrafast(không thành công với : Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')
  • Thêm các giá trị khác nhau của -qscale
  • Thêm các giá trị khác nhau của -b
  • Thêm -vcodec h264(đầu ra lặp đi lặp lại : Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Lưu ý: h264 được liệt kê trong avconv -formatsđầu ra làDE h264 raw H.264 video format

Câu trả lời:


24

Nếu ổ cứng của bạn cho phép, bạn có thể thử làm theo cách này:

Đầu tiên viết tập tin không nén:

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

đây SZlà kích thước hiển thị của bạn (ví dụ 1920x1080).

Sau đó, bạn có thể nén nó bất cứ lúc nào bạn muốn:

ffmpeg -i grab.avi grab.mkv

Tất nhiên, bạn có thể thay đổi nén, chọn codec và như vậy.



6

Tôi đã thành công với:

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

Những điểm chính:

  • -qp 0: x264 chế độ không mất mát
  • -preset ultrafast: sử dụng cpu nhỏ nhất, kích thước lớn
  • -pix_fmt yuv444p: mặc định, nhưng ffmpeg gợi ý yuv420p, mất dữ liệu

Gợi ý: chụp màn hình và lớp phủ webcam với:

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

[chỉnh sửa 20180418] Cập nhật cho Gnome Shell và 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()

1

Bạn đã thử rfbroxy chưa?

Tôi sử dụng nó để ghi lại các phiên X11.

Bạn có thể sử dụng nó trong chế độ chỉ ghi hình ảnh nếu có THAY ĐỔI.


1

Đây là một cách giải quyết và có lẽ không "gần như hoàn hảo" vì nó có thể phụ thuộc vào tốc độ mạng hoặc các yếu tố khác có thể cản trở luồng video.

Sử dụng VNC hoặc Teamviewer và kết nối từ máy tính xách tay hoặc máy tính để bàn của bạn với máy khác. Nếu bạn có sẵn máy tính xách tay Windows hoặc OSX, bạn có thể có các công cụ có thể ghi lại điều này và tôi tin rằng teamviewer có thể tự ghi lại một phiên. Thật dễ dàng để thử, và sau đó bạn có thể quyết định xem chất lượng có đủ tốt hay không.

Teamviewer có xu hướng mở rộng, nhưng tôi không biết nếu điều này xảy ra với các phiên được ghi lại.

VNC không nén hoặc chia tỷ lệ và màn hình máy tính xách tay / máy tính để bàn của bạn cần độ phân giải cao hơn so với máy khác. Chất lượng tốt. Có thể người xem VNC bạn sử dụng có thể ghi lại. Bây giờ tôi đang dùng Ubuntu và người xem chuẩn không thể làm điều này.

Ghi lại màn hình để hiển thị cho khán giả hoặc trên web - có những công cụ đặc biệt để có thể bắt nhấp, theo dõi và phóng to chuột và có các tùy chọn khác để làm rõ hơn những gì bạn đang làm. Tôi đề nghị bạn nên xem những cái đó quá. Google cho "phần mềm ghi màn hình".


0

Tôi đang sử dụng Camtasia để ghi lại video chơi trò chơi và video trực tuyến của mình. Tôi cũng đã sử dụng máy quay video fraps trước đó nhưng khung hình / giây giảm trong khi chơi. Camtasia cho tốc độ khung hình / giây cao hơn nhưng vấn đề rắc rối duy nhất là mỗi lần tôi phải chuyển đổi đầu ra .CAMREC sang avi như bạn có thể thấy trong mô tả liên kết nhập ở đây, nhập mô tả liên kết vào đây . .Mamrec là định dạng độc quyền của camtasia và không thể phát trên bất kỳ người chơi bên thứ ba nào như Windows Media Player và vlc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.