首页 > 其他分享 >ffmpeg 硬件加速 wmv 视频转码

ffmpeg 硬件加速 wmv 视频转码

时间:2022-11-11 14:14:43浏览次数:74  
标签:ffmpeg 转码 wmv vc1 硬件加速 CPU

  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 码率,可以手动设置码率来降低画质损失。

标签:ffmpeg,转码,wmv,vc1,硬件加速,CPU
From: https://www.cnblogs.com/xlfqrxlf/p/16880295.html

相关文章

  • ffmpeg 硬件加速视频转码指南
    0.系统环境基于Windows下演示,Linux下也可以适用。所使用ffmpeg版本为BtbN编译的win64-gpl版(非gpl-share),项目地址:BtbN/FFmpeg-Builds也可以使用gyan.dev......
  • ffmpeg常用操作
    音频常用操作常见的ffmpeg音频参数常用参数解释: -i表示input,即输入文件 -f表示format,即输出格式 -vn表示vedionot,即输出不包含视频 -ar设定采样率 -ac......
  • nginx m3u8 ffmpeg
    #nginxconfiglocation/hls{types{application/vnd.apple.mpegurlm3u8;video/mp2tts;}......
  • Qt编写ffmpeg本地摄像头显示(16路本地摄像头占用3.2%CPU)
    一、前言内核ffmpeg除了支持本地文件、网络文件、各种视频流播放以外,还支持打开本地摄像头,和正常的解析流程一致,唯一的区别就是在avformat_open_input第三个参数传入个AVI......
  • ffmpeg-安装编译
    下载源码Linux:DownloadFFmpegWindows选择full版本CODEXFFMPEG-releasebuildsLinux安装方法一软件包工具安装:sudoaptinstallffmpeg,sudoyuminstallffmp......
  • ubuntu安装 ffmpeg 视频插件
     一、安装相关依赖或工具sudoaptinstall-yyasmsudoapt-getinstall-yautoconfautomakebuild-essentialgitlibass-devlibfreetype6-devlibsdl2-dev\lib......
  • unicode转码
    /***@paramstring*@return转换之后的内容*@Title:unicodeDecode*@Description:unicode解码将Unicode的编码转换为中文*/......
  • ffmpeg-sws_scale用法
    sws_scale()作用简单说来就是转变图片的存储格式使用步骤首先初始化sws_getContext。使用sws_scale转化。释放环境sws_freeContext()代码SwsContext*pSwsCtx=sws_get......
  • ffmpeg window二次开发环境搭建
    1.下载vs2017。网上有精简版的可下载。2.下载ffmpeg的windows库文件。包括开发版和共享版(需要用共享版中的dll文件).​​https://ffmpeg.zeranoe.com/builds/​​3.导入头......
  • ffmpeg添加实时水印
    这次需要测试直播延时,添加一个实时的时间水印方便对比,命令如下:ffmpeg-isrc.mp4-c:vh264-vfdrawtext=text="%{localtime}":x=100:y=100:fontfile='C\:\\Windows\\fo......