1. 基于 Windows 下演示,Linux 下也可以通用。建议先阅读关于使用硬件加速的基础部分。文章链接:ffmpeg 硬件加速视频转码指南

  2. 后文将会演示 wmv3 以及 vc1 编码的 wmv 格式视频向 h264 编码的 mp4 格式视频的转换。如果你理解了原理,那么类似 wmv2 转 hevc 也是类似的。

  3. 测试案例1
    可以看到原视频是一段 wmv3 编码的 4000k 码率 720p 30帧的视频
    在这里插入图片描述

  • 首先还是默认情况下,用 CPU 编解码:ffmpeg -i input.wmv output.mp4 ,速度如图所示,CPU 满载,GPU 围观。
    在这里插入图片描述

  • 接着尝试使用加入-hwaccel auto参数,使用自动的硬件加速:ffmpeg -hwaccel auto -i input.wmv output.mp4
    程序自动选择了 dxva2 的硬件加速方法( cuda 我也测试了,差不多)
    在这里插入图片描述
    速度提升不能说没有,只能说差不多
    在这里插入图片描述
    用到了一点点的 GPU 解码器,约等于没有用,主要依旧还是 CPU 在干活。

  • 尝试寻找适用于 wmv3 的硬件解码器 ffmpeg -codecs | findstr "wmv3" ,可以看到并没有
    在这里插入图片描述

  • 但是没有关系,转码过程中主要的负载来自于编码工作,我们可以手动指定 编码器 encoder,来达到硬件加速的作用
    通过加入 -c:v 参数,来调用 N 卡的硬件编码器:ffmpeg -hwaccel cuda -i input.wmv -c:v h264_nvenc output.mp4

在这里插入图片描述
在这里插入图片描述

可以看到指定的编码器生效了,转码速度也快了很多,GPU 的硬件编解码器也得到了较为充分的利用,CPU 占用也维持在一个较低的水平。但是编码器默认的码率(2000k)较低,清晰度有所下降,可以通过参数 -b:v 4000k 设定输出视频的码率与原视频一致来避免画质损失。

  1. 测试案例2
    vc1 编码,1080p 30帧 6000k 码率,直接 CPU 编解码和打开自动硬件解码和上面差不多的结论,都很慢。
    在这里插入图片描述
  • 不过有一个特殊情况就是指定 -hwaccel cuda 的时候,转码速度会非常慢。GPU 的硬件解码器使用率会达到 100% ,但是编码器没有用到,CPU 也是占用率很低。ffmpeg -hwaccel cuda -i input2.wmv output.mp4
    在这里插入图片描述

  • 手动指定编解码器
    通过 ffmpeg -codecs | findstr "vc1" 查看 vc1 的编解码器
    可以看到有 i卡 专用的 vc1_qsvN卡 专用的 vc1_cuivid 解码器
    在这里插入图片描述
    加入参数-c:v来指定解码器:ffmpeg -c:v vc1_cuvid -i input2.wmv -c:v h264_nvenc output.mp4 (根据你的显卡选择对应的编解码器,我这里是 N卡 所以选择了 vc1_cuvid 作为解码器,h264_nvenc 作为编码器)

可以看到转码速度非常快,并且硬件编解码器也得到了充分的利用,CPU 占用也较低。
在这里插入图片描述

同样也是注意 nvenc 默认编码输出为 2000k 码率,可以手动设置码率来降低画质损失。

原文地址:http://www.cnblogs.com/xlfqrxlf/p/16880295.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性