Cheat sheet dan preset-setting yang benar-benar berfungsi dengan FFmpeg 1.0?

28

Telah mencoba sejumlah 'lembar contekan' yang tersedia di tempat lain tetapi hampir semuanya kedaluwarsa dan tidak akan berfungsi dengan FFMpeg versi terbaru.

Adakah yang bisa mengarahkan saya ke pengaturan yang AKAN bekerja dengan FFMpeg terbaru?

Saya terutama tertarik pada codec berikut

H.264, preset berkualitas rendah sedang dan tinggi

sebaik

ProRes, preset rendah dan kualitas tinggi

Bachalo
sumber

Jawaban:

49

FFmpeg tidak menyertakan preset dan profil berbasis file teks lagi untuk libx264, yaitu apa yang telah Anda gunakan dengan -vpreopsi. Ini telah disusutkan dan dihapus dalam mendukung mengakses preset x264 sebenarnya, profil (dan lagu) dengan -preset, -profile:v, dan -tunepilihan. File teks lama hanya meniru preset dan profil resmi x264, dan karena beberapa keterbatasan tidak dapat menawarkan fungsionalitas penuh yang disediakan oleh sistem baru. Juga lebih mudah untuk dirawat.

Selain itu, banyak encoders memiliki opsi sendiri yang terpisah; juga disebut "opsi pribadi". Anda harus melihat ke opsi encoder audio dan video untuk codec umum dalam dokumentasi online FFmpeg, atau memeriksa output ffmpeg -h fulluntuk daftar lengkap opsi yang didukung. Sebagai contoh, x264 mencantumkan opsi-opsinya libx264 AVOptionsdi bawah dalam output bantuan penuh.

Jika ffmpeg Anda mendukung -presetmaka semua preset file teks tidak boleh digunakan, dan FFmpeg tidak lagi datang dengan selain beberapa preset iPod non-standar. Ini adalah kesalahpahaman umum bahwa preset teks dapat dengan mudah disalin dari mana saja dan digunakan dengan ffmpeg apa pun. Ini tidak benar dan akan mengakibatkan kerusakan.


Pada dasarnya, preset memungkinkan Anda melakukan hal-hal berikut:

Kualitas kontrol

Kualitas dikontrol dengan menentukan bitrate through -b:v(untuk video) atau -b:a(untuk audio), atau dengan menentukan metode encoding lainnya yang mungkin didukung oleh codec.

Untuk x264, ada berbagai metode penyandian, dengan metode Constant Rate Factor yang paling canggih. Ini menghasilkan bitrate variabel, tetapi kualitas keseluruhan baik dalam satu lintasan tunggal. Nilai CRF berkisar dari 0 hingga 51, tetapi nilai waras berkisar antara 19 dan 26, tergantung pada sumber Anda dan kualitas apa yang Anda inginkan. 23 adalah default, jadi Anda dapat misalnya memilih 18 untuk "kualitas tinggi" dan 28 untuk "kualitas rendah", apa pun artinya bagi Anda.

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

x264 juga memiliki metode penyandian lain , tetapi ini di luar cakupan di sini.

Batasi profil H.264

Profil-profil ini menentukan fitur yang dapat digunakan encoder untuk mencocokkan dengan kemampuan decoder tertentu. Dalam FFmpeg baru-baru ini, gunakan sintaks berikut untuk menentukan profil, di mana profil bisa baseline, mainatau high:

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

Untuk info lebih lanjut dan kapan Anda harus menggunakan profil mana, lihat: Apa perbedaan antara Profil H.264?

Pilih penyandian x264 preset

Preset ini mempengaruhi kecepatan encoding. Menggunakan preset yang lebih lambat memberi Anda kompresi yang lebih baik, atau kualitas per file, sedangkan preset yang lebih cepat memberi Anda kompresi yang lebih buruk. Secara umum, Anda hanya perlu menggunakan preset yang Anda mampu untuk menunggu. Presets bisa ultrafast, superfast, veryfast, faster, fast, medium(default), slowdan veryslow. Ini sebuah contoh:

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

Encode video tanpa kehilangan

Ini dimungkinkan dengan menentukan CRF 0, jadi cukup gunakan -crf 0:

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

Akhirnya, mari kita bicara tentang ProRes dengan cepat. ProRes menerima bitrate tetap dengan -b:v, atau Anda dapat menentukan profil, yang harus berupa nilai antara 0 dan 3 , di mana laju bit dipilih sesuai dengan profil. Lebih tinggi berarti lebih baik:

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

The ffmbc Wiki menunjukkan bahwa nama-nama profil dapat digunakan - namun hal ini gagal dalam FFmpeg 1.0.

slhck
sumber
Apa yang harus saya lakukan untuk mengurangi kemungkinan Gagal Konversi, itu terjadi secara acak, kadang-kadang itu tidak terjadi
FlyingAtom
@FlyingAtom Saya belum pernah mendengar tentang "Conversion Fail". Jika Anda memiliki pertanyaan spesifik dengan masalah yang dapat direproduksi, silakan ajukan pertanyaan baru: superuser.com/questions/ask
slhck
Jadi, apa yang akan Anda dapatkan jika semua yang Anda berikan adalah ffmpeg -i input.mp4 -c:v libx264 output.mp4? crf: 23 dan preset: medium?
Drazen Bjelovuk
1
@ David Ya, benar.
slhck
Tepuk tangan! -------
Drazen Bjelovuk
20

Saya melakukan tes di mana saya mentranskode-kode (menggunakan pengkodean libx264 ke .mp4) video berkualitas tinggi dari camcorder Sony menggunakan kisaran penuh nilai yang telah ditentukan (kecuali plasebo) pada kisaran nilai CRF (18, 21, 24, dan 27 ). Saya ingin tahu apa yang akan memberi saya kombinasi terbaik kecepatan encoding, kualitas output dan ukuran file.

Untuk setiap nilai CRF, saya memberi setiap operasi trans-kode skor untuk waktu penyandiannya (misalnya, untuk CRF = 18, nilai preset waktu ultrafast 5,7 detik mendapat skor 1,0, waktu veryslow 162 detik mendapat 0, dengan semua skor lainnya diskalakan di antaranya). Saya menghitung skor ukuran file keluaran dengan cara yang sama, tentu saja memberikan file terkecil skor terbaik. Saya kemudian menambahkan dua skor untuk skor kecepatan / ukuran "gabungan".

Untuk masing-masing dari empat nilai CRF, preset "sangat cepat" adalah pemenang yang mudah diperoleh, dengan skor hampir sempurna 1,94 (untuk CRF 18 dan 21), 1,96 (CRF 24) dan 1,97 (CRF 27). Saya merasa sangat ingin tahu bahwa "veryfast" menghasilkan ukuran file yang paling kecil setiap kali , hanya kalah dari "sangat lambat" dan tidak pernah banyak.

Satu perbedaan yang saya perhatikan di antara berbagai nilai preset adalah bahwa sistem operasi (Windows 7) akan memberi saya thumbnail yang berbeda. Preset yang lebih cepat akan menampilkan thumbnail beberapa detik ke dalam video, di mana thumbnail untuk preset yang lebih lambat akan mencerminkan bingkai pembuka video. Itu tidak penting bagi saya; apa yang saya pelajari adalah "-preset sangat cepat" tampaknya menjadi pilihan yang mudah.

Inilah hasil saya (sebagai gambar snapshot dari spreadsheet Excel):
unggul snapshot

Berikut ini adalah lembar bentang Excel sebagai teks 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
sumber
3
Saya tahu opsi pemformatan Pengguna Super biasa-biasa saja, tetapi mungkin membantu jika Anda memposting data sebagai teks - mungkin menggunakan pemformatan kode.
Scott
1
Menarik. Ini juga lebih cepat di mesin saya. Terima kasih!
joeytwiddle
1
Saya harus mengakui bahwa saya melihat hasil Anda dengan kecurigaan, tetapi saya telah mengulangi tes dan mendapatkan v. Hasil yang serupa, menggunakan ffmpeg versi 3.3.2-1 pada klip video 1080p 2 menit. Bahkan, sangat cepat menghasilkan ukuran file terkecil 60% dari waktu, dan datang ke 2 ke sangat lambat 40% dari waktu (tetapi tidak banyak). Mulai sekarang saya akan menggunakan veryfast untuk semua encode saya bersama dengan nilai CRF yang cukup rendah (18, 19, 20) karena veryfast hanya sedikit lebih lambat dengan nilai CRF yang lebih rendah daripada dengan yang lebih tinggi. Terima kasih Anda telah menyelamatkan saya banyak waktu. Data dan skrip mentah di komentar di bawah.
mattst
1
Melanjutkan dari komentar di atas ... Ini data mentah saya - CRF 18 hingga 27 dan skrip bash Linux / UNIX yang saya tulis untuk menjalankan encode (kalau-kalau ada yang ingin menjalankan tes serupa).
mattst
1
Berikut adalah beberapa posting blog yang luar biasa pada subjek, dengan tes dilakukan untuk x264 dan x265 (hasilnya, dapat diprediksi, sangat berbeda untuk masing-masing)
forresthopkinsa