前言

最近看着 nas 的存储空间日渐减少,然而硬盘位已经满了,无法加硬盘(强硬要加的话得换机箱,主板。。。成本太高)。然后大致看了下主要占空间的是视频资源,遂想到把 h264 的视频转码成 h265 来节省空间。然后就有了这一篇。

先说下效果吧,那是非常的好,转换前差不多 5t 的视频,转换后只有 3t 多了(我的视频里有大量的 h264 编码的)。我的转码思路是:

  • 如果 h264 码率大于 5M,设置转换后的码率为 2.5M
  • 如果 h264 码率小于 5M,设置转换的码率为原始码率/2

上述设置下,视频画质几乎没有区别。另外 3060ti 编码 2.5M 码率的 h265 视频能达到三百多帧的处理速度,按照 24 帧的 1s 算,能够达到 16 倍率的转换速度,也就是 1 个小时能够转 16 个小时的视频。速度还不错,几天就转完了全部的视频。

软件安装

安装 ffmpeg

从官网下载,官方下载地址。下面以 windows 为例:

点击进入下载网站,选择如下版本:

ffmpeg

下载完毕后,解压,将 bin 目录加入到环境变量 Path 中,就不用输全路径了。

cuda 硬件加速(非 nvdia 显卡忽略)

要使用 cuda 加速,除了显卡驱动外,还必须安装他的 cuda toolkit,下载路径,选择自己的平台对应参数:

cuda下载

下载完毕后安装即可

qsv 硬件加速

intel 的硬件加速,只需要按照好显卡驱动即可,无需额外安装什么。

ffmpeg 使用

主要命令如下:

ffmpeg.exe -hwaccel cuda -c:v h264_cuvid -i "input.mkv" -c:v hevc_nvenc -maxrate 2500K -c:a copy -y "output.mkv"

参数含义解释

  • -hwaccel cuda 设置硬件加速类型,可通过ffmpeg -hwaccels命令获取支持的加速方案。比如下图: 加速方案
  • -c:v h264_cuvid 设置编解码方式,-i 之前的就是设置解码方案,-i 之后的就是编码方案.这个是设置使用 cuda 来解码视频。可通过ffmpeg -codecs查看编解码器。比如(sls 筛选数据):
  • -maxrate 2500K 设置视频码率,通过此参数来控制输出文件大小
  • -c:v hevc_nvenc 解释同上。这个是设置使用 cuda 来进行编码视频。
  • -c:a copy 音频不做处理,直接复制,这样能加快速度,毕竟一般音频用不了多少空间。
  • -y 当目标文件存在时直接覆盖

编码器查询

ffmpeg -encoders | sls h264

上面的命令查询 h264 的编码器,如想查询其他的编码器直接修改 sls 后面内容即可

其中 nvenc 结尾的为 cuda 加速方案,qsv 结尾的为 intel 加速方案

解码器查询

ffmpeg -decoders | sls h264

上面的命令查询 h264 的解码器,如想查询其他的解码器直接修改 sls 后面内容即可

其中 nvenc 结尾的为 cuda 加速方案,qsv 结尾的为 intel 加速方案

常用示例

# cuda解码h264,编码h265
ffmpeg.exe -hwaccel cuda -c:v h264_cuvid -i "input.mkv" -c:v hevc_nvenc -maxrate 2500K -c:a copy -y "output.mkv"

# cpu解码,cuda编码h265
ffmpeg.exe -hwaccel cuda  -i "input.mkv" -c:v hevc_nvenc -maxrate 2500K -c:a copy -y "output.mkv"

# qsv解码h264,编码h265
ffmpeg.exe -hwaccel qsv -c:v h264_qsv -i "input.mkv" -c:v hevc_qsv -maxrate 2500K -c:a copy -y "output.mkv"

# cpu解码,qsv编码h265
ffmpeg.exe -hwaccel qsv -i "input.mkv" -c:v hevc_qsv -maxrate 2500K -c:a copy -y "output.mkv"

相关代码

为了实现批量转换视频,我写了一个node脚本,有兴趣的可以瞅瞅批量转换