Cài đặt tốt nhất cho FFMpeg với NVENC


25

Tôi đang sử dụng FFMPEG của mình với hỗ trợ GPU ( NVENC ) để chuyển đổi tệp từ máy thu satelite (SD, mpeg2 .TS-Files) thành tệp h264 .mp4

Đây là dòng tôi đang sử dụng

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

Nhưng chất lượng không tốt như mong đợi. Và toàn bộ sức mạnh của hệ thống của tôi không được sử dụng:

nhập mô tả hình ảnh ở đây

Chỉ 11% GPU và 30% sử dụng CPU.

Câu hỏi: Có một vài cải tiến tôi có thể thực hiện để cải thiện chất lượng bằng kích thước tệp bằng nhau và sử dụng nhiều khả năng tính toán hơn của Geforce GTX 1080 của tôi không?

Tôi tìm thấy một vài thông số từ 林正浩 thay đổi nhưng -preset slownên đã là cách tiếp cận chất lượng tốt nhất phải không?

Câu trả lời:


36

Dưới đây là hướng dẫn sơ bộ để điều chỉnh bộ mã hóa:

Chúng ta sẽ bắt đầu từ những điều cơ bản, vì sẽ rất bất lợi khi đi đến kết luận rằng một loạt các lựa chọn nhanh chóng sẽ đột nhiên cải thiện sản lượng dự kiến ​​mà không hiểu các mục tiêu và kỳ vọng mong muốn:

1. Bắt đầu bằng cách hiểu các tùy chọn của bộ mã hóa.

Đối với các bộ mã hóa dựa trên NVENC, hãy bắt đầu với việc tìm hiểu các tùy chọn mà mỗi bộ mã hóa thực hiện (Lưu ý rằng tôi đang sử dụng Linux, đó là lý do tại sao tôi sử dụng xclip để sao chép các tùy chọn codec vào bảng tạm trước khi dán chúng ở đây):

(a). Đối với bộ mã hóa H.264:

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

Đầu ra:

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). Đối với bộ mã hóa HEVC / H.265:

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

Đầu ra:

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. Hiểu các hạn chế của phần cứng và trước tiên hãy tuân thủ các mặc định lành mạnh trước khi áp dụng các tùy chọn:

Tham khảo câu trả lời này để biết các giới hạn phần cứng bạn sẽ gặp phải với NVENC, đặc biệt đối với mã hóa HEVC trên Pascal.

Để biết cơ sở hạ tầng tăng tốc phần cứng có sẵn cho phần cứng NVIDIA thế hệ hiện tại với FFmpeg, hãy xem câu trả lời này .

Sau đó, sử dụng thông tin đó, tiến hành bước tiếp theo.

3. Cú pháp rất quan trọng:

Đây là thứ tự mà bạn phải truyền đối số cho FFmpeg:

(a). Gọi lên nhị phân.

(b). Truyền bất kỳ đối số nào cho FFmpeg (chẳng hạn như -logleveltrực tiếp) trước khi khai báo đầu vào.

(c). Nếu bạn đang sử dụng bất kỳ giải mã được tăng tốc phần cứng nào, chẳng hạn như cuvid, hãy khai báo nó ở đây và bao gồm bất kỳ đối số cụ thể nào mà nó yêu cầu. Tại thời điểm này, cần phải đề cập rằng các bộ giải mã có các ràng buộc cụ thể, chẳng hạn như độ phân giải đầu vào dự kiến, codec được hỗ trợ, v.v., như vậy, trong sản xuất, nên xác định và xác nhận sự cần thiết của bộ giải mã tăng tốc phần cứng là thất bại ở giai đoạn này dẫn đến một mã hóa thất bại và không thể phục hồi. Trên thực tế, các nhà phát triển MPV đã đề cập đến vấn đề này nhiều lần , đừng dựa vào giải mã được tăng tốc phần cứng để phân phối nội dung quan trọng.

(d). Khai báo đầu vào của bạn. Đối với các luồng, sử dụng URL và nếu cần, hãy thêm các cờ bổ sung (như kích thước bộ đệm) nếu cần. Đối với tài nguyên cục bộ (trên hệ thống tệp có thể truy cập), đường dẫn tệp tuyệt đối là cần thiết.

(e). Tùy chọn, chèn một bộ lọc. Điều này cần thiết cho các chức năng như thay đổi kích thước, hội thoại định dạng pixel, khử xen kẽ, v.v ... Lưu ý rằng tùy thuộc vào bộ lọc được sử dụng ở đây, bộ giải mã dựa trên phần cứng (như được mô tả trong phần (c) sẽ đưa ra các ràng buộc mà bộ lọc của bạn phải có thể xử lý, nếu không mã hóa của bạn sẽ thất bại.

(f). Gọi lên video và âm thanh mã hóa thích hợp, và vượt qua đối số cần thiết đối với họ, chẳng hạn như ánh xạ, bitrate, cài đặt trước bộ mã hóa, vv Khi nói đến bitrate, đảm bảo rằng giá trị mong muốn của bạn được thiết lập thông qua -b:v, -maxrate:v-bufsize:vtùy chọn. Đừng để trống. Đây là một điểm khởi đầu tốt về lý do tại sao những giá trị này quan trọng. Như mọi khi, bắt đầu bằng cách chỉ định một cài đặt trước. Cuộn xuống phía dưới để xem ghi chú về tác động hiệu suất của các cài đặt trước với bộ mã hóa cụ thể này.

(g). Trong khi FFmpeg có thể suy ra định dạng đầu ra cần thiết của một tệp tùy thuộc vào phần mở rộng đã chọn của tệp đầu ra, bạn nên khai báo rõ ràng định dạng đầu ra (thông qua tùy chọn -f) để có thể chuyển các tùy chọn bổ sung cho muxer bên dưới , như thường thấy với các định dạng phát trực tuyến như HLS, mpegts và DASH.

(h). Đường dẫn tuyệt đối đến tệp đầu ra.

Với ví dụ của bạn ở trên, được trích dẫn là:

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

Bạn có thể nâng cao chất lượng đầu ra bằng cách xác định bitrate thích hợp (thông qua -b:v, -maxrate:v-bufsize:vcài đặt), cho phép các kỹ thuật mã hóa lượng tử thích nghi (phương pháp AQ không gian và thời được hỗ trợ, trong đó chỉ có một người có thể được sử dụng tại một thời điểm) và bằng cách tùy ý (và riêng) cho phép dự đoán có trọng số (sẽ vô hiệu hóa hỗ trợ khung B) như hiển thị bên dưới, cũng như bộ lọc tùy chọn để thu nhỏ kích thước phù hợp và thay đổi kích thước nếu cần. Ví dụ dưới đây cho thấy đoạn mã xử lý đầu vào mpegts được mã hóa trong 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"

Cảnh báo: Lưu ý rằng dự đoán có trọng số ( -weighted_pred) không thể được bật cùng lúc với lượng tử hóa thích ứng. Cố gắng làm như vậy sẽ dẫn đến lỗi khởi tạo bộ mã hóa.

Đoạn mã trên giả định rằng tệp đầu vào là một luồng MPEG2. Nếu không phải như vậy, hãy chuyển sang bộ giải mã CUVID chính xác sau khi phân tích nó:

ffprobe -i e:\input.ts

Nếu 'H.264 / AVC, hãy sửa đổi đoạn mã như dưới đây:

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"

Tôi đã nhận thấy rằng việc cho phép tùy chọn dự đoán lượng tử hóa thích ứng HOẶC trọng số cho NVENC có thể gây ra sự cố với tính ổn định, đặc biệt là với các kết hợp trình điều khiển thiết bị cụ thể. Nếu có thể, hãy cân nhắc sử dụng các khung B (không quá 3) kết hợp với tùy chọn chung -refs:vđược đặt thành 16 hoặc ở đó, thay vì bật AQ và dự đoán có trọng số:

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"

Cụ thể, với Turing , bạn cũng có thể hưởng lợi từ việc bật khung B để tham khảo như hiển thị bên dưới (xem phần chuyển đổi -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"

Một ghi chú thêm về số lượng luồng (được chuyển đến ffmpeg thông qua -threadstùy chọn):

Nhiều luồng mã hóa vượt quá một ngưỡng nhất định làm tăng độ trễ và sẽ có dung lượng bộ nhớ mã hóa cao hơn. Suy giảm chất lượng nổi bật hơn với số lượng luồng cao hơn trong các chế độ bitrate không đổi và chế độ bitrate gần như không đổi được gọi là VBV (trình xác minh bộ đệm video), do độ trễ mã hóa tăng. Các khung hình chính cần nhiều dữ liệu hơn các loại khung khác để tránh xung các khung hình chính kém chất lượng.

Chế độ luồng không trễ hoặc cắt lát không có độ trễ, nhưng tùy chọn này càng làm giảm chất lượng đa luồng trong các bộ mã hóa được hỗ trợ.

Do đó, khôn ngoan là hạn chế số lượng luồng trên các mã hóa khi độ trễ quan trọng, vì thông lượng bộ mã hóa nhận thức tăng bù đắp bất kỳ lợi thế nào mà nó có thể mang lại trong dài hạn.

Và vì bạn đang ở trên Windows, bạn có thể muốn xóa shell thoát \ở trên vì tôi đang viết cái này từ hộp Unix đang kiểm tra lệnh ở trên.

Lưu ý về tác động hiệu suất với các cài đặt trước và cân nhắc mã hóa xen kẽ:

Để có thông lượng cao, hiệu suất trễ, đảm bảo bạn đang sử dụng một trong hai llhphoặc llhqcài đặt trước. Điều này hữu ích nhất cho các khối lượng công việc như phát trực tiếp khi có khả năng tương thích rộng hơn với nhiều loại thiết bị hơn và do đó, các tính năng làm tê liệt hiệu suất như khung B có thể được bỏ qua hoàn toàn để trao đổi tốt giữa tốc độ bit cao hơn sử dụng và thông lượng. Các cài đặt trước cao hơn (như mặc định medium) có lợi nhuận giảm nhanh chóng trong đầu ra chất lượng đồng thời phát sinh sự chậm lại đáng kể trong thông lượng bộ mã hóa. Sự khác biệt về chất lượng giữa llhpllhqđược đo bằng VMAF của Netflix hầu như không đáng kể, nhưng hiệu suất của bộ mã hóa tăng (hơn ~ 30% trên giường thử nghiệm của tôi) với cái trước là chắc chắn đáng giá.

Cho llhpllhq cài đặt trước và cũng như các cài đặt trước khác đang sử dụng, bạn cũng có thể ghi đè các phương thức kiểm soát tỷ lệ được xây dựng bằng cách chuyển các -rc:vđối số được hiển thị bởi các tùy chọn bộ mã hóa. Ví dụ, với mã hóa tốc độ bit không đổi, bạn có thể chỉ định -rc:v cbr(nhanh hơn đáng kể so với cbr_ld_hqphương pháp kiểm soát tốc độ, mang lại mức tăng thêm ~ 20% cho thông lượng). Lưu ý rằng giá trị đặt trước được chọn có tác động lớn nhất đến thông lượng , theo sau là các tùy chọn đặt sẵn (như phương pháp kiểm soát tốc độ đang sử dụng) mà bạn có thể tùy ý ghi đè nếu muốn.

Xem xét quy trình mã hóa của bạn và điều chỉnh khi cần thiết. Số dặm của bạn chắc chắn sẽ thay đổi, dựa trên nội dung nguồn của bạn, chuỗi bộ lọc đang sử dụng, các biến cấu hình pltform cụ thể (như phiên bản GPU và trình điều khiển của bạn), v.v.

Trong cùng một hơi thở, lưu ý rằng NVIDIA đã vô hiệu hóa mã hóa xen kẽ trên Turing trên tất cả các tầng, ngay cả trong dòng 1660Ti sử dụng bộ mã hóa Volta NVENC cũ. Nếu bạn yêu cầu hỗ trợ mã hóa xen kẽ, vui lòng chuyển sang Pascal hoặc SKU cũ hơn.


1
Sử thi! Cảm ơn bạn, sau khi làm việc với mã hóa phần cứng quá lâu, bạn sẽ xem xét lại điều này qua mã hóa CPU hay những nhược điểm của chất lượng / kích thước tệp vẫn còn lớn? Ý tôi là có nhiều cải tiến đã được thực hiện trong NVENC và NVENC HQ nên có chất lượng tương đương so với x264 mặc định
Tiến sĩ Snail

@ Dr.Snail Tôi khuyên bạn nên đánh giá các yêu cầu của quy trình công việc trước tiên và xem xét tất cả các yếu tố trước khi chuyển sang giải pháp mã hóa dựa trên phần cứng. Đối với một, NVENC, giống như các giải pháp mã hóa dựa trên SIP khác, sẽ luôn mang lại hiệu suất nhanh hơn đáng kể với hiệu suất năng lượng cao hơn so với triển khai dựa trên phần mềm, tất cả các yếu tố khác không đổi. Để làm điều này, hãy áp dụng tốc độ để đánh đổi chất lượng như mong đợi, sau đó cân nhắc về các tính năng không được hỗ trợ. Chẳng hạn, với NVENC, chúng tôi không thể chèn thông tin HDR trực tiếp và phải sử dụng một công cụ bên ngoài cho việc đó.
林正浩

Các công cụ như thế này: github.com/SK-Hardwired/nv_hevc_hdr_patcher .
林正浩

Bạn chọn scale_npp=w=1920:h=1080vì bộ lọc là một thứ có lợi nhất từ ​​GPU phải không? Một điều nữa, giới hạn tốc độ bit bằng cách -b:v 1000k -minrate 500k -maxrate 3000kdường như làm cho kích thước đầu ra dễ dự đoán hơn
Tiến sĩ Snail

Vâng, @ Dr.Snail. Kích thước tập tin dự đoán là một ưu tiên.
林正浩

3

Kinh nghiệm của tôi khi sử dụng nvenc là bạn cần cho nó biết bitrate nào bạn muốn - nó mặc định là VBR, điều này tốt, nhưng không có điều chỉnh nào bù cho thực tế là nó luôn muốn cung cấp cho bạn tốc độ bit trung bình 2M bất kể tập tin độ phân giải bạn cho nó ăn. Có vẻ như là một lỗ hổng trong bộ mã hóa; nó thực hiện có thể dự đoán ở mọi khía cạnh khác, nhưng nó cần (ví dụ) -b:v 4Mcho tệp 720p hoặc -b:v 8Mcho 1080p. Bạn có thể có thể hạ thấp chúng xuống một chút nếu bạn muốn.


1

Libvorbis cho âm thanh có vẻ chậm. ac3 sẽ tăng tốc 15% cho bạn.

Điều đó được nói là có gì đó không ổn với trình điều khiển video của bạn hoặc bạn đang sử dụng một bản sao cũ của ffmpeg. q Tôi không có clip của bạn, nhưng tôi đã lấy tệp SD ts từ PVR của mình và sử dụng cài đặt của bạn.

Tôi đã nhận 700fps (cài đặt của bạn) trên GTX750 (không phải TI) (loại rẻ hơn)

Tôi đã nhận được 925fps (Cài đặt của bạn với âm thanh ac3)

Các khuyến nghị khác tôi có thể thực hiện là:

Thay đổi qmax của bạn thành khoảng 23.


Tôi đã thử nghiệm điều này với một chiếc GTX 760 cũ mà tôi đã tìm thấy với 400FPS bằng lệnh ffmpeg40\bin\ffmpeg -hwaccel cuvid -c:v mpeg2_cuvid -i "E:\input.ts" -c:v h264_nvenc "E:\output.mp4"này, bạn có thể vui lòng thêm mã của mình bằng AC3 i.stack.imgur.com/CNaWM.png
Tiến sĩ Snail

Điều này sẽ làm việc trong dòng lệnh của bạn. Thêm nó bên cạnh -c: v h264_nvenc -c: a ac3 Bạn cũng có thể đẩy 2 phiên. Mở một dòng lệnh thứ 2 và mã hóa một .ts khác cùng một lúc. Nếu bạn thích tôi sẽ vui lòng kiểm tra một trong các tệp .ts của bạn để xem liệu có bất kỳ điều gì khác có thể được thực hiện để tăng tốc độ và chất lượng của bạn không.
Don Giovanni
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.