Mam wideo w formacie mp4 z częstotliwością klatek .33
(1 klatka przez 3 sekundy). Chcę zwiększyć częstotliwość klatek do 5 klatek / s. Próbowałem poniższego polecenia, ale nic nie robi:
ffmpeg -i <input.mp4> -r 5 <output.mp4>
Masz pojęcie, dlaczego ffmpeg ignoruje -r
opcję?
Odpowiedzi:
Wiem, że to stare pytanie, ale żadna z obecnych odpowiedzi nie jest już zalecana.
Remuxing bezstratny (wideo)
Jak zauważono w komentarzach, istnieje sposób, aby to zrobić, gdy wideo nie musi być ponownie kodowane. Wymaga przebudowania pliku do innego formatu kontenera MKV, a następnie z powrotem do MP4. Oto przykład, który zmienia wideo na 12 klatek na sekundę:
Jeśli film zawiera dźwięk można również zwolnić że się bez zmiany wysokości dźwięków, ale to nie konwersja bezstratna. W poniższym przykładzie założono, że wideo źródłowe miało 24 klatki / sekundę, więc dźwięk musiał zostać spowolniony do połowy (0,5) za pomocą filtra atempo ffmpeg .
Poradnik FFMPEG Wiki
Oto wskazówki z wiki ffmpeg . Pamiętaj, że wszystkie te opcje wymagają ponownego kodowania wideo.
Przyspieszenie / spowolnienie wideo
Możesz zmienić prędkość strumienia wideo za pomocą filtra wideo setpts. Zwróć uwagę, że w poniższych przykładach strumień audio nie jest zmieniany, więc najlepiej byłoby wyłączyć go za pomocą opcji -an.
Aby podwoić prędkość wideo, możesz użyć:
Filtr działa poprzez zmianę znacznika czasu prezentacji (PTS) każdej klatki wideo. Na przykład, jeśli na znacznikach czasowych 1 i 2 wyświetlane są dwie kolejne klatki, a chcesz przyspieszyć wideo, te znaczniki czasu muszą mieć odpowiednio wartość 0,5 i 1. Dlatego musimy je pomnożyć przez 0,5.
Zauważ, że ta metoda spowoduje upuszczenie klatek w celu osiągnięcia pożądanej prędkości. Można uniknąć pomijania klatek, określając wyższą wyjściową częstotliwość klatek niż dane wejściowe. Na przykład, aby przejść od wejścia 4 FPS do takiego, który jest przyspieszony nawet czterokrotnie (16 FPS):
Aby spowolnić wideo, musisz użyć mnożnika większego niż 1:
Gładki
Możesz wygładzić wolne / szybkie wideo za pomocą filtra wideo minterpolate. Jest to również znane jako „interpolacja ruchu” lub „przepływ optyczny”.
Inne opcje obejmują slowmoVideo i Butterflow. Przyspieszenie / spowolnienie dźwięku
Możesz przyspieszyć lub spowolnić dźwięk dzięki filtrowi audio atempo. Aby podwoić prędkość dźwięku:
Filtr atempo ogranicza się do używania wartości z zakresu od 0,5 do 2,0 (więc może spowolnić do nie mniej niż połowy oryginalnej prędkości i przyspieszyć do nie więcej niż dwukrotności wejściowej). W razie potrzeby możesz obejść to ograniczenie, łącząc ze sobą wiele filtrów atempo. Następujące z czterokrotnie większą prędkością dźwięku:
Za pomocą złożonego wykresu filtru możesz jednocześnie przyspieszyć wideo i audio:
źródło
mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
Zmień ilość klatek na sekundę na pojemniku MKV . Możesz przełączyć na MKV i wrócić do MP4, lub znaleźć narzędzie, które zrobi to bezpośrednio dla MP4. xkodowanie wideo jest bardzo obciążające procesor i powoduje straty, więc jest to okropna opcja.Jeśli plik wejściowy nie ma prawidłowej liczby klatek na sekundę, może być konieczne jawne ustawienie go
źródło
Zmienioną liczbę klatek na sekundę można uzyskać tylko wtedy, gdy plik wejściowy zostanie sklasyfikowany jako plik „surowy”:
Bez określenia
-f h264
, domyślnie będzie to 25 fps i nie będzie można go zmienić. Najwyraźniej było tak dlatego, że w strumieniu brakowało jakichkolwiek informacji o liczbie klatek na sekundę i jest to domyślna liczba klatek na sekundę ffmpeg.Najwyraźniej, gdy użyjesz
-r
jako opcji wyjściowej, powielają lub upuszczają klatki, więc wideo jest odtwarzane z tą samą prędkością - w tym przypadku nie to, czego chcesz! Ale zmiana wejściowej liczby klatek na sekundę spowoduje przyspieszenie lub zwolnienie wideo bez utraty lub powielenia klatek.źródło
Taka cecha - zmiana liczby klatek na sekundę - nazywa się „dostosowującą się” i jest często używana do tworzenia zwolnionego lub szybkiego przewijania, na przykład pokazania wzrostu rośliny w ciągu kilku minut. ffmpeg nie zezwala na nadpisywanie / zmienianie liczby klatek na sekundę bez ponownego kodowania . Jeśli tak się stanie, czas trwania ulegnie zmianie, a dźwięk nie będzie zsynchronizowany, chyba że zostanie osobno naprawiony. Ale obawiam się, że dźwięk nie jest interesujący w twoim przypadku z liczbą klatek na sekundę .33
Chcesz być zgodny, ponieważ po prostu chcesz zmienić ilość klatek na sekundę, ale ffmpeg ignoruje
-r
po cichujeśli liczba klatek na sekundę jest określona w pliku wejściowym. Ponieważ plik wejściowy ma format .mp4, jego szybkość klatek ma pierwszeństwokiedy ponowne kodowanie nie jest potrzebne. Do tego potrzebujesz innego narzędzia: mencoder.-r
Zakładając, że plik wejściowy nie zawiera dźwięku - prawdopodobnie prawdziwy dla każdego filmu z szybkością 0,33 klatek na sekundę - potrzebujesz:
Zauważ, że domyślnie mencoder produkuje dane wyjściowe w formacie AVI.
źródło
r
jest określony jako przełącznik wyjściowy, ffmpeg będzie generować dane wyjściowe przy określonej liczbie klatek na sekundę, niezależnie od liczby klatek na sekundę na wejściu. Jeślir
jest określony jako przełącznik wejściowy, ffmpeg będzie duplikować lub upuszczać ramki w razie potrzeby, aby podać określoną liczbę klatek na sekundę sygnału wejściowego do filtra / kodera.r
opisujesz, gdy jest przełącznikiem wejściowym, jest sprzeczne z moim wcześniejszym eksperymentem w formacie .mp4, notatką Malvineousa (na tej stronie) i opisem błędu 403 trac.ffmpeg.org/ticket/403 ; Twój opis, kiedyr
jest używany na wyjściu, ma miejsce podczas ponownego kodowania, podczas gdy scenariusz OP wydaje się być zgodnym przypadkiem (naprawić szybkość klatek bez ponownego kodowania) przez fakt, że miał 0,33 klatek na sekundę.r
fps.-r
. To użycie nie mogło wpłynąć na moje wcześniejsze eksperymenty w odpowiedzi na OP, ponieważ myśląc o zgodnym przypadku, nigdy nie upuściłem parametru kopiowania z ffmpeg, a-r
zatem jest ignorowany. Napisałem prośbę o dodanieNajszybszym sposobem jest utworzenie pliku BAT w katalogu z następującymi wierszami:
Musisz mieć mkvmerge i ffmpeg w tym samym katalogu. Automatycznie zmienia każdy plik MP4 w kilka sekund bez utraty jakości.
źródło