
测试平台:笔记本电脑i7-9750h,GTX1650,16GB内存,Win10,ffmpeg
测试文件:Input.mp4(Douyu客户端记录,AVC,10M,1080P60FPS),INPUT.ASS(DOUYU客户端记录)
以下测试需要支持硬件加速或支持Intel Quick_sync核心图形加速的NVIDIA图形卡
(建议将n张卡在笔记本电脑及以后的7系GTX745、750、750TI和GTX850M中。首次引入NVENC硬件加速编码的编码是在第一代kepler架构图形卡的第一代,几乎是GK104的GK104 CORES,是启动的范围,是范围的范围。 GTX650及以上)
(在第二代核心周期中引入了Intel Quick_sync核心图形硬件加速技术,即在i3-2xxx之后具有核心图形的U
1。视频转编码
1.1使用CPU转码
首先,让我们看看一个软编码的示例(libx264,使用CPU,选择慢速预设以确保质量)
ffmpeg -i input.mp4 -c:v libx264 -b 8M -preset slow -c:a copy output_x264.mp4
执行此操作后,CPU已满载,而转码速率为0.67倍。 CPU性能和散热速度极大地限制了转码速度。
1.2使用NVIDIA GPU处理的硬件加速反编码
以下是使用NVIDIA图形卡加速的硬件加速编码(预设慢,H264_NVENC编码器背后的视频参数从NVIDIA官方文档中复制)
(我个人推荐GTX1650SUPER或RTX3050或更高版本。在某些版本的GTX1650(TU117版本)中,NVENC编码器使用上一代的Volta Encoder而不是本应在16系列中使用的Turing Encoder
ffmpeg -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:a copy -c:v h264_nvenc -preset slow -profile high -b:v 8M -bufsize 8M -maxrate 10M -qmin 0 -g 250 -bf 2 -temporal-aq 1 -rc-lookahead 20 -i_qfactor 0.75 -b_qfactor 1.1 output-h264-nvenc-8M.mp4
目前,系统CPU使用率为9%,转码率为3.18倍。
如何同时将分辨率切换到1080p:在-i面前添加 - 分辨率1920x1080(n卡的硬件加速度特殊)
为什么要提高解决方案?当前,比利比利(Bilibili)的720p压缩策略的代码速率非常低,这会导致非常模糊的图片……为了保持图像质量,需要将纵向分辨率提高到720以上。您可以自己设置。如果水平方向大于垂直方向,则可以使用在冒险岛上常用的1366x768。上载时,将通过1080p处理。我将其直接设置为1920x1080。
1.3使用Intel Core Graphics Quick_sync硬件加速转码
ffmpeg -c:v h264_qsv -vsync 0 -i input.mp4 -c:v h264_qsv -preset slow -profile high -b:v 8M -bufsize 8M -maxrate 12M output-h264-qsv.mp4
目前,系统CPU使用率为18%,速度为3.71倍,CPU核心图形接近满载。
上述输出视频的图像质量似乎没有显着差异,但是我尚未仔细比较细节。
1.4批次NVIDIA GPU硬件加速转码
使用PowerShell的for-object将文件夹中的所有内容进行批处理转码,然后将它们输出到输出文件夹($ _指的是所传递的每个内容,而$ a是我的自定义变量来存储文件名)
按并保持轮班并右键单击需要转码的文件夹 - 在此处打开PowerShell窗口
mkdir output;dir .|foreach-object {if ($_.Extension -eq ".mp4"){$a=$_.BaseName;ffmpeg -c:v h264_cuvid -vsync 0 -i $_.Name -c:v h264_nvenc -preset slow -profile high -b:v 8M -bufsize 8M -maxrate 12M -qmin 0 -g 250 -bf 2 -temporal-aq 1 -rc-lookahead 20 -i_qfactor 0.75 -b_qfactor 1.1 output-$a-h264-nvenc-8M.mp4}}
这将在文件夹中转码所有.mp4文件
可以定制输出名称,但不要强调$ a的左侧和右侧。
如何同时将分辨率转换为1080p:在-i面前添加 - 分辨率1920x1080
1.5批量Intel Core Graphics Quick_sync硬件加速转码
在与1.4中相同的操作中,请使用Baidu设置视频输出参数(因为我也复制了它)
dir .|foreach-object {if ($_.Extension -eq ".mp4"){$a=$_.BaseName;ffmpeg -c:v h264_qsv -vsync 0 -i $_.Name -c:v h264_qsv -preset slow -profile high -b:v 8M -bufsize 8M -maxrate 12M output-$a-h264-qsv-8M.mp4}}
2。Douyu弹幕硬包装
2.1使用纯CPU
ffmpeg -i input.mp4 -vf ass=input.ass -c:v libx264 -b 8M -preset slow -c:a copy output_pure_soft.mp4
CPU满载,速率0.653倍,总时间160秒
2.2 CPU解码,GPU(NVIDIA)编码
ffmpeg -i input.mp4 -vf 'ass=input.ass' -c:v h264_nvenc -preset slow -profile high -b:v 8M -bufsize 8M -maxrate 12M -qmin 0 -g 250 -bf 2 -temporal-aq 1 -rc-lookahead 20 -i_qfactor 0.75 -b_qfactor 1.1 output_softDecode_hwEncode.mp4
CPU使用率上升至约35%,GPU满载(解码器无负载),速率3倍,总时间35秒
2.3 GPU(NVIDIA)解码和编码(建议)
ffmpeg -c:v h264_cuvid -vsync 0 -i input.mp4 -vf 'ass=input.ass' -c:v h264_nvenc -preset slow -profile high -b:v 8M -bufsize 8M -maxrate 12M -qmin 0 -g 250 -bf 2 -temporal-aq 1 -rc-lookahead 20 -i_qfactor 0.75 -b_qfactor 1.1 output-h264-nvenc-ass.mp4
CPU使用率略有增加,图形卡已满载,速度为2.92倍,总时间也为35秒。
2.4 GPU(Intel Quick_sync)解码和编码)
ffmpeg -c:v h264_qsv -vsync 0 -i input.mp4 -vf 'ass=input.ass' -c:v h264_qsv -preset slow -profile high -b:v 8M -bufsize 8M -maxrate 12M output-h264-qsv-ass.mp4
CPU的使用率略有上升,核心图形使用率已提高到50%以上,速率为2.81倍,需要37秒
2.5批次硬包屁股弹幕(NVIDIA)
将视频和屁股字幕文件放在同一文件夹中,然后在那里打开PowerShell窗口
(如果录制的视频格式不是.mp4,则只需更改“ .mp4”位置,如果将其更改为相应的位置)
dir .|foreach-object {if ($_.Extension -eq ".mp4"){$a=$_.BaseName;ffmpeg -c:v h264_cuvid -vsync 0 -i $_.Name -vf "ass=$a.ass" -c:v h264_nvenc -preset slow -profile high -b:v 8M -bufsize 8M -maxrate 12M -qmin 0 -g 250 -bf 2 -temporal-aq 1 -rc-lookahead 20 -i_qfactor 0.75 -b_qfactor 1.1 burn-in_ass_$a.mp4}}
2.6批次硬包屁股弹幕(Intel Quick_sync)
dir .|foreach-object {if ($_.Extension -eq ".mp4"){$a=$_.BaseName;ffmpeg -c:v h264_qsv -vsync 0 -i $_.Name -vf "ass=$a.ass" -c:v h264_qsv -preset slow -profile high -b:v 8M -bufsize 8M -maxrate 12M burn-in_ass_$a.mp4}}
本文未指定许可协议。