Bagaimana cara menerjemahkan opsi HandbrakeCLI ke opsi FFmpeg?

13

Saya memiliki banyak pengaturan commandline yang bekerja untuk rem tangan, tetapi kadang-kadang pada beberapa video (saya tidak tahu mengapa) rem tangan melempar "Pengecualian kehabisan memori". Saya bertanya-tanya apakah saya dapat menemukan tombol opsi yang sama dan melakukannya dengan FFmpeg, tetapi sepertinya tidak begitu mudah untuk dilakukan.

FFmpeg terkadang tidak memiliki opsi tersebut atau melakukan hal-hal secara default. Misalnya saya tidak tahu bagaimana melakukan anamorphic kustom dengan FFmpeg. Bagi saya sangat penting bahwa video yang dihasilkan akan sebagus jika dilakukan dengan rem tangan. Inilah garis untuk Handbrake:

HandBrakeCLI.exe --input "d:\input.mpg" --output "d:\output.mp4" --rate 29.97 --cfr --arate 44.1 --format mp4 --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0 --encoder x264 --vb 5200 --aencoder faac --ab 128 --mixdown stereo -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200:level=42:bframes=2:min-keyint=60:keyint=60:ref=4:me=umh:merange=64:subme=7:8x8dct:cabac=1  -v3 -2 -a none

Bagaimana cara mengubahnya ke perintah FFmpeg?

iLemming
sumber

Jawaban:

20

Handbrake menggunakan enkoder x264 untuk konversi video. Ada situs dengan ikhtisar semua opsi x264 dan rekan FFmpeg mereka . Namun, ini sedikit usang dan beberapa opsi ini tidak berfungsi lagi atau mungkin telah diubah namanya. Anda harus menggunakan profil x264 untuk sebagian besar opsi detail — tetapi kita akan sampai di sana.

Banyak opsi Handbrake dasar (misalnya frame rate) tidak spesifik untuk x264, dan mereka tersebar di seluruh dokumentasi online FFmpeg .

Sebelum kita mulai, periksa apakah Anda menggunakan versi FFmpeg terbaru. Situs unduhan mereka memiliki versi statis untuk semua sistem operasi utama.

Ayo pergi:

  • --input "d:\input.mpg" --output "d:\output.mp4"

    Sintaks FFmpeg adalah ffmpeg -i input.mpg … d:\output.mp4.

  • --rate 29.97

    Tentukan frame rate video dengan -r 29.97. (Handbrake --cfrhanya menetapkan frame rate yang konstan. Tidak diperlukan di sini).

  • --arate 44.1

    Atur laju sampel audio dengan -ar 44100(dalam Hz).

  • --format mp4

    Tidak diperlukan karena FFmpeg tahu Anda ingin MP4.

  • --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0

    Ini tidak melakukan apa pun selain mengatur ukuran ke 1920 × 1080. Di FFmpeg, lakukan dengan -s:v 1920x1080, atau jika Anda ingin menggunakan filter -filter:v "scale=1920:1080",.

  • --encoder x264 --vb 5200

    Setel enkoder dengan -c:v libx264dan bit rate ke konstan dengan -b:v 5200K. Perhatikan bahwa kita belum sampai pada pengaturan kualitas.

  • --aencoder faac --ab 128 --mixdown stereo

    Mirip dengan di atas, dengan -c:a libfaac -b:a 128K -ac 2. Perhatikan bahwa FAAC tidak lagi didukung dalam FFmpeg; sebagai gantinya, gunakan enkoder FFmpeg bawaan -c:a aac -b:a 128Ksebagai gantinya.

  • -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200

    Ini menetapkan mode pengodean ke VBV yang menargetkan skenario streaming alih-alih hanya bitrate atau kualitas konstan. Kualitas konstan juga disebut CRF , standar untuk x264 - ini disebut "Faktor Tingkat" di Handbrake. Sementara CRF biasanya memberi Anda encode kualitas terbaik, mode VBV memberi Anda file yang lebih cocok untuk streaming online atau untuk perangkat tertentu dengan kemampuan terbatas.

    Untuk mengatur VBV, gunakan opsi -maxrate 5200Kdan -bufsize 5200Kdi ffmpeg.

    Untuk mengatur CRF, gunakan -crf 23di ffmpeg.

  • level=42

    Gunakan -level 42. Ini adalah Level H.264 .

  • bframes=2:min-keyint=60:keyint=60:ref=4

    Atur jumlah B-Frame dengan -bf 2. Interval keyframe minimum diatur dengan -keyint_min 60, dan interval maksimum dengan -g 60. Jumlah gambar referensi diatur dengan -refs 4.

  • me=umh:merange=64:subme=7:8x8dct:cabac=1

    Ini adalah opsi yang dapat Anda atur di ffmpeg tambahan dengan -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1- seperti pengaturan encoder x264 lainnya yang tidak langsung dipetakan ke opsi ffmpeg.

    Ini versi "TL; DR" jika Anda malas, tidak peduli dengan detailnya, atau jika ada yang tidak berfungsi: Gunakan -preset:v medium(atau tinggalkan, karena pengaturan awal media adalah default). Preset x264 memilih serangkaian opsi yang berdagang dengan kecepatan enkode untuk efisiensi kompresi. Mereka nyaman nama dari ultrafast, superfast, veryfast, faster, fast, mediumuntuk slow, slowerdan veryslow. Pilih apa pun yang Anda rasa nyaman.

Jadi, untuk meringkas, versi panjang:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -level 42 -bf 2 -keyint_min 60 -g 60 -refs 4 -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Atau yang singkat yang saya gunakan (dengan penyandian VBV dan beberapa opsi detail dihapus):

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Mengubah ke penyandian kualitas konstan untuk konversi serba guna, gunakan ini dan ubah -crfparameter dari 18 menjadi 28, di mana lebih rendah berarti kualitas lebih baik dan 23 adalah default:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -crf 23 -c:a aac -b:a 128K -ar 44100 d:\output.mp4
slhck
sumber
Haha @ slhck, tepat ketika saya memberikan sentuhan akhir pada jawaban saya, Anda pergi dan memberikan yang lebih baik.
evilsoup