Apa parameter kompresi video H.264 / H.265 yang memberikan kualitas setara DVD dengan kompresi yang lebih baik?

11

Saya sudah punya sekotak disk video DVD yang ingin saya singkirkan sementara saya ingin menyimpan videonya dengan mengonversinya menjadi file MP4 untuk disimpan di hard drive.

Mempertimbangkan keunggulan algoritma kompresi H.264 AVC dan H.265 HEVC modern dibandingkan MPEG2 standar DVD, saya berharap dapat menghemat ruang hard drive dengan mengompresi video sambil menyimpan ~ 99% kualitas DVD asli.

Apa

  • Parameter kompresi H.264 (FFMPEG + libx264)
  • Parameter kompresi H.265 (FFMPEG + libx265)

yang harus saya gunakan untuk mencapai tujuan saya?

Dengan parameter yang saya maksud adalah nilai CBR / CRF, preset (no veryslow / placebo please), flags dll.

PS: Saya lebih suka membatasi kasus dengan menggunakan -pix_fmt yuv420pdan -profile:v baseline -level 3.0untuk memastikan file diputar OK pada semua perangkat termasuk perangkat lama yang mengandalkan chip decoder perangkat keras lama. Menggunakan frekuensi I-frame yang agak meningkat (menggunakan -gparameter) juga diinginkan untuk memfasilitasi penggunaan media kecepatan rendah dan latensi tinggi.

Untuk HEVC, saya juga lebih suka menggunakan parameter yang akan memastikan pemutaran dipercepat perangkat keras yang lancar pada perangkat yang mendukungnya, tetapi saya tidak bermaksud untuk fokus pada kendala ini karena saya belum melihat perangkat yang menawarkan H.265 yang dipercepat perangkat keras. decoding sama sekali.

Ivan
sumber

Jawaban:

14

Perhatikan bahwa untuk ini, Anda harus selalu menggunakan versi ffmpeg terbaru , dan lebih baik kompilasi sendiri . Ini memberi Anda akses ke libx265 dan libfdk-aac terbaru untuk pengkodean audio.

Selain itu, penghematan kecepatan data akan sangat drastis jika Anda beralih dari DVD ~ 10 MBit / dtk sekitar 1-2 MBit / dtk untuk video H.264 dan 0,5-1 MBit / dtk untuk video H.265. Mengubah kualitas pada langkah-langkah di bawah ini dapat mempengaruhi bitrate, tetapi tetap saja pengurangan data harus signifikan.

H.264

Untuk kontrol kualitas / kecepatan, Anda ingin menggunakan mode CRF di libx264 daripada bitrate konstan. Menggunakan CRF memastikan bahwa kualitas rata-rata dipertahankan, terlepas dari resolusi video asli atau kerumitannya. Bitrate konstan hanya benar-benar berguna jika Anda dibatasi oleh media transmisi (misalnya, kecepatan hard drive, throughput Internet).

Memilih nilai CRF adalah bagian yang sulit. Ini mengharuskan Anda untuk melihat output. Default untuk libx264 (23) menawarkan tradeoff yang cukup baik antara ukuran dan kualitas. Tetapi mengingat sumber asli Anda sudah dikompresi (dan tidak dengan kualitas yang sangat baik dibandingkan dengan Blu-ray), Anda mungkin ingin mengubah CRF menjadi sedikit lebih rendah, seperti 20. Ini akan meningkatkan bitrate yang dibutuhkan sekitar sepertiga .

Pilih preset sesuai dengan berapa lama Anda ingin menunggu. slowsepertinya nilai yang baik di sini.

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

Encoder AAC ffmpeg bawaan dapat digunakan jika libfdk-aac tidak tersedia. Gunakan -c:a aac -strict experimental -b:a 128ksebagai ganti -c:a libfdk_aac -vbr 4.

H.265

Penelitian menunjukkan bahwa menggunakan HEVC akan menghasilkan penghematan bitrate hingga 74% dibandingkan dengan H.264. Ini didasarkan pada data tampilan subjektif dari urutan Ultra-HD. Tentu saja, itu tergantung pada kompleksitas temporal dari konten sumber, dan jumlah data yang disimpan tidak akan setinggi untuk urutan kode yang sulit. Bagaimana pun Anda dapat dengan aman mengatakan bahwa pengurangan data 50% benar-benar mungkin.

CRF default untuk libx265 adalah 28. Menggunakan konten sumber yang sama, itu menghasilkan sekitar setengah bitrate dibandingkan dengan libx264 di CRF 23. Ini terlepas dari bitrate aktual, yaitu, jika versi H.264 membutuhkan 1,5 MBit / s, maka H.265 akan menggunakan sekitar 750 kBit / s, tetapi 750 kBit / s vs 350 kBit / s untuk urutan lainnya. Saya menjalankannya pada beberapa urutan pada resolusi DVD-PAL dan tidak dapat membedakan perbedaan dari segi kualitas.

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

Untuk informasi lebih lanjut, berikut adalah sumber yang relevan:

slhck
sumber
Terima kasih atas jawaban yang bagus. Apa maksud keyint secara praktis?
Ivan
1
The keyintdalam x264 / x265 adalah interval antara IDR-frame, yaitu interval antara keyframe di mana decoder dapat di-refresh. Di antaranya, bisa ada frame-I non-keyframe, misalnya saat adegan terpotong. Ini setara dengan -gparameter jika saya tidak salah.
slhck
BTW, @slhck, hal yang mengejutkan saya dalam jawaban Anda - perhatian yang Anda berikan pada pilihan perpustakaan pengkodean AAC. Dulu saya pikir mereka semua hampir sama dan memberikan sedikit atau tidak ada perbedaan, bahwa hal-hal sederhana di bagian audio (hanya memilih bitrate dan pergi dan bahwa semua codec lossy utama seperti MP3, AAC dan Vorbis terdengar hampir atau tepatnya sama dengan 128 kbps ke atas). Apakah maksud Anda sebenarnya ada perbedaan penting antara libfdk-aac dan aac biasa?
Ivan
1
@Ivan Zeranoe build seharusnya memungkinkan Anda melakukan -c:a aac -strict experimentalseperti yang ditunjukkan dalam jawaban saya. Dan saya setuju, saya tidak akan mencoba membuatnya di Windows.
slhck
2
@Ivan (komentar pertama): Lihat ffmpeg-wiki : "Berdasarkan kualitas yang dihasilkan dari tinggi ke rendah: Hanya libopus > libvorbis >= libfdk_aac > aac > libmp3lame >= libfaac >= eac3/ac3 > libtwolame > vorbis > mp2 > wmav2/wmav1untuk AAC: (Karena sedikit membingungkan, dengan 3 enkoder tersedia): libfdk_aac > aac > libfaacTanda> = berarti lebih besar atau sama kualitas."
Golar Ramblar