|
Dla tych, którzy nie wiedzą, plik screencast jest to cyfrowe nagranie wyjścia z ekranu komputera, czasami zawierające narrację dźwiękową.
En Linux, istnieje kilka narzędzia zrobić screencast. Jednak ci, którzy wolą to robić zużywające minimalne zasoby nie mogą przestać czytać tego artykułu. |
Korzystając z 2 narzędzi (ffmpeg do przechwytywania ekranu i xwininfo w celu uzyskania współrzędnych i wymiarów rejestrowanego okna) udało mi się wykonać screencast przy minimalnych zasobach i uzyskać optymalne wyniki.
Skrypt uruchamiający screencast
#! / bin / bash
# Uzyskaj współrzędne i rozmiar wybranego okna
# Nie dotyczy to dekoracji okien.
unset xywh
eval $ (xwininfo -frame |
sed -n -e "s / ^ + Absolutny lewy górny X: + ([0-9] +). * / x = 1 / p"
-e "s / ^ + Absolutny lewy górny Y: + ([0-9] +). * / y = 1 / p"
-e "s / ^ + Szerokość: + ([0-9] +). * / w = 1 / p"
-e "s / ^ + Wysokość: + ([0–9] +). * / h = 1 / p")
$ w = $ w + $ w% 2 # że szerokość jest wielokrotnością 2, w przeciwnym razie ffmpeg narzeka
WIN_XY = $ x "," $ y # formatuje współrzędne XY
WIN_GEO = $ w "x" $ h # format rozmiaru okna
# notification-send wyświetli komunikat informujący o rozpoczęciu prezentacji.
# uruchom ffmpeg z parametrami, które pasują do twojej konfiguracji.
notify-send "Uruchamianie screencast ..." && ffmpeg -f alsa -i hw: 0 -f x11grab -r 25 -s $ WIN_GEO -i: 0.0 + $ WIN_XY -acodec libmp3lame -async 1 -vcodec libx264 -preset ultrafast - crf 0 - wątki 0 save.mp4
Nie musisz w pełni rozumieć wszystkiego, co robi ten skrypt. Wystarczy postępować zgodnie z komentarzami. Jest jednak bardzo możliwe, że będziesz musiał zmienić niektóre parametry w wierszu, w którym wykonywany jest ffmpeg, aby dostosować je do konfiguracji twojego komputera.
Architektura dźwięku
1) Jeśli używasz OSS, zamień -f alsa -i hw: 0 na -f oss -i / dev / dsp
2) Jeśli używasz tylko ALSA, musisz użyć parametrów zawartych w skrypcie (-f alsa -i hw: 0). Aby określić liczbę po hw: możesz uruchomić aplay -l i wybrać odpowiedni numer karty dźwiękowej.
3) Jeśli używasz Pulse Audio (Ubuntu i pochodne go używają), użyj parametrów -f alsa -ac 1 -i pulse.
FPS
-r 25 wskazuje liczbę klatek na sekundę (klatki na sekundę lub klatki na sekundę), z jaką chcesz nagrywać. 25 to dobra opcja.
Kodek audio, wideo i synchronizacji
-acodec libmp3lame to kodek audio. Zdecydowałem się nagrać to w formacie mp3. Możesz użyć dowolnego innego.
-async 1 umożliwia synchronizację dźwięku z wideo.
-vcodec libx264 -preset ultraszybkie -crf 0 -threads 0, mówi ffmpeg, że kodek wideo do użycia to x264 i że ustawienie wstępne jest ultraszybkie (jest szybkie, wolne itp.), w przeciwnym razie nie nagra poprawnie z żądaną ilością fps. Parametr -crf 0 wskazuje poziom kompresji (im niższa kompresja, tym niższa kompresja). Wreszcie, wątki 0 wskazują liczbę wątków do użycia, podczas przekazywania 0 ffmpeg oblicza ją automatycznie. Podobnie jak w przypadku ustawień audio, możesz wybrać inne opcje.
Wszystkie te ustawienia dały mi najlepsze wyniki: stosunkowo mały plik, dobra jakość wideo, zsynchronizowany dźwięk i brak opóźnień. Zalecam jednak zagłębić się w dokumentację ffmpeg, aby odkryć inne.
Skrypt kończący screencast
#! / bin / bash
notify-send "Kończę screencast ..." && killall ffmpeg
ffcast
Szukając informacji do napisania scenariuszy, odkryłem, że ktoś wpadł na pomysł bardzo podobny do mojego. Ffcast to skrypt korzystający z tych samych narzędzi (ffmpeg i xwininfo). Wspominam o tym, ponieważ niektórzy mogą uznać za wygodniejsze korzystanie z tego skryptu.
W Arch i pochodnych otworzyłem terminal i uruchomiłem:
yourt -S ffcast
Resztę możesz pobrać z tutaj.
Do końca…
Po utworzeniu i zapisaniu skryptów zapisanych w folderze HOME musisz nadać mu uprawnienia do wykonywania. Zakładając, że wywoływane są start_screencast i finish_screencast, uruchom następujące polecenia w terminalu:
chmod + x start_screencast
chmox + x terminate_screencast
Na koniec pozostaje tylko przypisanie każdego ze skryptów do 2 wygodnych dla Ciebie skrótów (skrótów). W ten sposób skrypty będą uruchamiane po naciśnięciu wybranej kombinacji klawiszy.