Jak zrobić screencast przy użyciu ffmpeg

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
Aby oba skrypty działały, musisz mieć zainstalowane powiadomienie-send. Wszystkie dystrybucje pochodzące z Ubuntu powinny być dostarczane z zainstalowanym tym narzędziem. W Arch i pochodnych: sudo pacman -S libnotify.

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.


12 komentarzy, zostaw swoje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Michał Sp powiedział

    Odkąd poznałem Linuksa, zadałem sobie dokładnie to samo pytanie, które zostało szczegółowo omówione w tym komentarzu. byłby to ambitny projekt.

  2.   pmf powiedział

    Myślę, że samouczek jest dobry, ale jak powiedzieć coś łatwego dla początkujących użytkowników? No cóż, najlepiej wydaje mi się KAzam, jest łatwy w obsłudze i moim zdaniem nie zużywa dużo !!!!!! Twoje zdrowie

  3.   Użyjmy Linuksa powiedział

    Nie wszystko. Ponadto, szczerze wierzę, że nie ma dobrego interfejsu do screencastów (który ma wszystko, czego potrzebuję), który działa z formatami, które chcę i który zużywa niewiele zasobów.

    W moim przypadku terminal jest najlepszą opcją. Nie udaję, że jest to dla każdego, ale dobrze jest podzielić się tym, czego się uczy, prawda?

    Twoje zdrowie! Paweł.

  4.   Jorge Rocha powiedział

    To źle, że jeśli chcemy rozszerzyć system operacyjny pod GNU / linux, radzimy użytkownikom robić takie rzeczy w terminalu, ludzie chcą czegoś prostego i funkcjonalnego

    @ingjorgerocha.

  5.   dlaczegosojjuan powiedział

    Na poziomie serwera też korzystam tylko z konsoli, bez środowiska graficznego ... jest to najbardziej praktyczne i stamtąd robię wszystko (na przykład automatyzuję kopie zapasowe, jak dobrze mówisz ...), ale na maszynie, którą masz jak serwer ... co chcesz zrobić na nim screencast? hehe..ffmpeg jest bardzo ważny, ale myślę, że kwestia konsoli powinna przejść na dalszy plan w zależności od dystrybucji.
    Ponieważ mamy tak wiele różnych dystrybucji w świecie Linuksa, a konsola jest wystarczająco dopracowana, aby działać poprawnie we wszystkich sytuacjach (jest raczej prawie nieomylna ...), powinniśmy zacząć ulepszać aplikacje dla publiczności, zacząć je polerować, kodować i aspekt graficzny ... czego się dziś domaga.
    Mamy dość archaiczne i porzucone projekty linuksowe, wszyscy wiemy, że ... dobrym przykładem dla mnie jest, dlaczego nie ma już pliku wykonywalnego, który pozwala na pobranie programu na pendrive i po prostu dwukrotne kliknięcie i prosty instalacja poza wymaganiem repozytoriów (a więc sieci) .. nie ma APTonCD, to też jest nieaktualne .. potrzebujemy standardu, ".tux" lub czegoś podobnego do ".exe" systemu Windows. Czy to kwestia miejsca? .. w systemie Windows plik wykonywalny Gimp zajmuje 72 MB, a ten sam dla systemu Linux (.deb) - 4,2 MB ... dlaczego tak jest? Cóż, ponieważ sam program Gimp, w Windowsie towarzyszą mu wszystkie biblioteki, aby upewnić się, że program działa po zainstalowaniu ... w Linuksie moglibyśmy mieć coś podobnego, plik wykonywalny zajmowałby więcej, stracilibyśmy przewagę rozmiaru ale zyskujemy na przenośności (i więcej dzięki pamięciom tak dużym, że nosimy dzisiaj w kieszeniach ... jaką różnicę ma noszenie 4 MB niż 72 MB, skoro prawie każdy z nas ma pendrive 8 GB?)
    Wszystkie te rzeczy trzeba dopracować ... system jest stabilny, ma świetne wsparcie i kompatybilność ze sterownikami ... dlaczego nie poprawimy tego, co jest? ... jeśli ktoś jest do tego zachęcony, zaczynamy projekt wykonywalny hehe.!

  6.   ukryj powiedział

    Uhm ... cóż, ludzie, którzy kochają konsolę, nie kochają jej, ponieważ drogi przyjacielu, kochają ją, ponieważ dzięki niej wiele rzeczy można zautomatyzować, na przykład na poziomie serwera (chociaż tak nie jest).

  7.   dlaczegosojjuan powiedział

    Szczerze mówiąc, konsola jest bardzo przydatna ... ale są programy z pewnym GUI, które używają ffmpeg i są bardziej atrakcyjne i konstruktywne dla potencjalnych nowych użytkowników Linuksa ... Polecam RecordMyDescktop, który jest w repozytoriach prawie wszystkich dystrybucji. Wiem jest wielu ludzi, którzy kochają konsolę, ale to musi być zakończone na tyle, na ile to możliwe ... Linux musi być skoncentrowany na pulpicie i możliwym użytkowniku końcowym, który zasadniczo chce tego, interfejsu graficznego i, jeśli to możliwe, pięknego i praktycznego. . czy to takie trudne? że nie możemy pozwolić sobie na to, aby nas nadepnąć… Linux ma ogromny potencjał i musimy go wykorzystać!
    Mimo wszystko to świetny program! Dobry post ^^

  8.   dlaczegosojjuan powiedział

    Prawda jest taka, że ​​tak, wspaniale jest dzielić się tym, czego się uczymy ... To nie jest krytyka w dewaluacyjnym sensie postu, ale krytyka tego, dlaczego więcej ludzi nie używa Linuksa ... cokolwiek mówią, konsola powinna zostać zredukowana do drugiej płaszczyzny, aby ustąpić miejsca udogodnieniom graficznym (nie oznacza to, że wykluczona jest możliwość robienia rzeczy przez konsolę, ale że kto chce z niej korzystać, a kto nie, no cóż ...)
    Pod koniec dnia to, co się sprzedaje, uderza w łatwość obsługi systemu operacyjnego ... Linux jest wewnętrznie niepowstrzymany, ale jeśli dodamy do tego łatwość obsługi i intuicyjne interfejsy ... zdobywamy użytkowników i to przynosi korzyści rozwój społeczności, różne programy, wsparcie ze strony firm zajmujących się grami wideo, a tym samym określonego sprzętu (powiedzmy kart graficznych ...), tworzenie specjalistycznego oprogramowania, które obecnie istnieje tylko na Windows / Mac ... Nie wiem, myślę, że to jest w planie 15M ... wszystko bardzo ładne, ale teraz czas trochę zmienić kurs ... i trochę powiem!

    Cóż, standardowy projekt plików wykonywalnych Linuksa wciąż trwa, jeśli ktoś to czyta i chce, żebyśmy zaczęli współpracę, oto mój e-mail, nie ukrywam hehe (whysoyjuan@gmail.com)

    Pozdrowienia i mam nadzieję, że zobaczę tutaj więcej komentarzy ... czy to krytyka, czy pochwała, faktem jest, że musimy porozmawiać. Xao

  9.   Użyjmy Linuksa powiedział

    Dobry! Dobry wkład.
    Przytulić! Paweł.

  10.   Gerardo powiedział

    Z czego składa się ten program ... bądź ostrożny, nie mam dużej wiedzy na ten temat!

    1.    użyjmy Linuksa powiedział

      Zwykle służy do konwersji filmów. W tym przypadku pokazujemy, jak za jego pomocą nagrywać swój pulpit i na przykład zrobić samouczek wideo.
      Przytulić! Paweł.

  11.   tarribalis powiedział

    Dziękuję Ci. W rozdzielczości, np. 1280X800, znak X musi być pisany wielką literą, aby polecenie ffmpeg działało.