Jakie parametry kompresji wideo H.264 / H.265 zapewniają jakość odpowiadającą DVD przy lepszej kompresji?

11

Mam pudełko dysków DVD, których chcę się pozbyć, a jednocześnie chcę je zachować, konwertując je na pliki MP4 i przechowując je na dysku twardym.

Biorąc pod uwagę wyższość współczesnych algorytmów kompresji H.264 AVC i H.265 HEVC nad standardem DVD MPEG2, mam nadzieję zaoszczędzić miejsce na dysku twardym poprzez kompresję wideo przy jednoczesnym zachowaniu ~ 99% oryginalnej jakości DVD.

Co

  • Parametry kompresji H.264 (FFMPEG + libx264)
  • Parametry kompresji H.265 (FFMPEG + libx265)

czy powinienem użyć, aby osiągnąć swój cel?

Przez parametry rozumiem wartości CBR / CRF, ustawienie wstępne (brak bardzo słabego / placebo), flagi itp.

PS: Wolałbym ograniczyć przypadek użycia -pix_fmt yuv420pi -profile:v baseline -level 3.0upewnić się, że plik będzie odtwarzany poprawnie na wszystkich urządzeniach, w tym na starych urządzeniach opartych na starych układach dekodera sprzętowego. -gPożądane jest również użycie nieco podwyższonej częstotliwości ramek I (przy użyciu parametru), aby ułatwić korzystanie z mediów o niskiej prędkości i opóźnieniu.

W przypadku HEVC wolałbym również używać parametrów zapewniających płynne odtwarzanie z przyspieszeniem sprzętowym na urządzeniach, które go obsługują, ale nie chcę skupiać się na tym ograniczeniu, ponieważ nie widziałem żadnych urządzeń oferujących H.265 z akceleracją sprzętową w ogóle dekodowanie.

Ivan
źródło

Odpowiedzi:

14

Pamiętaj, że w tym celu zawsze powinieneś używać najnowszej wersji ffmpeg , a najlepiej skompilować ją samodzielnie . Daje to dostęp do najnowszych bibliotek libx265 i libfdk-aac do kodowania dźwięku.

Ponadto oszczędności w zakresie szybkości przesyłania danych będą dość drastyczne, jeśli przejdziesz z dysku DVD ~ 10 MBit / s do około 1–2 MBit / s dla wideo H.264 i 0,5–1 MBit / s dla wideo H.265. Zmiana jakości w poniższych krokach może wpływać na przepływność, ale nadal redukcja danych powinna być znacząca.

H.264

Do kontroli jakości / szybkości chcesz używać trybu CRF w libx264 zamiast stałego bitrate. Korzystanie z CRF zapewnia zachowanie średniej jakości, niezależnie od oryginalnej rozdzielczości wideo lub jej złożoności. Stała szybkość transmisji jest naprawdę przydatna tylko wtedy, gdy ogranicza Cię nośnik transmisji (np. Prędkość dysku twardego, przepustowość Internetu).

Wybór wartości CRF to trudna część. Wymaga to spojrzenia na wynik. Domyślne ustawienie dla libx264 (23) oferuje całkiem dobry kompromis między rozmiarem a jakością. Ale biorąc pod uwagę, że twoje oryginalne źródło jest już skompresowane (i nie ma bardzo dobrej jakości w porównaniu do Blu-ray), możesz chcieć zmienić CRF, aby był nieco niższy, na przykład 20. Zwiększy to potrzebną przepływność o około jedną trzecią .

Wybierz ustawienie wstępne zgodnie z tym, jak długo chcesz czekać. slowwydaje się tu dobrą wartością.

ffmpeg -i input \
-c:v libx264 -crf 20 -pix_fmt yuv420p \
-x264-params keyint=240:min-keyint=20 \
-preset:v slow -profile:v baseline -level 3.0 \
-c:a libfdk_aac -vbr 4 \
output.mp4

Wbudowanego kodera AAC ffmpeg można użyć, jeśli libfdk-aac nie jest dostępny. Użyj -c:a aac -strict experimental -b:a 128kzamiast -c:a libfdk_aac -vbr 4.

H.265

Badania sugerują, że użycie HEVC doprowadzi do 74% oszczędności bitrate w porównaniu do H.264. Jest to oparte na subiektywnych danych oglądania sekwencji Ultra-HD. Oczywiście zależy to od czasowej złożoności treści źródłowej, a ilość zapisanych danych nie będzie tak wysoka w przypadku trudnych do zakodowania sekwencji. Tak czy inaczej, możesz bezpiecznie powiedzieć, że 50% redukcja danych jest absolutnie możliwa.

Domyślny CRF dla libx265 to 28. Korzystanie z tej samej zawartości źródłowej powoduje około połowę bitrate w porównaniu do libx264 w CRF 23. Jest to niezależne od rzeczywistej bitrate, tj. Jeśli wersja H.264 zajmuje 1,5 MBit / s, wtedy H.265 zużyje około 750 kBit / s, ale jest to 750 kBit / s vs. 350 kBit / s dla innej sekwencji. Uruchomiłem go na kilku sekwencjach w rozdzielczości DVD-PAL i nie byłem w stanie odróżnić jakości.

ffmpeg -i input \
-c:v libx265 -pix_fmt yuv420p \
-x265-params crf=28:keyint=240:min-keyint=20 \
-preset:v slow \
-c:a libfdk_aac -vbr 4 \
output.mp4

Aby uzyskać więcej informacji, oto odpowiednie zasoby:

slhck
źródło
Dziękuję za dobrą odpowiedź. Co przy okazji oznacza keyint?
Ivan
1
keyintW x264 / X265 jest odstęp między ramkami IDR, czyli odstępu między klatkami kluczowymi, w którym dekoder może odświeżania. Pomiędzy nimi mogą występować klatki I bez klatki kluczowej, np. Gdy nastąpi wycięcie sceny. Jest to równoważne z -gparametrem, jeśli się nie mylę.
slhck
BTW, @slhck, rzecz, która zaskoczyła mnie w twojej odpowiedzi - uwaga, którą poświęcasz wyborowi biblioteki kodowania AAC. Kiedyś myślałem, że wszystkie są prawie takie same i nie dają żadnej różnicy, że rzeczy są proste w części audio (wystarczy wybrać bitrate i przejść i że wszystkie główne stratne kodeki, takie jak MP3, AAC i Vorbis, brzmią prawie lub dokładnie to samo przy 128 kbps i więcej). Czy masz na myśli wyraźną różnicę między libfdk-aac a zwykłym aac?
Ivan
1
@Ivan Kompilacje Zeranoe powinny zdecydowanie pozwolić ci robić -c:a aac -strict experimentaltak, jak wskazano w mojej odpowiedzi. I zgadzam się, nie próbowałbym zbudować go w systemie Windows.
slhck
2
@Ivan (pierwszy komentarz): Patrz ffmpeg-wiki : „Na podstawie jakości produkowanej od wysokiej do niskiej: libopus > libvorbis >= libfdk_aac > aac > libmp3lame >= libfaac >= eac3/ac3 > libtwolame > vorbis > mp2 > wmav2/wmav1Tylko dla AAC: (Ponieważ jest trochę mylący, z dostępnymi 3 koderami): libfdk_aac > aac > libfaacZnak> = oznacza większy lub taki sam jakość."
Golar Ramblar,