Jak uzyskać niemal idealną jakość nagrywania ekranu?


27

Ktoś zasugerował, żebym skierował kopię niezmodyfikowanego wyświetlacza X do pliku, a następnie przekonwertował ten plik na plik wideo ogólnego przeznaczenia. Jakich poleceń użyłbym do tego w systemie Kubuntu? (Edycja: Powiedział coś o dołączeniu portu wyświetlania do pliku.) Jeśli nie jest to możliwe, jaka jest moja najlepsza opcja dla nagrania ekranu doskonałej jakości, który nie zależy od szybkiego sprzętu?

Tło: Próbowałem użyć avconv z -f x11grab i niektórymi programami GUI. Jednak bez względu na to, co próbuję, powstałe wideo ma artefakty / rozmazanie lub jest nierówne (brakujące klatki). Jest to prawdopodobnie spowodowane ograniczeniami procesora / pamięci.

Cele:

  • Jakość wideo nie może wyraźnie różnić się od oglądania sesji bezpośrednio na ekranie, ponieważ celem jest pokazanie animowanej aplikacji.
  • Ostateczne wideo musi mieć wspólny format, który może być wysyłany do użytkowników systemu Windows i używany w Internecie. Myślę, że H.264 MP4 powinien działać.
  • Rozwiązanie nie powinno wymagać wcześniejszej wiedzy. Znam linię poleceń i podstawowe polecenia Linuksa, ale wciąż uczę się Linuksa i niewiele wiem o kodekach wideo.

Co już próbowałem:

  • Najlepsze do tej pory polecenie:, ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avia następnie przekonwertuj na mp4 za pomocą ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • Jakość obrazu jest świetna, ale w moim systemie testowym jest opóźniona w stosunku do komputera. W szybszym systemie docelowym nie opóźnia się, ale klatki są oczywiście pomijane, co powoduje, że wideo nie jest bardzo płynne .
    • Wciąż próbuję wymyślić, jak zapisać plik grab.avi w SHM, aby zobaczyć, czy to pomoże.
  • Korzystanie z rejestratorów GUI ze Stambułu i RecordMyDesktop
  • Proste polecenie: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpgza pomocą avconv w wersji 0.8.3-4: 0.8.3-0ubuntu0.12.04.1
  • Dodawanie -codec:copy(nie powiedzie się z: Requested output format 'x11grab' is not a suitable output format)
  • Dodawanie -same_quant(powoduje świetną jakość, ale jest bardzo niepewny / brakuje wielu ramek)
  • Dodawanie -vpre lossless_ultrafast(nie powiedzie się z: Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')
  • Dodawanie różnych wartości -qscale
  • Dodawanie różnych wartości -b
  • Dodawanie -vcodec h264(wyjścia wielokrotnie: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Uwaga: h264 jest wymieniony w avconv -formatsdanych wyjściowych jakoDE h264 raw H.264 video format

Odpowiedzi:


24

Jeśli twój HDD pozwala, możesz spróbować zrobić to w ten sposób:

Najpierw napisz nieskompresowany plik:

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

tutaj SZjest twój rozmiar wyświetlacza (np. 1920x1080).

Następnie możesz go skompresować w dowolnym momencie:

ffmpeg -i grab.avi grab.mkv

Oczywiście możesz zmienić kompresję, wybrać kodek i tak dalej.



6

Odniosłem sukces z:

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

Kluczowe punkty:

  • -qp 0: tryb bezstratny x264
  • -preset ultraszybkie: najmniejsze użycie procesora, duży rozmiar
  • -pix_fmt yuv444p: domyślnie, ale ffmpeg sugeruje yuv420p, który jest stratny

Wskazówka: zrzut ekranu i nakładki kamery internetowej za pomocą:

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

[edytuj 20180418] Aktualizacja Gnome Shell i 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

Czy próbowałeś rfbroxy ?

Używam go do nagrywania sesji X11.

Możesz go używać w trybie, w którym zapisuje on tylko zdjęcie, jeśli istnieje ZMIANA.


1

Jest to obejście problemu i prawdopodobnie nie jest „prawie idealne”, ponieważ może zależeć od prędkości sieci lub innych czynników, które mogą utrudniać strumień wideo.

Użyj VNC lub Teamviewer i połącz się z laptopa lub komputera stacjonarnego z drugim komputerem. Jeśli masz dostępnego laptopa z systemem Windows lub OSX, prawdopodobnie masz narzędzia, które mogą to nagrać i uważam, że teamviewer może nagrać samą sesję. Łatwo jest wypróbować, a następnie możesz zdecydować, czy jakość jest wystarczająco dobra.

Teamviewer ma tendencję do skalowania, ale nie wiem, czy dzieje się tak również z nagranymi sesjami.

VNC nie kompresuje się ani nie skaluje, a Twój laptop / monitor stacjonarny potrzebuje wyższej rozdzielczości niż rozdzielczość drugiego urządzenia. Jakość jest dobra. Może używana przez ciebie przeglądarka VNC może nagrywać. Jestem teraz na Ubuntu i standardowa przeglądarka nie może tego zrobić.

Nagrywanie ekranu do wyświetlania przed publicznością lub w Internecie - istnieją specjalne narzędzia do tego, które mogą wychwytywać kliknięcia, podążać i powiększać mysz oraz mieć inne opcje, aby lepiej wyjaśnić, co robisz. Sugeruję, żebyś też na nie spojrzał. Google dla „oprogramowania do nagrywania ekranu”.


0

Używam Camtasia do nagrywania mojego wideo z gry i wideo online. Używałem też magnetowidu fraps, ale liczba klatek na sekundę spada podczas odtwarzania. Camtasia daje wyższy FPS, ale jedynym kłopotliwym problemem jest to, że za każdym razem muszę przekonwertować wyjście .CAMREC do AVI, jak widać w wprowadź opis linku tutaj wprowadź opis linku tutaj . .Camrec jest zastrzeżonym formatem kamtasji i nie można go odtwarzać w odtwarzaczach innych firm, takich jak Windows Media Player i VLC.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.