Zamiast zapewnienia stałej liczby klatek na sekundę dla FFMPEG / libx264 (-r / -framerate), chciałbym określić zmienną liczbę klatek na sekundę o wartości MAKSYMALNEJ i pozwolić, aby libx264 zmniejszał liczbę klatek na sekundę według własnego uznania. Chodzi o to, aby uzyskać dodatkową kompresję, gdy istnieje coś w rodzaju wydłużonej klatki nieruchomej (co zdarza się DUŻO w moich źródłowych filmach).
Zdaję sobie sprawę, że predykcyjna lub dwukierunkowa ramka MPEG kompresuje się naprawdę dobrze, ale możliwe jest również, że źródłowa częstotliwość klatek jest mniejsza niż ta, do której zamierzam transkodować (możliwe, że WIĘKSZY strumień!).
video
ffmpeg
compression
framerate
Mark Gerolimatos
źródło
źródło
Odpowiedzi:
Sfrustrowany faktem, że nie znalazłeś odpowiedzi, zamierzałem przynajmniej odpowiedzieć na pytania innych osób dotyczące włączenia VFR (nie V B R) z FFMPEG.
Odpowiedzią na to jest dziwnie nazwana
-vsync
opcja. Możesz ustawić kilka różnych opcji, ale jedną z nich jest „2” lubvfr
. Ze strony podręcznika:Jednak nie mam dość reputacji, aby opublikować komentarz, aby tylko odpowiedzieć na to „pytanie cząstkowe”, które wszyscy wydają się mieć. Ale miałem kilka pomysłów, o których nie byłem szczerze optymistą ... Ale pierwszy, który wypróbowałem, naprawdę zadziałał . Więc.
Po prostu musisz połączyć
-vsync 2
opcję z-r $maxfps
opcją, oczywiście tam, gdzie zamieniasz$maxfps
ją z maksymalną możliwą liczbą klatek na sekundę! I DZIAŁA! Nie powiela ramek z pliku źródłowego, ale upuszcza ramki, które powodują, że plik przekracza maksymalną liczbę klatek na sekundę!Domyślnie wydaje się, że
-r $maxfps
sam z siebie powoduje po prostu duplikowanie / upuszczanie ramek w celu uzyskania stałego klatek i-vsync 2
sam z siebie powoduje bezpośrednie przyciąganie ramek bez faktycznego wpływu na wartości PTS.Nie byłem tym optymistą, ponieważ już wiedziałem, że
-r $maxfps
stawia to stałą liczbę klatek na sekundę. Szczerze spodziewałem się błędu lub tego, że po prostu zastosuje się do tego, co nastąpi pierwsze, ostatnie lub cokolwiek innego. Fakt, że robi dokładnie to, co chciałem, sprawia, że jestem całkiem zadowolony z programistów FFMPEG.Mam nadzieję, że to pomoże tobie lub komuś innemu później, jeśli nie będziesz już musiał tego wiedzieć.
źródło
-copyts
może być również pomocnyW moim rozumieniu może to być dość nieporadne, ale jest niepożądane z kilku złożonych i sprzecznych z intuicją powodów
Mimo że strumień x264 ma liczbę klatek na sekundę, szybkość klatek jest bardziej problemem na poziomie kontenera niż kodekiem.
W kodowaniu VFR z przekazywaniem będzie istniał plik tekstowy z wyszczególnieniem szybkości klatek w stosunku do liczby klatek / razy, a przy kodowaniu źródła funkcja taka jak tcfile-in lub tcfile-out przekazuje znaczniki czasu do kodu , aby zmapować lokalizacje stawek i zachować subiektywnie spójne wideo ze źródła.
Idea niskiej liczby klatek na sekundę jest logiczna, ale nie działa z kilku powodów. Chociaż x264 obsługuje VFR z pewnymi możliwościami, nie sądzę, aby istniała funkcja analizy, która różnicowałaby szybkość klatek w odniesieniu do ruchu w celu zmniejszenia rozmiaru pliku (w sposób podobny do wielu elementów sterujących przepływnością).
Źródłem jest również problem: źródła VFR domyślnie zachowają zmienność klatek, ale najwyraźniej kodowanie pliku CFR ze zmienną przepływnością (czasem dobry pomysł, szczególnie gdy potrzebna jest telecine), po prostu wytworzy tę samą CFR.
Oznacza to, że prawdopodobnie będziesz musiał ręcznie ponownie zapisać bitrate (tj. Znaczniki czasu powolnych scen zmiksowane w pliku) lub skorzystać z algorytmu dziesiętnego klatki, takiego jak dup, dedup i dokładnieDedup dla avisynth . Jeśli Twój film ma bardzo niski ruch, niektóre klatki (nawet połowa?) Zostałyby wyrzucone. Problem polega na tym, że te algorytmy nie są zaawansowane i nie dokonują dobrych wyborów na podstawie nagrań z „prawdziwego życia” co do tego, co przyczyni się do najlepszego kodowania.
Ponadto usunięcie ramek zawierających elementy takie jak ramki I i B zmniejsza ilość szczegółów dostępnych w czasie, co powoduje, że ruch wygląda „stepowy” i może zakłócać inne podstawowe parametry wideo i powodować artefakty, takie jak aliasing.
A ze względu na sposób działania kwantyzatorów, x264 faktycznie nieproporcjonalnie zmniejszy bitrate w tych scenach o niskim ruchu. Jeśli nie masz pokazu slajdów z identycznymi obrazami, nastąpi ruch (jeśli tylko ziarno i inne artefakty) i nastąpi utrata jakości, która nie byłaby widoczna bez drastycznych zmian przepływności.
I wreszcie, powodem, dla którego nie ma wielu opcji robienia tego, co chcesz, jest to, że x264 jest naprawdę dobry w zarządzaniu przepływnością za pomocą kompresji czasowej (rejestrowanie zmian w częściowych klatkach). Przejście do 1/2 klatek na sekundę nie spowoduje zmniejszenia rozmiaru pliku o połowę; 10% to prawdopodobnie realistyczny zysk, którego można oczekiwać po zwolnieniu lub animacji.
Krótko mówiąc, zmniejszenie szybkości bitowej scen statycznych niewiele zrobi dla rozmiaru pliku, ale doda wiele problemów z jakością i synchronizacją, nie wspominając o niezgodności z oprogramowaniem do edycji wideo.
Jeśli chcesz wypróbować decymator, możesz być w stanie ograniczyć maksymalną nową liczbę klatek na sekundę, używając opcji poziomów , z których każdy ma maksymalną rozdzielczość i szybkość klatek. Niestety prawdopodobnie będziesz musiał pracować przy bardzo niskich rozdzielczościach, aby uzyskać żądaną liczbę klatek na sekundę, korzystając z profili. Wraca do ręcznego edytowania częstotliwości, albo całkowicie, albo do korekcji liczby klatek, którą uważasz za zbyt wysoką. Tak czy inaczej, potrzeba żonglowania, aby utrzymać synchronizację dźwięku z nowymi ramkami, jeśli zmiany zostaną wprowadzone po procesie kodowania, gdy plik tc zostanie zachowany.
Zaletą jest to, że spędzanie czasu na optymalizacji wielu ustawień szybkości transmisji przyniesie znacznie więcej w zakresie zarządzania rozmiarem pliku i poprawi jakość wideo, zamiast powodować komplikacje przy niewielkim zysku. Zachowanie oryginalnego FPS jest prawdopodobnie najlepszym pomysłem, chyba że dążysz do standardów transmisji lub mediów. Odtwarzacze są w stanie odtwarzać zmienne szybkości transmisji (w przeciwieństwie do edytorów), a im więcej klatek w filmie, tym płynniejsze odtwarzanie i być może mniejszy rozmiar pliku, z powodu mniejszych zmian ruchu między klatkami.
Oto zbiór linków do informacji o standardach i dyskusji na forum, które powinny pomóc w tym mylącym aspekcie kodowania:
- narzędzia dziesiętne avisynth
- przełączniki fps i -r
- x264 Ogólne (plik tc, fps)
- standardy plików kodów czasowych
- Poziomy i profile
- Krótkie, jasne podsumowanie ustawień CFR / VFR (sekcja „Framerate”)
doom9, wideohelp i c dyskusje teoretyczne
1 2 3 4 5 6 7
źródło