Nagrywam pulpit za pomocą avconv (aka ffmpeg), a następnie skaluję go do 720p.
Niedawno dodałem do mojego skryptu, aby mogli wybrać okno za pomocą xwininfo i zapisze je konkretnie.
Jednak jeśli format wyjściowy nie jest podzielny przez 2, koder wariuje i nie otrzymuję mojego wideo.
Czy istnieje sposób, aby to naprawić wewnątrz ffmpeg, więc nie muszę wykonywać ręcznej matematyki w bash, aby ustawić wartości skali?
Czy jest możliwe, aby filtr skali odejmował / dodawał jeden do szerokości / wysokości, jeśli są nierówne? (okrągły?)
Czy można zastosować inny filtr po oryginalnej skali, który mógłby to osiągnąć? (Spowodowałoby to zaokrąglenie filmów o nierównym rozmiarze wejściowym i braku skalowania)
#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@
Niektóre stare listy mailingowe sugerują round()
funkcję, której można użyć w filtrze, ale wydaje mi się, że nie mam poprawnej składni. Jeśli to działa, scale=round(iw,2):round(ih,2)
zastosowany na końcu filtr rozwiązałby wszystkie moje problemy naraz. iw
i ih
wydaje się, że nie działa.
ceil
Zamiast tego używam,trunc
aby uzyskać wyższy numer pary, jak w przypadku 16: 9 480pW rzeczywistości filtr może obsłużyć go bezpośrednio. Musisz tylko przekazać
-2
zamiast-1
do filtra: npByłem zaskoczony, gdy dowiedziałem się o tym w raporcie o błędach sprzed 3 lat .
źródło
Po wielu eksperymentach wygląda na to, że następujący filtr zastosowany po tym, jak inne filtry skalują, zaokrągli szerokość i wysokość do 2.
Zasadniczo jest to dzieląca, okrągła, mnożąca rzecz, po prostu nie miałem właściwej składni.
źródło