การตั้งค่าที่ดีที่สุดสำหรับ FFMpeg ด้วย NVENC


26

ฉันกำลังใช้FFMPEGกับ suport ของ GPU ของฉัน ( NVENC ) เพื่อแปลงไฟล์จากตัวรับสัญญาณดาวเทียมของฉัน (SD, mpeg2 .TS-Files) เป็น h264 .mp4-files

นี่คือบรรทัดที่ฉันกำลังใช้

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

แต่คุณภาพไม่ดีเท่าที่ควร และพลังเต็มรูปแบบของระบบของฉันไม่ได้ใช้:

ป้อนคำอธิบายรูปภาพที่นี่

เพียง 11% GPU และการใช้งาน CPU 30%

คำถาม: มีการปรับปรุงบางอย่างที่ฉันสามารถทำได้เพื่อปรับปรุงคุณภาพโดยขนาดไฟล์เท่ากันและใช้พลังในการคำนวณของ Geforce GTX 1080 ของฉันมากขึ้นหรือไม่?

ฉันพบพารามิเตอร์บางอย่างจาก林正浩ถึงเปลี่ยน แต่-preset slowควรเป็นแนวทางคุณภาพที่ดีที่สุดใช่ไหม

คำตอบ:


37

นี่คือคำแนะนำคร่าวๆในการปรับแต่งตัวเข้ารหัส:

เราจะเริ่มจากพื้นฐานเพราะมันจะเป็นอันตรายที่จะข้ามไปสู่ข้อสรุปว่าการโจมตีอย่างรวดเร็วของตัวเลือกจะปรับปรุงผลลัพธ์ที่คาดหวังโดยไม่เข้าใจวัตถุประสงค์และความคาดหวังที่ต้องการ:

1. เริ่มต้นด้วยการทำความเข้าใจตัวเลือกของเครื่องเข้ารหัส

สำหรับเอ็นโค้ดเดอร์ที่ใช้ NVENC เริ่มต้นด้วยการเรียนรู้ตัวเลือกของเอนโค้ดเดอร์แต่ละตัวใช้เวลา (โปรดทราบว่าฉันใช้ Linux ซึ่งเป็นสาเหตุที่ฉันใช้ xclip เพื่อคัดลอกตัวแปลงสัญญาณไปยังคลิปบอร์ดก่อนวางที่นี่)

(ก) สำหรับตัวเข้ารหัส H.264:

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

เอาท์พุท:

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.... 

(ข) สำหรับตัวเข้ารหัส HEVC / H.265:

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

เอาท์พุท:

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. ทำความเข้าใจข้อ จำกัด ของฮาร์ดแวร์และยึดติดกับค่าเริ่มต้นที่มีสติก่อนใช้ตัวเลือก:

อ้างถึงคำตอบนี้สำหรับข้อ จำกัด ของฮาร์ดแวร์ที่คุณจะใช้เป็นกับ NVENC โดยเฉพาะอย่างยิ่งสำหรับการถอดรหัส HEVC ในปาสคาล

สำหรับโครงสร้างพื้นฐานฮาร์ดแวร์เร่งใช้ได้กับรุ่นปัจจุบันฮาร์ดแวร์ NVIDIA กับ FFmpeg ดูนี้คำตอบ

จากนั้นใช้ข้อมูลดังกล่าวดำเนินการในขั้นตอนต่อไป

3. ไวยากรณ์มีความสำคัญ:

นี่คือลำดับที่คุณต้องส่งอาร์กิวเมนต์ไปที่ FFmpeg:

(ก) เรียกเลขฐานสอง

(ข) ส่งผ่านอาร์กิวเมนต์ใด ๆ ไปยัง FFmpeg (เช่น-loglevelโดยตรง) ก่อนประกาศอินพุต

(ค). หากคุณกำลังใช้การถอดรหัสด้วยฮาร์ดแวร์เร่งความเร็วเช่นcuvidประกาศที่นี่และระบุอาร์กิวเมนต์ที่ต้องการ ณ จุดนี้จะมีความจำเป็นที่จะต้องพูดถึงว่าตัวถอดรหัสมีข้อ จำกัด เฉพาะเช่นความละเอียดอินพุตที่คาดไว้ตัวแปลงสัญญาณที่รองรับ ฯลฯ และดังนั้นจึงแนะนำว่าในการผลิตเพื่อกำหนดและตรวจสอบความต้องการของตัวถอดรหัสฮาร์ดแวร์ที่เร่งความเร็ว ในขั้นตอนนี้ส่งผลให้การเข้ารหัสล้มเหลวและไม่สามารถกู้คืนได้ ในความเป็นจริงMPV devs ได้พูดถึงสิ่งนี้ซ้ำ ๆอย่าพึ่งพาการถอดรหัสด้วยฮาร์ดแวร์เพื่อการส่งเนื้อหาที่มีความสำคัญต่อภารกิจ

(ง) ประกาศอินพุตของคุณ สำหรับสตรีมให้ใช้ URL และหากจำเป็นให้ใส่แฟล็กเพิ่มเติมล่วงหน้า (เช่นขนาดบัฟเฟอร์) ตามต้องการ สำหรับรีซอร์สโลคัล (บนระบบไฟล์ที่สามารถเข้าถึงได้) จำเป็นต้องใช้พา ธ ไฟล์สัมบูรณ์

(จ) เลือกแทรกตัวกรอง สิ่งนี้จำเป็นสำหรับฟังก์ชั่นเช่นการปรับขนาดการสนทนารูปแบบพิกเซลการยกเลิกการเชื่อมโยงเป็นต้นโปรดทราบว่าตัวถอดรหัสที่ใช้ฮาร์ดแวร์ (ดังอธิบายในส่วน (c) จะขึ้นอยู่กับตัวกรองที่ใช้ สามารถจัดการได้มิฉะนั้นการเข้ารหัสของคุณจะล้มเหลว

(ฉ) เรียกภาพและเสียงเข้ารหัสที่เหมาะสมและผ่านการขัดแย้งที่จำเป็นเพื่อให้พวกเขาเช่นแมปบิตเรตที่ตั้งไว้ล่วงหน้า encoder, ฯลฯ เมื่อมันมาถึงอัตราบิตตรวจสอบให้แน่ใจว่าค่าที่คุณต้องการจะถูกตั้งค่าผ่านทาง-b:v, -maxrate:vและ-bufsize:vตัวเลือก อย่าเว้นว่างไว้ นี่เป็นจุดเริ่มต้นที่ดีว่าทำไมค่าเหล่านี้ถึงสำคัญ เช่นเคยเริ่มต้นด้วยการระบุที่ตั้งไว้ล่วงหน้า เลื่อนลงไปด้านล่างเพื่อดูบันทึกย่อเกี่ยวกับผลกระทบต่อประสิทธิภาพของสถานีที่ตั้งค่าไว้ด้วยโปรแกรมเปลี่ยนไฟล์นี้

(ช) ในขณะที่ FFmpeg สามารถอนุมานรูปแบบเอาต์พุตที่ต้องการของไฟล์ขึ้นอยู่กับส่วนขยายที่เลือกของไฟล์เอาต์พุตขอแนะนำให้ประกาศรูปแบบเอาต์พุตอย่างชัดเจน (ผ่านตัวเลือก -f) เพื่อให้ตัวเลือกพิเศษสามารถส่งผ่านไปยัง muxer ต้นแบบหากจำเป็น มักจะเป็นกรณีที่มีรูปแบบการสตรีมเช่น HLS, mpegts และ DASH

(ซ) พา ธ สัมบูรณ์ไปยังไฟล์เอาต์พุต

ด้วยตัวอย่างของคุณด้านบนอ้างอิงเป็น:

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

คุณสามารถเพิ่มคุณภาพผลผลิตด้วยการระบุบิตเรตที่เหมาะสม (ผ่าน-b:v, -maxrate:vและ, -bufsize:vการตั้งค่า), เปิดใช้งานเทคนิคการเข้ารหัสการปรับปริมาณ (วิธีการเชิงพื้นที่และชั่วคราว AQ ได้รับการสนับสนุน, ซึ่งสามารถใช้ได้ครั้งละหนึ่ง) และเลือก (และแยกต่างหาก) การเปิดใช้งานการคาดการณ์แบบถ่วงน้ำหนัก (ซึ่งจะปิดการใช้งานการสนับสนุนเฟรม B) ดังที่แสดงด้านล่างเช่นเดียวกับตัวกรองเสริมสำหรับ downscale ที่เหมาะสมและปรับขนาดถ้าจำเป็น ตัวอย่างด้านล่างแสดงตัวอย่างการจัดการอินพุต MPEG ที่เข้ารหัสใน 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"

คำเตือน:โปรดทราบว่าการทำนายแบบถ่วงน้ำหนัก ( -weighted_pred) ไม่สามารถเปิดใช้งานในเวลาเดียวกันกับการวัดปริมาณแบบปรับได้ ความพยายามที่จะทำเช่นนั้นจะส่งผลให้ความล้มเหลวในการเริ่มต้นเข้ารหัส

ตัวอย่างด้านบนถือว่าไฟล์อินพุตเป็นสตรีม MPEG2 หากไม่ใช่ในกรณีนี้ให้เปลี่ยนไปใช้ตัวถอดรหัส CUVID ที่ถูกต้องหลังจากวิเคราะห์แล้ว:

ffprobe -i e:\input.ts

หากเป็น 'H.264 / AVC ให้แก้ไขข้อมูลโค้ดดังแสดงด้านล่าง:

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"

ฉันสังเกตเห็นว่าการเปิดใช้งานตัวเลือกการปรับปริมาณหรือการทำนายแบบถ่วงน้ำหนักสำหรับ NVENC อาจแนะนำปัญหาที่มีความเสถียรโดยเฉพาะกับชุดไดรเวอร์อุปกรณ์ที่เฉพาะเจาะจง หากเป็นไปได้ให้พิจารณาใช้เฟรม B (ไม่เกิน 3) รวมกับตัวเลือกทั่วไปที่-refs:vตั้งค่าเป็น 16 หรือราว ๆ นั้นแทนที่จะสลับกับ AQ และการทำนายแบบถ่วงน้ำหนัก:

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"

ด้วยทัวริงโดยเฉพาะคุณอาจได้รับประโยชน์จากการเปิดใช้งาน B-frames สำหรับการอ้างอิงตามที่แสดงด้านล่าง (ดูที่สลับ-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"

หมายเหตุเพิ่มเติมเกี่ยวกับการนับด้าย (ส่งผ่านไปยัง ffmpeg ผ่าน-threadsตัวเลือก):

เธรดตัวเข้ารหัสเพิ่มเติมที่เกินกว่าขีด จำกัด ที่แน่นอนเพิ่มความหน่วงแฝงและจะมีรอยเท้าหน่วยความจำการเข้ารหัสที่สูงขึ้น การลดลงของคุณภาพนั้นมีความสำคัญมากกว่าเนื่องจากการนับเธรดที่สูงขึ้นในโหมดบิตเรตคงที่และโหมดบิตเรตใกล้กับค่าคงที่เรียกว่า VBV (Video buffer verifier) ​​เนื่องจากการเข้ารหัสล่าช้าเพิ่มขึ้น Keyframes ต้องการข้อมูลเพิ่มเติมจากนั้นชนิดของเฟรมอื่น ๆ เพื่อหลีกเลี่ยงการกดคีย์เฟรมคุณภาพต่ำ

โหมดเธรดแบบหน่วงเวลาเป็นศูนย์หรือแบบแบ่งส่วนไม่มีความล่าช้า แต่ตัวเลือกนี้ยิ่งทำให้คุณภาพมัลติเธรดแย่ลงในเครื่องเข้ารหัสที่รองรับ

ดังนั้นจึงควร จำกัด จำนวนเธรดที่เข้ารหัสที่เวลาแฝงมีความสำคัญเนื่องจากการรับส่งข้อมูลตัวเข้ารหัสที่รับรู้เพิ่มขึ้นเพื่อชดเชยข้อดีที่อาจเกิดขึ้นในระยะยาว

และเนื่องจากคุณอยู่บน Windows คุณอาจต้องการลบเชลล์ที่\อยู่ด้านบนเนื่องจากฉันเขียนสิ่งนี้จากกล่อง Unix ที่ทดสอบคำสั่งด้านบน

หมายเหตุเกี่ยวกับประสิทธิภาพที่ส่งผลกระทบกับการตั้งค่าล่วงหน้าและข้อควรพิจารณาเกี่ยวกับการเข้ารหัสแบบอินเตอร์เลซ:

เพื่อประสิทธิภาพในการรับส่งข้อมูลสูงความหน่วงต่ำให้แน่ใจว่าคุณกำลังใช้งานllhpหรือllhqค่าที่ตั้งไว้ล่วงหน้า สิ่งนี้มีประโยชน์มากที่สุดสำหรับเวิร์กโหลดเช่นการสตรีมสดที่คาดว่าจะใช้งานร่วมกันได้กับอุปกรณ์ที่หลากหลายมากขึ้นและด้วยเหตุนี้ฟีเจอร์ที่ทำให้หมดประสิทธิภาพเช่นเฟรม B สามารถละเว้นได้พร้อมกันเพื่อการแลกเปลี่ยนที่ดีระหว่างอัตราบิตสูง ใช้และปริมาณงาน ค่าที่ตั้งล่วงหน้าที่สูงขึ้น (เช่นค่าเริ่มต้นmedium) จะลดการส่งคืนคุณภาพผลผลิตอย่างรวดเร็วในขณะที่ในเวลาเดียวกันทำให้เกิดความล่าช้าอย่างมากในการรับส่งข้อมูลตัวเข้ารหัส ความแตกต่างของคุณภาพระหว่างllhpและllhqตามที่วัดได้โดยVMAF ของ Netflix แทบไม่ได้ผลเลย แต่ประสิทธิภาพของเครื่องเข้ารหัส (มากกว่า ~ 30% บนเตียงทดสอบของฉัน) กับอดีตนั้นสามารถเห็นได้อย่างแน่นอน

สำหรับllhpและที่llhqตั้งไว้ล่วงหน้าเช่นเดียวกับที่ตั้งไว้ล่วงหน้าอื่น ๆ ที่ใช้งานคุณยังสามารถแทนที่วิธีการควบคุมอัตราที่สร้างขึ้นโดยการส่ง-rc:vข้อโต้แย้งตามที่เปิดเผยโดยตัวเลือกการเข้ารหัส ตัวอย่างเช่นด้วยการเข้ารหัสอัตราบิตคงที่คุณสามารถระบุ-rc:v cbr(ซึ่งเร็วกว่าcbr_ld_hqวิธีการควบคุมอัตราอย่างมีนัยสำคัญซึ่งจะช่วยเพิ่มการเพิ่มขึ้นอีก 20% สู่ปริมาณงาน) โปรดทราบว่าค่าที่ตั้งล่วงหน้าที่เลือกมีผลกระทบมากที่สุดต่อปริมาณงานตามด้วยตัวเลือกที่ตั้งไว้ล่วงหน้า (เช่นวิธีการควบคุมอัตราการใช้งาน) ที่คุณสามารถเลือกแทนที่ได้หากต้องการ

พิจารณาขั้นตอนการเข้ารหัสของคุณและปรับตามความจำเป็น ระยะของคุณจะแตกต่างกันไปอย่างแน่นอนตามเนื้อหาต้นฉบับของคุณตัวกรองการใช้งานตัวแปรการกำหนดค่า pltform เฉพาะ (เช่น GPU และไดรเวอร์เวอร์ชั่น) เป็นต้น

ในลมหายใจเดียวกันโปรดทราบว่า NVIDIA ได้ปิดใช้งานการเข้ารหัส interlaced อย่างชัดเจนในทัวริงในทุกระดับแม้ในบรรทัด 1660Ti ที่ใช้ตัวเข้ารหัส Volta NVENC รุ่นเก่า หากคุณต้องการการสนับสนุนการเข้ารหัสแบบอินเตอร์เลซโปรดเปลี่ยนเป็น SKU Pascal หรือเก่ากว่าแทน


1
มหากาพย์! ขอบคุณหลังจากทำงานกับการเข้ารหัสฮาร์ดแวร์มาเป็นเวลานานคุณจะแนะนำสิ่งนี้ผ่านการเข้ารหัสของ CPU หรือข้อเสียของคุณภาพ / ขนาดไฟล์ยังคงมีขนาดใหญ่หรือไม่? ฉันหมายถึงมีการปรับปรุงหลายอย่างที่ทำใน NVENC และ NVENC HQ ควรมีคุณภาพเท่ากันเมื่อเทียบกับค่าเริ่มต้น x264
ดร. หอยทาก

@ Dr.Snail ฉันขอแนะนำให้พิจารณาความต้องการของเวิร์กโฟลว์ของคุณก่อนและพิจารณาปัจจัยทั้งหมดก่อนที่จะเปลี่ยนไปใช้โซลูชันการเข้ารหัสที่ใช้ฮาร์ดแวร์ สำหรับหนึ่ง NVENC เช่นเดียวกับโซลูชันการเข้ารหัสที่ใช้ SIP อื่น ๆ จะให้ประสิทธิภาพการทำงานที่เร็วขึ้นอย่างมากที่ประสิทธิภาพการใช้พลังงานที่สูงขึ้นเมื่อเทียบกับการใช้งานซอฟต์แวร์และปัจจัยอื่น ๆ ทั้งหมดคงที่ ในการนี้ใช้ความเร็วในการแลกเปลี่ยนคุณภาพตามที่คาดไว้จากนั้นชั่งน้ำหนักในคุณสมบัติที่ไม่รองรับ ตัวอย่างเช่นด้วย NVENC เราไม่สามารถแทรกข้อมูล HDR โดยตรงและต้องใช้เครื่องมือภายนอกสำหรับสิ่งนั้น
林正浩

เครื่องมือเช่นนี้: github.com/SK-Hardwired/nv_hevc_hdr_patcher
林正浩

คุณเลือกscale_npp=w=1920:h=1080เนื่องจากตัวกรองเป็นสิ่งหนึ่งที่ได้รับประโยชน์สูงสุดจาก GPU ใช่ไหม อีกสิ่งหนึ่งที่ จำกัด บิตเรตโดย-b:v 1000k -minrate 500k -maxrate 3000kดูเหมือนว่าจะทำให้ขนาดเอาต์พุตคาดการณ์ได้มากขึ้น
ดร. หอยทาก

ใช่ @ Dr.Snail ขนาดไฟล์ที่คาดการณ์ได้มีความสำคัญ
林正浩

3

ประสบการณ์ของฉันกับการใช้ nvenc คือคุณต้องบอกว่าบิตเรตที่คุณต้องการ - เป็นค่าเริ่มต้นที่ VBR ซึ่งใช้ได้ แต่ไม่มีการปรับแต่งจำนวนมากเพราะความจริงที่ว่ามันต้องการให้บิตเรตเฉลี่ย 2M เสมอ ไฟล์ความละเอียดใดที่คุณป้อน ดูเหมือนข้อบกพร่องในการเข้ารหัส; มันทำงานได้อย่างคาดการณ์ในทุก ๆ ด้าน แต่มันต้องการ (เช่น) -b:v 4Mสำหรับไฟล์ 720p หรือ-b:v 8Mสำหรับ 1080p คุณอาจจะลดลงเล็กน้อยถ้าคุณต้องการเช่นกัน


1

Libvorbis สำหรับเสียงดูเหมือนว่าช้า ac3 ควรให้ความเร็วเพิ่มขึ้น 15%

มีคนกล่าวว่ามีบางอย่างผิดปกติกับโปรแกรมควบคุมวิดีโอของคุณหรือคุณใช้ ffmpeg รุ่นเก่า ฉันไม่มีคลิปของคุณ แต่ฉันหยิบไฟล์ SD ts จาก PVR ของฉันและใช้การตั้งค่าของคุณ

ฉันได้ 700fps (การตั้งค่าของคุณ) ใน GTX750 (ไม่ใช่ TI) (ราคาถูกกว่า)

ฉันได้รับ 925fps (การตั้งค่าของคุณด้วยเสียง ac3)

คำแนะนำอื่น ๆ ที่ฉันทำได้คือ:

เปลี่ยน qmax ของคุณเป็นประมาณ 23


ฉันได้ทดสอบสิ่งนี้กับ GTX 760 เก่าที่ฉันพบด้วย 400FPS ด้วยคำสั่งนี้ffmpeg40\bin\ffmpeg -hwaccel cuvid -c:v mpeg2_cuvid -i "E:\input.ts" -c:v h264_nvenc "E:\output.mp4"คุณช่วยเพิ่มรหัสของคุณด้วย AC3 i.stack.imgur.com/CNaWM.png ได้ไหม
Dr. Snail

สิ่งนี้จะทำงานในบรรทัดคำสั่งของคุณ เพิ่มถัดจาก -c: v h264_nvenc -c: a ac3 คุณควรกด 2 ครั้งได้ เปิดบรรทัดคำสั่งที่ 2 และเข้ารหัส. ts อื่นในเวลาเดียวกัน ถ้าคุณชอบฉันมีความสุขที่ได้ทดสอบไฟล์. ts ของคุณเพื่อดูว่ามีอะไรอีกบ้างที่สามารถเพิ่มความเร็วและคุณภาพให้กับคุณได้
Don Giovanni
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.