Używam takich rzeczy:
avconv -f x11grab -s 1024x768 -r 24 -i 0:0 -deadline realtime -b 5000000 -minrate 200000 -maxrate 40000000 recording-filename-000.webm
Gdzie:
-f x11grab
- wymusza przechwytywanie ekranu „formatu” wejścia.
-s 1024x768
to rozdzielczość pliku wejściowego (inaczej obszar przechwytywania). Na przykład równa się rozdzielczości pulpitu. Jeśli jest mniejszy, obszar nagrywania będzie po lewej iu góry. W tym przykładzie wykorzystałem obszar nagrywania 1024x768.
-r 24
- częstotliwość wyświetlania klatek. Zasadniczo od 23 do 30 klatek na sekundę wykorzystywanych w prawdziwych filmach w celu zapewnienia płynnego nagrywania obrazu. Jednak w przypadku screencastu może być w porządku zmniejszyć to, aby uzyskać lepszy obraz przy niższych przepływnościach. Użyłem 24, aby zrobić zrzut ekranu z gry.
-i 0:0
jest wskazówką, aby użyć wyświetlania 0: 0 jako źródła (urządzenie jest w notacji Xorg). Jeśli masz tylko 1 monitor i domyślną konfigurację Xorg, 0: 0 będzie w większości przypadków w porządku.
-deadline realtime
- jest wskazówką do libvpx. Chcemy przechwytywania na żywo. Chcemy wydajności w czasie rzeczywistym. Dlatego libvpx zrobi to najlepiej, aby zakodować VP8 w czasie rzeczywistym. Aby to zrobić, w pewnym stopniu zamienia jakość na szybkość. Przy danej szybkości transmisji bitów jakość będzie nieco gorsza niż w nie-czasie rzeczywistym. Ale prędkość kodowania gwałtownie wzrośnie. Tak więc na moim sprzęcie może chrupnąć 1024x768 @ 24FPS, intensywne sceny, bez upuszczania żadnych ramek (choć zalecany jest mocny procesor). W tym przykładzie chciałem nagrywać na żywo w przyzwoitej jakości przy dobrym FPS i dość dużym obszarze przechwytywania. Użycie procesora przez kodek może więc stanowić problem. Właśnie dlatego ta wskazówka była naprawdę potrzebna do uzyskania dobrych rezultatów.
-b 5000000
- docelowa przepływność w bitach / sekundę. Użyłem 5Mbitów, aby uzyskać mniej więcej dobry obraz dość intensywnych scen. Kodek będzie próbował utrzymać średnią szybkość transmisji wideo w pobliżu tej wartości. Im niższa jest ta wartość, tym gorsza jakość i mniejszy plik. Możesz trochę poeksperymentować, aby dowiedzieć się, jaka szybkość transmisji bitów jest dobra dla określonych zastosowań. Usługi udostępniania wideo zmniejszą konwersję wideo, jeśli zostanie przekroczony. Jeśli masz zamiar użyć własnego serwera, od Ciebie zależy, czy zajmiesz się ruchem. Jeśli dojdzie do niedostosowania, jakość obrazu będzie zła. Zmień wartość, aby dowiedzieć się, co jest dla Ciebie najlepsze. 5-bitowe zostały przeznaczone do mniej lub bardziej przyjemnego dla oka uchwycenia na żywo intensywnych scen w grach, w których nie można łatwo zauważyć, że obraz jest nadmiernie skompresowany. Do przechwytywania nieruchomych aplikacji będziesz potrzebować znacznie mniej.
-minrate
200000 - to minimalna dozwolona przepływność dla kodeka. W zależności od natury rzeczy, którą chcesz uchwycić, czasami możesz chcieć zmusić minimalną prędkość transmisji, aby utrzymać rozsądnie wyglądający obraz bez względu na wszystko. Czasami heurystyka kodeków może zmniejszyć przepływność znacznie poniżej wartości, których możesz chcieć, co daje zły obraz w niektórych scenach. Ta opcja pozwala zmusić kodek do utrzymania minimalnej przepływności, nawet jeśli kodek uważa, że scena jest prosta i przepływność może zostać porzucona. Wysoka wartość tego parametru może zwiększyć rozmiar pliku, uniemożliwiając kodekowi użycie niższych przepływności.
-maxrate 40000000
- Ta wartość kontroluje maksymalną szybkość transmisji serii w intensywnych scenach. Użyłem naprawdę wysokiej wartości, aby pozwolić kodekowi pójść znacznie wyżej niż pożądana średnia, jeśli uważa, że wyższa prędkość jest obowiązkowa, aby utrzymać przyzwoitą jakość na niektórych scenach. Aby uzyskać dobrze wyglądający obraz w każdych warunkach, pożądane jest, aby ustawić go wystarczająco wysoko (40 Mb to prędkość podobna do BlueRay i załatwi sprawę). Z drugiej strony, jeśli zamierzasz przesyłać strumieniowo za pomocą własnego serwera, musisz zmniejszyć tę wartość kosztem pewnej jakości obrazu w intensywnych scenach. W przeciwnym razie serwer może nie poradzić sobie z żądaną szybkością transmisji bitów, ponieważ nie jest w stanie dostarczyć jej użytkownikom w czasie rzeczywistym. Następnie gracz napotkałby niedopełnienie bufora (co jest denerwujące). Usługi udostępniania wideo same zajmą się tym i zwykle konwertują wideo w dół, aby obniżyć parametry kosztem jakości obrazu.
recording-filename-000.webm
- to nazwa pliku wyjściowego. Jeśli używasz rozszerzenia .webm, ffmpeg / avconv są wystarczająco inteligentne, aby zrozumieć, że chcesz WEBM. To TAKIE proste - avconv odgaduje pożądany format na podstawie nazwy pliku. Tak więc pliki .WEBM są wewnątrz WEBM.
To jest to - to polecenie powoduje bezpośrednie nagrywanie ekranu do pliku webm. Nie są wymagane żadne dodatkowe konwersje, a libvpx
sugeruje się, aby był tak szybki, jak to możliwe. Brak dźwięku, ponieważ nie ma specyfikacji wejścia dźwięku. To może być lub nie być to, czego chcesz. W przypadku dźwięku należy również określić źródło wejściowe dla strumienia dźwięku.
PS może to wyglądać na nieco skomplikowane, ale na koniec możesz stwierdzić, że jeden rozmiar nie pasuje do wszystkich. Aby uzyskać dobrze wyglądający obraz we wszystkich sytuacjach, możesz naprawdę chcieć użyć niektórych uchwytów do kodeków i dostosować je. Ffmpeg oferuje wszystkie uchwyty, których możesz potrzebować, i znacznie więcej. To ciężka broń do konwersji i kodowania wideo. Dlatego ten przykład jest dobrym punktem wyjścia dla tych, którzy chcą wykonać mniej lub bardziej zaawansowane kodowanie i jest gotowy do eksperymentowania, aby uzyskać naprawdę przyzwoicie wyglądające wyniki.