Ściągawki i ustawienia wstępne, które faktycznie działają z FFmpeg 1.0?

28

Próbowałem wielu „ściągnięć” dostępnych gdzie indziej, ale prawie wszystkie są nieaktualne i po prostu NIE będą działać z najnowszą wersją FFMpeg.

Czy ktoś może wskazać mi ustawienia, które będą działać z najnowszą wersją FFMpeg?

Interesują mnie przede wszystkim następujące kodeki

H.264, wstępne ustawienia niskiej średniej i wysokiej jakości

jak również

ProRes, ustawienia wstępne niskiej, średniej i wysokiej jakości

Bachalo
źródło

Odpowiedzi:

49

FFmpeg nie zawiera już ustawień i profili opartych na plikach tekstowych dla libx264, tzn. Tego, co użyłeś z tą -vpreopcją. Zostały one amortyzowane i usuwane na rzecz dostępu do aktualnych ustawień X264, profile (i melodie) z -preset, -profile:vi -tuneopcje. Stare pliki tekstowe emulowały tylko oficjalne ustawienia wstępne i profile x264, a ze względu na kilka ograniczeń nie mogły oferować pełnej funkcjonalności zapewnianej przez nowy system. Jest również o wiele łatwiejszy w utrzymaniu.

Ponadto wiele koderów ma własne oddzielne opcje; zwane także „opcjami prywatnymi”. Będziesz musiał sprawdzić opcje kodera audio i wideo dla typowych kodeków w dokumentacji online FFmpeg, lub sprawdzić wyjście ffmpeg -h fullpełnej listy obsługiwanych opcji. Na przykład x264 wyświetla listę opcji libx264 AVOptionsw wynikach pełnej pomocy.

Jeśli twój ffmpeg obsługuje, -presetto nie należy używać żadnych wstępnych ustawień plików tekstowych, a FFmpeg nie jest już dostarczany z innymi niż niektóre niestandardowe ustawienia wstępne dla iPoda. Jest powszechnym błędnym przekonaniem, że wstępne ustawienia tekstu można po prostu skopiować z dowolnego miejsca i używać z dowolnym programem ffmpeg. To nieprawda i spowoduje uszkodzenie.


Zasadniczo ustawienia wstępne pozwoliły na wykonanie następujących czynności:

Kontrola jakości

Jakość jest kontrolowana albo przez określenie szybkości transmisji -b:v(dla wideo) lub -b:a(dla audio), albo poprzez podanie dowolnej innej metody kodowania obsługiwanej przez kodek.

Dla x264 istnieją różne metody kodowania, przy czym metoda Constant Rate Factor jest najbardziej zaawansowana. Powoduje zmienną przepływność, ale ogólnie dobrą jakość w jednym przejściu. Wartości CRF wynoszą od 0 do 51, ale rozsądne wartości mieszczą się w przedziale od 19 do 26, w zależności od źródła i pożądanej jakości. 23 jest domyślnie, więc możesz na przykład wybrać 18 dla „wysokiej jakości” i 28 dla „niskiej jakości”, cokolwiek to dla ciebie znaczy.

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

x264 ma również inne metody kodowania , ale tutaj nie wchodzi to w zakres.

Ogranicz profil H.264

Te profile definiują zestaw funkcji, których koder może użyć, aby dopasować możliwości określonego dekodera. W najnowszej wersji FFmpeg użyj następującej składni, aby określić profil, gdzie może być profil baseline, mainlub high:

ffmpeg -i input.mp4 -c:v libx264 -profile:v baseline output.mp4

Aby uzyskać więcej informacji i kiedy należy użyć tego profilu, zobacz: Jakie są różnice między profilami H.264?

Wybierz kodowanie x264 preset

Te ustawienia wstępne wpływają na szybkość kodowania. Korzystanie z wolniejszego ustawienia predefiniowanego zapewnia lepszą kompresję lub jakość w zależności od rozmiaru pliku, natomiast szybsze ustawienia wstępne zapewniają gorszą kompresję. Ogólnie rzecz biorąc, powinieneś po prostu użyć ustawienia wstępnego, na które możesz sobie pozwolić. Presets może być ultrafast, superfast, veryfast, faster, fast, medium(domyślnie), slowa veryslow. Oto przykład:

ffmpeg -i input.mp4 -c:v libx264 -preset slow output.mp4

Koduj bezstratne wideo

Jest to możliwe poprzez podanie CRF równej 0, więc po prostu użyj -crf 0:

ffmpeg -i input.mp4 -c:v libx264 -crf 0 output.mp4

Na koniec pomówmy szybko o ProRes. ProRes akceptuje albo stałą bitrate -b:v, albo możesz określić profil, który powinien być wartością z zakresu od 0 do 3 , przy czym szybkości bitów są wybierane zgodnie z profilem. Wyższy oznacza lepszy:

ffmpeg -i input.mp4 -c:v prores -profile:v 0 output.mov

Ffmbc Wiki sugeruje, że nazwy profili mogą być używane - to jednak nie w FFmpeg 1.0.

slhck
źródło
Co powinienem zrobić, aby zmniejszyć ryzyko niepowodzenia konwersji, dzieje się to losowo, czasem tak się nie dzieje
FlyingAtom
@FlyingAtom Nie słyszałem jeszcze o „niepowodzeniu konwersji”. Jeśli masz konkretne pytanie z powtarzalnym problemem, zadaj nowe pytanie: superuser.com/questions/ask
slhck
Więc co byś efektywnie skończyłby, gdyby wszystko, co dostarczyłeś, było ffmpeg -i input.mp4 -c:v libx264 output.mp4? CRF: 23 i preset: średni?
Drazen Bjelovuk
1
@Drazen Tak, zgadza się.
slhck
Twoje zdrowie! -------
Drazen Bjelovuk
20

Zrobiłem test, w którym transkodowałem (używając kodowania libx264 .mp4) wysokiej jakości wideo z kamery Sony przy użyciu pełnego zakresu wstępnie ustawionych wartości (oprócz placebo) w zakresie wartości CRF (18, 21, 24 i 27 ). Chciałem wiedzieć, co dałoby mi najlepszą kombinację szybkości kodowania, jakości wyjściowej i rozmiaru pliku.

Dla każdej wartości CRF podałem każdej operacji transkodowania wynik za czas kodowania (np. Dla CRF = 18, czas ultraszybkiej wartości zadanej 5,7 sekundy uzyskał wynik 1,0, czas bardzo powolny 162 sekund otrzymał 0, ze wszystkimi inne wyniki skalowane pomiędzy). Podobnie obliczyłem wyniki rozmiaru pliku wyjściowego, oczywiście dając najmniejszemu plikowi najlepszy wynik. Następnie dodałem dwa wyniki dla „połączonego” wyniku prędkości / rozmiaru.

W przypadku każdej z czterech wartości CRF „bardzo szybkie” ustawienie wstępne okazało się bezkonkurencyjnym zwycięzcą, z prawie doskonałymi wynikami 1,94 (dla CRF 18 i 21), 1,96 (CRF 24) i 1,97 (CRF 27). Uważam za bardzo ciekawe, że „bardzo szybki” za każdym razem produkował prawie najmniejszy rozmiar pliku , tracąc tylko do „bardzo wolnego” i nigdy za bardzo.

Jedną z różnic, które zauważyłem wśród różnych wstępnie ustawionych wartości, było to, że system operacyjny (Windows 7) dawałby mi różne miniatury. Szybsze ustawienia wstępne pokazywałyby miniaturę kilka sekund w filmie, przy czym miniatury dla wolniejszych ustawień wstępnych odzwierciedlałyby początkowe klatki filmu. To nie jest dla mnie ważne; dowiedziałem się, że „ustawienie predefiniowane bardzo szybkie” wydaje się łatwym wyborem.

Oto moje wyniki (jako migawka arkusza kalkulacyjnego Excel):
migawka Excela

Oto arkusz kalkulacyjny Excel jako tekst CSV:

CRF,Preset,Seconds,score,MB,score,totalscore
18,1_ultrafast,5.7,1.00,59.5,0.09,1.09
18,2_superfast,8.4,0.98,62.3,0.00,0.98
18,3_veryfast,10.8,0.97,30.9,0.98,1.94
18,4_faster,16.0,0.93,33.5,0.89,1.83
18,5_fast,24.0,0.88,36.8,0.79,1.68
18,6_medium,29.1,0.85,34.9,0.85,1.70
18,7_slow,48.1,0.73,33.9,0.88,1.61
18,8_slower,84.9,0.49,33.0,0.91,1.40
18,9_veryslow,162.0,0.00,30.1,1.00,1.00
21,1_ultrafast,5.7,1.00,38.0,0.00,1.00
21,2_superfast,7.9,0.98,35.0,0.15,1.14
21,3_veryfast,10.0,0.97,19.0,0.97,1.94
21,4_faster,14.2,0.94,21.0,0.87,1.80
21,5_fast,19.9,0.89,23.0,0.77,1.66
21,6_medium,24.6,0.86,22.0,0.82,1.67
21,7_slow,43.1,0.72,21.0,0.87,1.58
21,8_slower,69.8,0.51,20.5,0.89,1.41
21,9_veryslow,137.3,0.00,18.4,1.00,1.00
24,1_ultrafast,5.5,1.00,24.9,0.00,1.00
24,2_superfast,7.5,0.98,21.4,0.27,1.25
24,3_veryfast,9.3,0.97,12.0,0.99,1.96
24,4_faster,13.2,0.93,14.0,0.84,1.77
24,5_fast,17.4,0.90,15.0,0.76,1.66
24,6_medium,21.0,0.87,14.4,0.81,1.67
24,7_slow,37.3,0.72,14.0,0.84,1.56
24,8_slower,62.2,0.51,13.0,0.92,1.42
24,9_veryslow,121.1,0.00,11.9,1.00,1.00
27,1_ultrafast,5.5,1.00,16.8,0.00,1.00
27,2_superfast,7.4,0.98,13.6,0.38,1.36
27,3_veryfast,9.0,0.97,8.4,1.00,1.97
27,4_faster,12.6,0.93,10.1,0.80,1.73
27,5_fast,15.8,0.90,10.4,0.76,1.66
27,6_medium,18.8,0.87,10.0,0.81,1.68
27,7_slow,34.1,0.73,9.8,0.83,1.56
27,8_slower,59.6,0.48,9.0,0.93,1.41
27,9_veryslow,109.7,0.00,8.4,1.00,1.00
Ted W.
źródło
3
Wiem, że opcje formatowania Superużytkownika są mierne, ale może być pomocne, jeśli opublikujesz dane jako tekst - prawdopodobnie używając formatowania kodu.
Scott
1
Fascynujący. Jest również szybszy na moim komputerze. Dzięki!
joeytwiddle
1
Muszę przyznać, że podejrzewałem twoje wyniki podejrzliwie, ale powtórzyłem test i uzyskałem v. Podobne wyniki, używając ffmpeg w wersji 3.3.2-1 na klipie filmowym o rozdzielczości 2 min 1080p. W rzeczywistości bardzo szybko wygenerował najmniejszy rozmiar pliku w 60% przypadków, a drugi w 40% przypadków (bardzo niewiele). Odtąd będę używać bardzo szybkiego dla wszystkich moich kodów wraz z dość niską wartością CRF (18, 19, 20), ponieważ bardzo szybki był tylko trochę wolniejszy z niższymi wartościami CRF niż z wyższymi. Dzięki, zaoszczędziłeś mi dużo czasu. Surowe dane i skrypt w komentarzu poniżej.
Mattst
1
Kontynuując od powyższego komentarza ... Oto moje nieprzetworzone dane - CRF od 18 do 27 i skrypt bash Linux / UNIX, który napisałem, aby uruchomić kodowanie (na wypadek, gdyby ktoś chciał przeprowadzić podobny test).
Mattst
1
Oto kilka świetnych postów na blogach na te tematy, z testami przeprowadzonymi dla x264 i x265 (wyniki są, jak można się spodziewać , bardzo różne dla każdego)
forresthopkinsa