Pengaturan terbaik untuk FFMpeg dengan NVENC

26

Saya menggunakan FFMPEG saya dengan dukungan GPU saya ( NVENC ) untuk mengkonversi file dari penerima satelit saya (SD, mpeg2 .TS-Files) menjadi h264 .mp4-file

Inilah garis yang saya gunakan

ffmpeg -i "e:\input.ts" -vcodec h264_nvenc -preset slow -level 4.1
       -qmin 10 -qmax 52 "e:\output.mp4"

Namun kualitasnya tidak sebagus yang diharapkan. Dan kekuatan penuh dari sistem saya tidak digunakan:

masukkan deskripsi gambar di sini

Hanya 11% GPU dan 30% penggunaan CPU.

Pertanyaan: Apakah ada beberapa perbaikan yang dapat saya lakukan untuk meningkatkan kualitas dengan ukuran file yang sama dan menggunakan lebih banyak kekuatan penghitungan Geforce GTX 1080 saya?

Saya menemukan beberapa parameter dari 林正浩 untuk berubah tetapi -preset slowseharusnya sudah menjadi pendekatan kualitas terbaik kan?

Dr. Snail
sumber

Jawaban:

37

Berikut ini panduan kasar untuk menyetel pembuat enkode:

Kami akan mulai dari dasar-dasarnya, karena akan merugikan untuk menyimpulkan bahwa rentetan cepat dari opsi akan tiba-tiba meningkatkan output yang diharapkan tanpa memahami tujuan dan harapan yang diinginkan:

1. Mulailah dengan memahami opsi pembuat enkode.

Untuk pembuat enkode berbasis NVENC, mulailah dengan mempelajari opsi yang diambil oleh masing-masing pembuat enkode (Perhatikan bahwa saya menggunakan Linux, itulah sebabnya saya menggunakan xclip untuk menyalin opsi codec ke clipboard sebelum menempelkannya di sini):

(Sebuah). Untuk pembuat enkode H.264:

ffmpeg -hide_banner -h encoder=h264_nvenc | xclip -sel clip

Keluaran:

Encoder h264_nvenc [NVIDIA NVENC H.264 encoder]:
    General capabilities: delay 
    Threading capabilities: none
    Supported pixel formats: yuv420p nv12 p010le yuv444p yuv444p16le bgr0 rgb0 cuda
h264_nvenc AVOptions:
  -preset            <int>        E..V.... Set the encoding preset (from 0 to 11) (default medium)
     default                      E..V.... 
     slow                         E..V.... hq 2 passes
     medium                       E..V.... hq 1 pass
     fast                         E..V.... hp 1 pass
     hp                           E..V.... 
     hq                           E..V.... 
     bd                           E..V.... 
     ll                           E..V.... low latency
     llhq                         E..V.... low latency hq
     llhp                         E..V.... low latency hp
     lossless                     E..V.... 
     losslesshp                   E..V.... 
  -profile           <int>        E..V.... Set the encoding profile (from 0 to 3) (default main)
     baseline                     E..V.... 
     main                         E..V.... 
     high                         E..V.... 
     high444p                     E..V.... 
  -level             <int>        E..V.... Set the encoding level restriction (from 0 to 51) (default auto)
     auto                         E..V.... 
     1                            E..V.... 
     1.0                          E..V.... 
     1b                           E..V.... 
     1.0b                         E..V.... 
     1.1                          E..V.... 
     1.2                          E..V.... 
     1.3                          E..V.... 
     2                            E..V.... 
     2.0                          E..V.... 
     2.1                          E..V.... 
     2.2                          E..V.... 
     3                            E..V.... 
     3.0                          E..V.... 
     3.1                          E..V.... 
     3.2                          E..V.... 
     4                            E..V.... 
     4.0                          E..V.... 
     4.1                          E..V.... 
     4.2                          E..V.... 
     5                            E..V.... 
     5.0                          E..V.... 
     5.1                          E..V.... 
  -rc                <int>        E..V.... Override the preset rate-control (from -1 to INT_MAX) (default -1)
     constqp                      E..V.... Constant QP mode
     vbr                          E..V.... Variable bitrate mode
     cbr                          E..V.... Constant bitrate mode
     vbr_minqp                    E..V.... Variable bitrate mode with MinQP (deprecated)
     ll_2pass_quality              E..V.... Multi-pass optimized for image quality (deprecated)
     ll_2pass_size                E..V.... Multi-pass optimized for constant frame size (deprecated)
     vbr_2pass                    E..V.... Multi-pass variable bitrate mode (deprecated)
     cbr_ld_hq                    E..V.... Constant bitrate low delay high quality mode
     cbr_hq                       E..V.... Constant bitrate high quality mode
     vbr_hq                       E..V.... Variable bitrate high quality mode
  -rc-lookahead      <int>        E..V.... Number of frames to look ahead for rate-control (from 0 to INT_MAX) (default 0)
  -surfaces          <int>        E..V.... Number of concurrent surfaces (from 0 to 64) (default 0)
  -cbr               <boolean>    E..V.... Use cbr encoding mode (default false)
  -2pass             <boolean>    E..V.... Use 2pass encoding mode (default auto)
  -gpu               <int>        E..V.... Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. (from -2 to INT_MAX) (default any)
     any                          E..V.... Pick the first device available
     list                         E..V.... List the available devices
  -delay             <int>        E..V.... Delay frame output by the given amount of frames (from 0 to INT_MAX) (default INT_MAX)
  -no-scenecut       <boolean>    E..V.... When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts (default false)
  -forced-idr        <boolean>    E..V.... If forcing keyframes, force them as IDR frames. (default false)
  -b_adapt           <boolean>    E..V.... When lookahead is enabled, set this to 0 to disable adaptive B-frame decision (default true)
  -spatial-aq        <boolean>    E..V.... set to 1 to enable Spatial AQ (default false)
  -temporal-aq       <boolean>    E..V.... set to 1 to enable Temporal AQ (default false)
  -zerolatency       <boolean>    E..V.... Set 1 to indicate zero latency operation (no reordering delay) (default false)
  -nonref_p          <boolean>    E..V.... Set this to 1 to enable automatic insertion of non-reference P-frames (default false)
  -strict_gop        <boolean>    E..V.... Set 1 to minimize GOP-to-GOP rate fluctuations (default false)
  -aq-strength       <int>        E..V.... When Spatial AQ is enabled, this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive) (from 1 to 15) (default 8)
  -cq                <float>      E..V.... Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control (from 0 to 51) (default 0)
  -aud               <boolean>    E..V.... Use access unit delimiters (default false)
  -bluray-compat     <boolean>    E..V.... Bluray compatibility workarounds (default false)
  -init_qpP          <int>        E..V.... Initial QP value for P frame (from -1 to 51) (default -1)
  -init_qpB          <int>        E..V.... Initial QP value for B frame (from -1 to 51) (default -1)
  -init_qpI          <int>        E..V.... Initial QP value for I frame (from -1 to 51) (default -1)
  -qp                <int>        E..V.... Constant quantization parameter rate control method (from -1 to 51) (default -1)
  -weighted_pred     <int>        E..V.... Set 1 to enable weighted prediction (from 0 to 1) (default 0)
  -coder             <int>        E..V.... Coder type (from -1 to 2) (default default)
     default                      E..V.... 
     auto                         E..V.... 
     cabac                        E..V.... 
     cavlc                        E..V.... 
     ac                           E..V.... 
     vlc                          E..V.... 

(b). Untuk enkoder HEVC / H.265:

ffmpeg -hide_banner -h encoder=hevc_nvenc | xclip -sel clip

Keluaran:

Encoder hevc_nvenc [NVIDIA NVENC hevc encoder]:
    General capabilities: delay 
    Threading capabilities: none
    Supported pixel formats: yuv420p nv12 p010le yuv444p yuv444p16le bgr0 rgb0 cuda
hevc_nvenc AVOptions:
  -preset            <int>        E..V.... Set the encoding preset (from 0 to 11) (default medium)
     default                      E..V.... 
     slow                         E..V.... hq 2 passes
     medium                       E..V.... hq 1 pass
     fast                         E..V.... hp 1 pass
     hp                           E..V.... 
     hq                           E..V.... 
     bd                           E..V.... 
     ll                           E..V.... low latency
     llhq                         E..V.... low latency hq
     llhp                         E..V.... low latency hp
     lossless                     E..V.... lossless
     losslesshp                   E..V.... lossless hp
  -profile           <int>        E..V.... Set the encoding profile (from 0 to 4) (default main)
     main                         E..V.... 
     main10                       E..V.... 
     rext                         E..V.... 
  -level             <int>        E..V.... Set the encoding level restriction (from 0 to 186) (default auto)
     auto                         E..V.... 
     1                            E..V.... 
     1.0                          E..V.... 
     2                            E..V.... 
     2.0                          E..V.... 
     2.1                          E..V.... 
     3                            E..V.... 
     3.0                          E..V.... 
     3.1                          E..V.... 
     4                            E..V.... 
     4.0                          E..V.... 
     4.1                          E..V.... 
     5                            E..V.... 
     5.0                          E..V.... 
     5.1                          E..V.... 
     5.2                          E..V.... 
     6                            E..V.... 
     6.0                          E..V.... 
     6.1                          E..V.... 
     6.2                          E..V.... 
  -tier              <int>        E..V.... Set the encoding tier (from 0 to 1) (default main)
     main                         E..V.... 
     high                         E..V.... 
  -rc                <int>        E..V.... Override the preset rate-control (from -1 to INT_MAX) (default -1)
     constqp                      E..V.... Constant QP mode
     vbr                          E..V.... Variable bitrate mode
     cbr                          E..V.... Constant bitrate mode
     vbr_minqp                    E..V.... Variable bitrate mode with MinQP (deprecated)
     ll_2pass_quality              E..V.... Multi-pass optimized for image quality (deprecated)
     ll_2pass_size                E..V.... Multi-pass optimized for constant frame size (deprecated)
     vbr_2pass                    E..V.... Multi-pass variable bitrate mode (deprecated)
     cbr_ld_hq                    E..V.... Constant bitrate low delay high quality mode
     cbr_hq                       E..V.... Constant bitrate high quality mode
     vbr_hq                       E..V.... Variable bitrate high quality mode
  -rc-lookahead      <int>        E..V.... Number of frames to look ahead for rate-control (from 0 to INT_MAX) (default 0)
  -surfaces          <int>        E..V.... Number of concurrent surfaces (from 0 to 64) (default 0)
  -cbr               <boolean>    E..V.... Use cbr encoding mode (default false)
  -2pass             <boolean>    E..V.... Use 2pass encoding mode (default auto)
  -gpu               <int>        E..V.... Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. (from -2 to INT_MAX) (default any)
     any                          E..V.... Pick the first device available
     list                         E..V.... List the available devices
  -delay             <int>        E..V.... Delay frame output by the given amount of frames (from 0 to INT_MAX) (default INT_MAX)
  -no-scenecut       <boolean>    E..V.... When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts (default false)
  -forced-idr        <boolean>    E..V.... If forcing keyframes, force them as IDR frames. (default false)
  -spatial_aq        <boolean>    E..V.... set to 1 to enable Spatial AQ (default false)
  -temporal_aq       <boolean>    E..V.... set to 1 to enable Temporal AQ (default false)
  -zerolatency       <boolean>    E..V.... Set 1 to indicate zero latency operation (no reordering delay) (default false)
  -nonref_p          <boolean>    E..V.... Set this to 1 to enable automatic insertion of non-reference P-frames (default false)
  -strict_gop        <boolean>    E..V.... Set 1 to minimize GOP-to-GOP rate fluctuations (default false)
  -aq-strength       <int>        E..V.... When Spatial AQ is enabled, this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive) (from 1 to 15) (default 8)
  -cq                <float>      E..V.... Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control (from 0 to 51) (default 0)
  -aud               <boolean>    E..V.... Use access unit delimiters (default false)
  -bluray-compat     <boolean>    E..V.... Bluray compatibility workarounds (default false)
  -init_qpP          <int>        E..V.... Initial QP value for P frame (from -1 to 51) (default -1)
  -init_qpB          <int>        E..V.... Initial QP value for B frame (from -1 to 51) (default -1)
  -init_qpI          <int>        E..V.... Initial QP value for I frame (from -1 to 51) (default -1)
  -qp                <int>        E..V.... Constant quantization parameter rate control method (from -1 to 51) (default -1)
  -weighted_pred     <int>        E..V.... Set 1 to enable weighted prediction (from 0 to 1) (default 0)

2. Memahami keterbatasan perangkat keras, dan tetap berpegang pada standar waras terlebih dahulu sebelum menerapkan opsi:

Lihat jawaban ini untuk batasan perangkat keras yang akan Anda hadapi dengan NVENC, terutama untuk pengkodean HEVC pada Pascal.

Untuk infrastruktur akselerasi perangkat keras yang tersedia untuk perangkat keras NVIDIA generasi terbaru dengan FFmpeg, lihat jawaban ini .

Kemudian, menggunakan informasi itu, lanjutkan ke langkah berikutnya.

3. Sintaks sangat penting:

Berikut adalah urutan Anda harus menyampaikan argumen ke FFmpeg:

(Sebuah). Panggil biner.

(b). Berikan argumen apa pun ke FFmpeg (seperti -loglevellangsung) sebelum menyatakan input.

(c). Jika Anda menggunakan pengodean akselerasi perangkat keras apa pun, seperti cuvid, nyatakan di sini dan sertakan argumen spesifik yang diperlukan. Pada titik ini, akan sangat penting untuk menyebutkan bahwa decoder memiliki kendala spesifik, seperti resolusi input yang diharapkan, codec yang didukung, dll, dan oleh karena itu, direkomendasikan bahwa dalam produksi, untuk menentukan dan memvalidasi kebutuhan decoder akselerasi perangkat keras sebagai kegagalan. pada tahap ini menghasilkan penyandian yang gagal dan tidak dapat dipulihkan. Faktanya, para pengembang MPV telah menyebutkan hal ini berulang kali , tidak bergantung pada decoding perangkat keras yang dipercepat untuk pengiriman konten yang sangat penting.

(d). Nyatakan masukan Anda. Untuk streaming, gunakan URL dan jika perlu, tambahkan bendera tambahan (seperti ukuran buffer) sesuai kebutuhan. Untuk sumber daya lokal (pada sistem file yang dapat diakses), jalur file absolut diperlukan.

(e). Secara opsional, masukkan filter. Ini diperlukan untuk fungsi-fungsi seperti mengubah ukuran, percakapan format piksel, de-interlacing, dll. Perhatikan bahwa tergantung pada filter yang digunakan di sini, dekoder berbasis perangkat keras (seperti yang dijelaskan pada bagian (c) akan menimbulkan kendala yang harus dihadapi oleh filter Anda. mampu menangani, jika tidak encode Anda akan gagal.

(f). Panggil enkoder video dan audio yang sesuai, dan berikan argumen yang diperlukan kepada mereka, seperti pemetaan, bitrate, preset encoder, dll. Ketika datang ke bitrate, pastikan bahwa nilai yang Anda inginkan diatur melalui opsi -b:v, -maxrate:vdan -bufsize:v. Jangan biarkan ini kosong. Ini adalah titik awal yang baik tentang mengapa nilai-nilai ini penting. Seperti biasa, mulailah dengan menentukan preset. Gulir ke bawah ke bawah untuk melihat catatan tentang dampak kinerja preset dengan enkoder khusus ini.

(g). Sedangkan FFmpeg dapat menyimpulkan format output yang diperlukan dari suatu file tergantung pada ekstensi yang dipilih dari file output, disarankan untuk secara eksplisit mendeklarasikan format output (melalui opsi -f) sehingga opsi tambahan dapat diteruskan ke muxer yang mendasarinya jika diperlukan , seperti yang sering terjadi dengan format streaming seperti HLS, mpegts dan DASH.

(h). Path absolut ke file output.

Dengan contoh Anda di atas, dikutip sebagai:

ffmpeg -i "e:\input.ts" -vcodec h264_nvenc -preset slow -level 4.1
       -qmin 10 -qmax 52 "e:\output.mp4"

Anda dapat meningkatkan kualitas output dengan menentukan bitrate yang tepat (melalui -b:v, -maxrate:vdan -bufsize:vpengaturan), memungkinkan teknik pengkodean kuantisasi adaptif (metode AQ spasial dan temporal didukung, yang hanya satu yang dapat digunakan pada satu waktu) dan dengan opsional (dan secara terpisah) memungkinkan prediksi tertimbang (yang akan menonaktifkan dukungan bingkai-B) seperti yang ditunjukkan di bawah ini, serta filter opsional untuk skala bawah yang tepat dan mengubah ukuran jika diperlukan. Contoh di bawah ini menunjukkan snippet handling input mpegts yang disandikan dalam mpeg2:

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v mpeg2_cuvid -i "e:\input.ts" \
-filter:v hwupload_cuda,scale_npp=w=1920:h=1080:interp_algo=lanczos \
-c:v h264_nvenc -b:v 4M -maxrate:v 5M -bufsize:v 8M -profile:v main \
-level:v 4.1 -rc:v vbr_hq -rc-lookahead:v 32 \
-spatial_aq:v 1 -aq-strength:v 15 -coder:v cabac \
-f mp4 "e:\output.mp4"

Peringatan: Perhatikan bahwa prediksi berbobot ( -weighted_pred) tidak dapat diaktifkan bersamaan dengan kuantisasi adaptif. Mencoba melakukannya akan mengakibatkan kegagalan inisialisasi pembuat enkode.

Cuplikan di atas mengasumsikan bahwa file input adalah aliran MPEG2. Jika bukan itu masalahnya, alihkan ke decoder CUVID yang benar setelah menganalisisnya:

ffprobe -i e:\input.ts

Jika 'H.264 / AVC-nya, ubah cuplikan seperti yang ditunjukkan di bawah ini:

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v h264_cuvid -i "e:\input.ts" \
-filter:v hwupload_cuda,scale_npp=w=1920:h=1080:interp_algo=lanczos \
-c:v h264_nvenc -b:v 4M -maxrate:v 5M -bufsize:v 8M -profile:v main \
-level:v 4.1 -rc:v vbr_hq -rc-lookahead:v 32 -spatial_aq:v 1 \
-aq-strength:v 15 -coder:v cabac \
-f mp4 "e:\output.mp4"

Saya perhatikan bahwa mengaktifkan kuantisasi adaptif atau opsi prediksi berbobot untuk NVENC dapat menimbulkan masalah dengan stabilitas, terutama dengan kombinasi driver perangkat tertentu. Jika memungkinkan, pertimbangkan untuk menggunakan B-frame (tidak lebih dari 3) yang dikombinasikan dengan opsi generik yang -refs:vdiatur ke 16 atau sekitar itu, alih-alih beralih pada AQ dan prediksi tertimbang:

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v h264_cuvid -i "e:\input.ts" \
-filter:v hwupload_cuda,scale_npp=w=1920:h=1080:interp_algo=lanczos \
-c:v h264_nvenc -b:v 4M -maxrate:v 5M -bufsize:v 8M -profile:v main \
-level:v 4.1 -rc:v vbr_hq -rc-lookahead:v 32 -refs:v 16 \
-bf:v 3 -coder:v cabac \
-f mp4 "e:\output.mp4"

Dengan Turing , khususnya, Anda juga dapat mengambil manfaat dari mengaktifkan B-frame untuk referensi seperti yang ditunjukkan di bawah ini (lihat sakelar -b_ref_mode:v middle):

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v h264_cuvid -i "e:\input.ts" \
-filter:v hwupload_cuda,scale_npp=w=1920:h=1080:interp_algo=lanczos \
-c:v h264_nvenc -b:v 4M -maxrate:v 5M -bufsize:v 8M -profile:v main \
-level:v 4.1 -rc:v vbr_hq -rc-lookahead:v 32 -refs:v 16 \
-bf:v 3 -coder:v cabac -b_ref_mode:v middle \
-f mp4 "e:\output.mp4"

Catatan tambahan tentang jumlah utas (diteruskan ke ffmpeg melalui -threadsopsi):

Semakin banyak utas enkoder di luar batas tertentu akan meningkatkan latensi dan akan memiliki jejak memori penyandian yang lebih tinggi. Degradasi kualitas lebih menonjol dengan jumlah utas yang lebih tinggi dalam mode bitrate konstan dan mode bitrate mendekati-konstan yang disebut VBV (video buffer verifier), karena peningkatan penundaan enkode. Keyframe membutuhkan lebih banyak data daripada jenis bingkai lain untuk menghindari berdenyut keyframe berkualitas buruk.

Mode zero-delay atau slice thread tidak memiliki delay, tetapi opsi ini semakin memperburuk kualitas multi-thread dalam encoders yang didukung.

Oleh karena itu bijaksana untuk membatasi jumlah utas pada enkode di mana latensi penting, karena throughput enkoder yang dirasakan meningkatkan offset manfaat apa pun yang mungkin terjadi dalam jangka panjang.

Dan karena Anda menggunakan Windows, Anda mungkin ingin menghapus shell lolos di \atas karena saya menulis ini dari kotak Unix menguji perintah di atas.

Catatan tentang dampak kinerja dengan preset dan pertimbangan enkode interlaced:

Untuk throughput tinggi, kinerja latensi rendah, pastikan Anda menggunakan salah satu llhpatau llhqpreset. Ini sangat berguna untuk beban kerja seperti streaming langsung di mana kompatibilitas yang lebih luas dengan berbagai perangkat yang lebih luas diharapkan, dan dengan demikian, fitur yang melumpuhkan kinerja seperti B-frame dapat dihilangkan sama sekali untuk pertukaran yang baik antara bit-rate yang lebih tinggi di gunakan dan throughput. Preset yang lebih tinggi (seperti default medium) memiliki pengembalian yang cepat dalam output kualitas sementara pada saat yang sama menimbulkan perlambatan signifikan dalam throughput encoder. Perbedaan kualitas antara llhpdan llhqsebagaimana diukur oleh Netflix's VMAF hampir dapat diabaikan, namun peningkatan kinerja pembuat enkode (lebih dari ~ 30% pada test bed saya) dengan yang pertama jelas cukup besar.

Untuk llhpdan llhqpra - atur, serta pra-set yang digunakan, Anda juga dapat mengesampingkan metode kontrol-tingkat bawaan dengan meneruskan -rc:vargumen yang diekspos oleh opsi enkoder. Misalnya, dengan penyandian laju bit konstan, Anda dapat menentukan -rc:v cbr(yang secara signifikan lebih cepat daripada cbr_ld_hqmetode kontrol laju, membawa tambahan ~ 20% tambahan untuk throughput). Perhatikan bahwa preset yang dipilih memiliki dampak terbesar pada throughput , diikuti oleh opsi preset (seperti metode kontrol laju yang digunakan) yang secara opsional dapat Anda timpa jika diinginkan.

Pertimbangkan alur kerja penyandian Anda dan sesuaikan seperlunya. Jarak tempuh Anda pasti akan bervariasi, berdasarkan konten sumber Anda, rantai filter yang digunakan, variabel konfigurasi pltform tertentu (seperti GPU dan versi driver Anda), dll.

Dalam napas yang sama, perhatikan bahwa NVIDIA telah secara eksplisit menonaktifkan pengkodean interlaced pada Turing di semua tingkatan, bahkan di garis 1660Ti yang menggunakan encoder Volta NVENC yang lebih tua. Jika Anda memerlukan dukungan enkode interlaced, silakan beralih ke Pascal atau SKU lama.

林正浩
sumber
1
Epik! Terima kasih, setelah bekerja dengan pengkodean perangkat keras begitu lama, apakah Anda akan merekomendasikan ini melalui pengkodean CPU atau apakah kelemahan kualitas / ukuran file masih sebesar itu? Maksud saya ada banyak perbaikan yang telah dibuat di NVENC dan NVENC HQ harus memiliki kualitas yang sama dibandingkan dengan standar x264
Dr. Snail
@ Dr.Snail Saya akan merekomendasikan untuk menilai kebutuhan alur kerja Anda terlebih dahulu dan mempertimbangkan semua faktor sebelum beralih ke solusi pengkodean berbasis perangkat keras. Untuk satu, NVENC, seperti solusi pengkodean berbasis SIP lainnya, akan selalu menghasilkan kinerja yang lebih cepat secara drastis pada efisiensi daya yang lebih tinggi dibandingkan dengan implementasi berbasis perangkat lunak, semua faktor lainnya konstan. Untuk ini, terapkan kecepatan trade-off berkualitas seperti yang diharapkan, lalu timbang pada fitur yang tidak didukung. Misalnya, dengan NVENC, kami tidak dapat memasukkan informasi HDR secara langsung dan harus menggunakan alat eksternal untuk itu.
林正浩
Alat seperti ini: github.com/SK-Hardwired/nv_hevc_hdr_patcher .
林正浩
Anda memilih scale_npp=w=1920:h=1080karena filter adalah satu hal yang paling diuntungkan dari GPU bukan? Hal lain, membatasi bitrate -b:v 1000k -minrate 500k -maxrate 3000ktampaknya membuat ukuran output lebih mudah diprediksi
Dr. Snail
Ya, @ Dr.Snail. Ukuran file yang dapat diprediksi adalah prioritas.
林正浩
3

Pengalaman saya menggunakan nvenc adalah bahwa Anda perlu memberi tahu apa itu bitrate yang Anda inginkan - defaultnya adalah VBR, yang tidak masalah, tetapi tidak ada jumlah penyempurnaan karena fakta bahwa ia selalu ingin memberikan Anda bitrate rata-rata 2M tidak peduli file resolusi apa yang Anda berikan. Sepertinya cacat pada pembuat enkode; berkinerja dapat diprediksi dalam segala hal lain, tetapi perlu (misalnya) -b:v 4Muntuk file 720p atau -b:v 8M1080p. Anda mungkin bisa menurunkannya sedikit jika Anda mau.

serilain
sumber
1

Libvorbis untuk audio tampaknya lambat. ac3 seharusnya memberi Anda 15% + peningkatan kecepatan.

Bahwa dikatakan ada sesuatu yang salah dengan driver video Anda atau Anda menggunakan salinan ffmpeg lama. q Saya tidak punya klip Anda, tapi saya mengambil file SD dari PVR saya, dan menggunakan pengaturan Anda.

Saya mendapat 700fps (pengaturan Anda) pada GTX750 (non TI) (yang lebih murah)

Saya mendapat 925fps (Pengaturan Anda dengan audio ac3)

Rekomendasi lain yang bisa saya buat adalah:

Ubah qmax Anda menjadi sekitar 23.

Don Giovanni
sumber
Saya telah menguji ini dengan GTX 760 tua yang saya temukan dengan 400FPS dengan perintah ini ffmpeg40\bin\ffmpeg -hwaccel cuvid -c:v mpeg2_cuvid -i "E:\input.ts" -c:v h264_nvenc "E:\output.mp4"dapatkah Anda menambahkan kode Anda dengan AC3 i.stack.imgur.com/CNaWM.png
Dr. Snail
Ini seharusnya bekerja di baris perintah Anda. Tambahkan di sebelah -c: v h264_nvenc -c: a ac3 Anda juga harus bisa mendorong 2 sesi. Buka baris perintah ke-2 dan enkode .ts pada waktu yang sama. Jika Anda suka, saya akan dengan senang hati menguji salah satu file .t Anda untuk melihat apakah ada hal lain yang dapat dilakukan untuk meningkatkan kecepatan dan kualitas Anda.
Don Giovanni