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, aby to zrobić w systemie Kubuntu? (Edycja: powiedział coś o podłączaniu portu wyświetlacza do pliku.) Jeśli nie jest to możliwe, jaka jest moja najlepsza opcja, aby nagrać ekran o 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 kilkoma programami GUI. Jednak bez względu na to, co próbuję, wynikowy film ma artefakty / rozmycie lub jest nierówny (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 animowanego podanie.
  • Końcowe wideo musi mieć wspólny format, który można przesłać użytkownikom systemu Windows i wykorzystać w Internecie. Myślę, że H.264 MP4 powinien działać.
  • Rozwiązanie nie powinno zakładać dużej wiedzy. Znam wiersz poleceń i podstawowe polecenia Linuksa, ale nadal uczę się Linuksa i nie wiem zbyt wiele o kodekach wideo.

Czego już próbowałem:

  • Jak dotąd najlepsze polecenie: ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avi, a 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 komputer nie działa. W szybszym systemie docelowym nie ma opóźnień, ale klatki są oczywiście pomijane, przez co wideo nie jest zbyt płynne .
    • Nadal próbuję dowiedzieć się, jak zapisać chwyt. avi do SHM, aby sprawdzić, czy to pomoże.
  • Korzystanie z rejestratorów GUI Istanbul i RecordMyDesktop
  • Proste polecenie: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpg używając avconv w wersji 0.8.3-4: 0.8.3-0ubuntu0.12.04.1
  • Dodawanie -codec:copy (niepowodzenie z: Requested output format "x11grab" is not a suitable output format)
  • Dodanie -same_quant (daje świetną jakość, ale jest bardzo nierówna / brakuje wielu klatek)
  • Dodanie -vpre lossless_ultrafast (niepowodzenie 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 (wyświetla wielokrotnie: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Uwaga: na liście jest h264 w wyjście jako DE h264 raw H.264 video format

Odpowiedź

Jeśli pozwala na to twój dysk twardy, 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 SZ to rozmiar ekranu (np. 1920 x 1080).

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

ffmpeg -i grab.avi grab.mkv 

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

Komentarze

  • Zobacz także: unix.stackexchange.com/a/120001/26227
  • ubuntu 18.04 nie ' nie działa:: 0.0: Nieprawidłowy argument
  • @ user1325696, działa całkiem dobrze. Na przykład. ffmpeg -f x11grab -s 2560x1080 -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi

Odpowiedź

Udało mi się:

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

Kluczowe kwestie:

  • -qp 0: tryb bezstratny x264
  • -preset ultraszybki: najmniejsze użycie procesora, duży rozmiar
  • -pix_fmt yuv444p: domyślne, ale ffmpeg sugeruje yuv420p, które jest stratne

Wskazówka: zrzut ekranu i nakładka kamery internetowej z:

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] Aktualizacja dla 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() 

Komentarze

  • jak można określam swój rozmiar ekranu?

Odpowiedź

To jest obejście i prawdopodobnie nie jest to „prawie idealne”, ponieważ może zależeć od szybkości sieci lub innych czynników, które mogą utrudniać transmisję wideo.

Użyj VNC lub Teamviewer i połącz się z laptopa lub komputera stacjonarnego z innym komputerem. Jeśli masz dostępny laptop z systemem Windows lub OSX, yo Prawdopodobnie masz narzędzia, które mogą to nagrać i uważam, że Teamviewer może nagrać samą sesję. Łatwo jest spróbować, a wtedy możesz zdecydować, czy jakość jest wystarczająco dobra.

Teamviewer ma tendencję do skalowania, ale nie wiem, czy dzieje się tak również w przypadku nagranych sesji.

VNC nie kompresuje ani nie skaluje, a monitor Twojego laptopa / komputera stacjonarnego wymaga wyższej rozdzielczości niż rozdzielczość innego komputera. Jakość jest dobra. Może przeglądarka VNC, której używasz, może nagrywać. Jestem teraz na Ubuntu, a standardowa przeglądarka nie może tego zrobić.

Nagrywanie ekranu do wyświetlania publiczności lub w Internecie – są do tego specjalne narzędzia, które mogą przechwytywać kliknięcia, śledzić i powiększać myszy i masz inne opcje, które pozwolą Ci lepiej wyjaśnić, co robisz.Proponuję, żebyś też na nie spojrzał. Google dla „oprogramowania do nagrywania ekranu”.

Odpowiedź

Czy próbowałeś już rfbroxy ?

Używam go do nagrywania sesji X11-screen.

Możesz go używać w trybie, w którym rejestruje tylko obraz, jeśli jest ZMIANA .

−-type=WHAT WHAT = screen jest nawet wartością domyślną, zgodnie ze stroną podręcznika.

Komentarze

  • That ' jest interesujące. Jak to robisz?
  • @GunarGessner powinno być zachowaniem domyślnym. Alternatywną metodą jest reagowanie na zdarzenia myszy / klawiatury. Może to być jeszcze lepsze, jeśli masz zegar na ekranie i nie chcesz robić zdjęcia, gdy zmienia się tylko ten zegar …

Odpowiedz

Używam Camtasia do nagrywania wideo z gry i wideo online. Używałem też wcześniej rejestratora wideo fraps, ale podczas gry spadają. Camtasia daje wyższe fps, ale jedynym kłopotliwym problemem jest to, że za każdym razem muszę przekonwertować wyjście .CAMREC na avi, jak widać w wprowadź opis linku tutaj wprowadź tutaj opis linku . .Camrec jest zastrzeżonym formatem camtasia i nie można go odtwarzać na żadnych odtwarzaczach innych firm, takich jak Windows Media Player i vlc.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *