QuickCut icon indicating copy to clipboard operation
QuickCut copied to clipboard

-qscale-qscale

Open cancundeyingzi opened this issue 2 years ago • 9 comments

发现一个问题(mb指MB) 原视频h264,710mb,标准4k,96fps 运行-c:v hevc_nvenc -qscale 1 -b:a 256k 变成9mb 运行-c:v hevc_nvenc -qscale 225 -b:a 256k 变成1.51GB............ 在使用硬件加速编码器的时候,控制输出视频的质量是使用 qscale 参数,他的数值可以从 0.1 - 255 不等,数值越小,画质越高,码率越大,输出文件体积越大

是我理解有问题么?我语文确实不行......

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:/春日野穹.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2mp41 encoder : Lavf58.61.100 Duration: 00:02:01.00, start: 0.000000, bitrate: 49290 kb/s Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 3840x2160 [SAR 1:1 DAR 16:9], 49287 kb/s, 96 fps, 96 tbr, 12288 tbn, 96 tbc (default) Metadata: handler_name : VideoHandler vendor_id : [0][0][0][0] Please use -q:a or -q:v, -qscale is ambiguous Codec AVOption b (set bitrate (in bits/s)) specified for output file #0 (D:/春日野穹_out.mp4) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream. Stream mapping: Stream #0:0 -> #0:0 (mpeg4 (native) -> hevc (hevc_nvenc)) Press [q] to stop, [?] for help [hevc_nvenc @ 0000013b37cc0540] Using global_quality with nvenc is deprecated. Use qp instead. Output #0, mp4, to 'D:/春日野穹_out.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2mp41 encoder : Lavf58.76.100 Stream #0:0(und): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(progressive), 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 2000 kb/s, 96 fps, 12288 tbn (default) Metadata: handler_name : VideoHandler vendor_id : [0][0][0][0] encoder : Lavc58.134.100 hevc_nvenc Side data: cpb: bitrate max/min/avg: 0/0/2000000 buffer size: 4000000 vbv_delay: N/A frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
................................................... frame=11589 fps=109 q=50.0 size= 1580032kB time=00:02:00.53 bitrate=107388.0kbits/s speed=1.13x
frame=11616 fps=108 q=50.0 Lsize= 1585869kB time=00:02:00.95 bitrate=107404.2kbits/s speed=1.13x
video:1585753kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.007309%

cancundeyingzi avatar Apr 12 '22 09:04 cancundeyingzi

在 [ffmpeg Documentation](http://www.ffmpeg.org/ffmpeg.html) 中说:

-qscale[:stream_specifier] q (output,per-stream)

Use fixed quality scale (VBR). The meaning of q/qscale is codec-dependent.

在 [Encode/MPEG-4 – FFmpeg](https://trac.ffmpeg.org/wiki/Encode/MPEG-4) 中有说:

You can select a video quality level with -qscale:v n (or the alias -q:v n), where n is a number from 1-31, with 1 being highest quality/largest filesize and 31 being the lowest quality/smallest filesize.

实际上, qscale 的数值对不同编码器的作用不同,这要看编码器怎么决定。没有统一的文档说哪一个数值就是最好的,甚至同一个硬件加速编码器在不同的硬件上,都会有差异。具体如何设 qscale 的画质最好,只能亲自动手试。

像 MPEG4 接受的 qscale 数值是 1 - 31,你填上 32 的话,我也不知道它会怎么处理。想知道的话,还得去翻这个编码器的文档。

HaujetZhao avatar Apr 12 '22 12:04 HaujetZhao

你可以从 1 开始递增地试,摸索下你的编码器接受的正常取值。qscale 的正常取值是 1 - 255,但并不代表每个编码器都能正常处理这些数值。

HaujetZhao avatar Apr 13 '22 06:04 HaujetZhao

[ffmpeg Documentation]([http://www.ffmpeg.org/ffmpeg.html)](http://www.ffmpeg.org/ffmpeg.html%5D(http://www.ffmpeg.org/ffmpeg.html)) 中说: -qscale[:stream_specifier] q (输出,每流) 使用固定质量量表 (VBR)。q/qscale的含义与编解码器相关。 在 [Encode/MPEG-4 – FFmpeg]([https://trac.ffmpeg.org/wiki/Encode/MPEG-4)](https://trac.ffmpeg.org/wiki/Encode/MPEG-4%5D(https://trac.ffmpeg.org/wiki/Encode/MPEG-4)) 中有说: 您可以使用“-qscale:v n”(或别名“-q:v n”)选择视频质量级别,其中 n 是 1-31 之间的数字,其中 1 表示最高质量/最大文件大小,31 表示最低质量/最小文件大小。 实际上, qscale 的数值对不同编码器的作用不同,这要看编码器怎么决定。没有统一的文档说哪一个数值就是最好的,甚至同一个硬件加速编码器在不同的硬件上,都会有差异。具体如何设 qscale 的画质最好,只能亲自动手试。像 MPEG4 接受的 qscale 数值是 1 - 31,你填上 32 的话,我也不知道它会怎么处理。想知道的话,还得去翻这个编码器的文档。

那为啥在预设帮助里写是0.01-255呢?刚刚试了下另一个视频 -c:v hevc_nvenc -qscale 102 输出1.69g -c:v hevc_nvenc -qscale 103 输出 13.3m???????????????????????????

输入 #0, mov,mp4,m4a,3gp,3g2,mj2, 来自 'C:/Users/ASUS/OneDrive - OneDrive/桌面/222_2222t.mp4': 元数据: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 编码器 : Lavf58.76.100 持续时间: 00:00:39.18, 开始: 0.000000, 比特率: 64906 kb/s 流 #0:0(eng): 视频: h264 (高) (avc1 / 0x31637661), yuv420p(tv, bt709), 2160x3840, 64766 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (默认) 元数据: handler_name : VideoHandle vendor_id : [0][0][0][0] Stream #0:1(eng): 音频: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (默认) 元数据: handler_name : SoundHandle vendor_id : [0][0][0][0] 请使用 -q:a 或 -q:v, -qscale 是模棱两可 的 流映射: 流 #0:0 -> #0:0 (h264 (本机) -> hevc (hevc_nvenc)) 流 #0:1 -> #0:1 (aac (本机) -> aac (本机)) 按 [q] 停止,[?] 寻求帮助 [hevc_nvenc @ 0000024dcb0dbf00] 不推荐使用 nvenc global_quality。请改用 qp。 输出 #0, mp4, to 'C:/Users/ASUS/OneDrive - OneDrive/桌面/222_2222t_out.mp4': 元数据: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 编码器 : Lavf58.76.100 流 #0:0(eng): 视频: hevc (Main) (hev1 / 0x31766568), yuv420p(tv, bt709, progressive), 2160x3840, q=2-31, 2000 kb/s, 60 fps, 15360 tbn (默认) 元数据: handler_name : VideoHandle vendor_id : [0][0][0][0] 编码器 : Lavc58.134.100 hevc_nvenc 侧面数据: cpb: 比特率 最大/分钟/平均值: 0/0/2000000 缓冲区大小: 4000000 vbv_delay: N/A 流 #0:1(eng): 音频: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 立体声, fltp, 128 kb/s (默认) 元数据: handler_name : SoundHandle vendor_id : [0][0][0][0] 编码器 : Lavc58.134.100 aac 帧= 1 fps=0.0 q=0.0 大小= 0kB 时间=00:00:00.19 比特率= 1.8kbits/s 速度=1.41x 帧= 16 fps=0.0 q=3.0 大小= 5632kB 时间=00:00:00.44 比特率=102985.9kbits/s 速度=0.698x

帧= 2351 fps= 90 q=50.0 Lsize= 1773729kB 时间=00:00:39.16 比特率=370976.0kbits/s 速度= 1.5x 视频:1773066kB 音频:614kB 字幕:0kB 其他流:0kB 全局标头:0kB 多路复用开销: 0.002729% [aac @ 0000024dcb46a580] Qavg: 625.735

输入 #0, mov,mp4,m4a,3gp,3g2,mj2, 来自 'C:/Users/ASUS/OneDrive - OneDrive/桌面/222_2222t.mp4': 元数据: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 编码器 : Lavf58.76.100 持续时间: 00:00:39.18, 开始: 0.000000, 比特率: 64906 kb/s 流 #0:0(eng): 视频: h264 (高) (avc1 / 0x31637661), yuv420p(tv, bt709), 2160x3840, 64766 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (默认) 元数据: handler_name : VideoHandle vendor_id : [0][0][0][0] Stream #0:1(eng): 音频: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (默认) 元数据: handler_name : SoundHandle vendor_id : [0][0][0][0] 请使用 -q:a 或 -q:v, -qscale 是模棱两可 的 流映射: 流 #0:0 -> #0:0 (h264 (本机) -> hevc (hevc_nvenc)) 流 #0:1 -> #0:1 (aac (本机) -> aac (本机)) 按 [q] 停止,[?] 寻求帮助 [hevc_nvenc @ 000001f39471bf00] 不推荐使用 nvenc 的global_quality。请改用 qp。 输出 #0, mp4, to 'C:/Users/ASUS/OneDrive - OneDrive/桌面/222_2222t_out.mp4': 元数据: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 编码器 : Lavf58.76.100 流 #0:0(eng): 视频: hevc (Main) (hev1 / 0x31766568), yuv420p(tv, bt709, progressive), 2160x3840, q=2-31, 2000 kb/s, 60 fps, 15360 tbn (默认) 元数据: handler_name : VideoHandle vendor_id : [0][0][0][0] 编码器 : Lavc58.134.100 hevc_nvenc 侧面数据: cpb: 比特率 最大/分钟/平均值: 0/0/2000000 缓冲区大小: 4000000 vbv_delay: N/A 流 #0:1(eng): 音频: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 立体声, fltp, 128 kb/s (默认) 元数据: handler_name : SoundHandle vendor_id : [0][0][0][0] 编码器 : Lavc58.134.100 aac 帧 = 1 fps=0.0 q=0.0 大小= 0kB 时间=00:00:00.19 比特率= 1.8kbits/s 速度=1.35x 帧= 7 fps=0.0 q=0.0 大小= 0kB 时间=00:00:00.27 比特= 1.3kbits/s 速度=0.43x

帧= 2259 fps=103 q=50.0 大小= 13056kB 时间=00:00:37.84 比特率=2826.1kbits/s 速度=1.73x 帧= 2314 fps=104 q=121.0 大小= 13312kB 时间=00:00:38.74 比特率=2814.9 kbits/s 速度=1.73x 帧= 2351 fps=103 q=50.0 Lsize= 13672kB 时间=00:00:39.16 比特率=2859.5kbits/s 速度=1.71x 视频:13004kB 音频:614kB 字幕:0kB 其他流:0kB 全局标头:0kB 多路复用开销: 0.392623% [aac @ 000001f39657a580] Qavg: 625.735

cancundeyingzi avatar Apr 13 '22 06:04 cancundeyingzi

你可以从 1 开始递增地试,摸索下你的编码器接受的正常取值。qscale 的正常取值是 1 - 255,但并不代表每个编码器都能正常处理这些

我现在试试..

cancundeyingzi avatar Apr 13 '22 06:04 cancundeyingzi

你可以从 1 开始递增地试,摸索下你的编码器接受的正常取值。qscale 的正常取值是 1 - 255,但并不代表每个编码器都能正常处理这些数值。

1=13.3m 2=2150m(2.15g) 3=1=13.3m 4=2=2150m(2.15g) .......我现在越来越迷茫了,是我的设备有问题么? 使用预设h265压制nv硬件加速,并修改-qscale

cancundeyingzi avatar Apr 13 '22 06:04 cancundeyingzi

10=12=13=15=2=2150m(2.15g) 11=528m 14=16=3=1=13.3m 我放弃了.......

cancundeyingzi avatar Apr 13 '22 06:04 cancundeyingzi

你现在应该可以总结出规律了,你的硬件只支持两种 hevc 硬件加速模式,一种是画质高码率特别大,另一种是画质低码率特别小,用奇数和偶数来控制。很多时候,硬件加速就是这样,你只能在画质和体积之间二选一,不能兼得,硬件加速的目的就是方便快速编解码!

HaujetZhao avatar Apr 13 '22 09:04 HaujetZhao

那就奇怪了,qscale 11是啥情况呢,我现在用b:v 10000k是正常的。。网上还有种说法是-cq,但是没试过

cancundeyingzi avatar Apr 13 '22 09:04 cancundeyingzi

你现在应该可以总结规律了,你的硬件只支持两种hevc硬件加速模式,一种是画质高码率特别大,另一种是画质低码率特别小,用奇数和偶数来控制。很多时候,硬件加速就是这样,你只能在画质和体积之间二选一,不能兼得,硬件加速的目的就是方便快速编解码!

还有忘记了,我的显卡是2060Maxq。。等下我用别人的试试

cancundeyingzi avatar Apr 13 '22 09:04 cancundeyingzi