使用AscendFFmpegPlugin转换mp4为h264,h265格式

背景知识

  • FFmpeg 简介
    • FFmpeg 是一个开源的跨平台音视频处理工具集。它可以用于处理各种音视频格式的编码、解码、转码、过滤等操作。
    • AscendFFmpegPlugin 是在 FFmpeg 基础上可能进行了优化或者针对特定硬件(如 Ascend 芯片等)适配的插件,用于增强 FFmpeg 在某些场景下的性能。

  • MP4 格式
    • MP4 是一种常见的多媒体容器格式。它可以包含视频流、音频流以及字幕等多种数据。例如,我们常见的电影、视频教程等很多都是以 MP4 格式存储的。它的视频和音频数据是经过编码后封装在这个容器中的,像视频可能是采用 H.264、H.265 等编码格式进行编码,音频可能是 AAC 等格式。

  • H.264 和 H.265 格式
    • H.264 和 H.265 是视频编码标准。
    • H.264
      • 也称为 MPEG - 4 AVC(Advanced Video Coding)。它通过一系列复杂的算法对视频图像进行压缩,以减少视频数据量。这样可以在保证一定视频质量的情况下,降低存储和传输所需的带宽。例如,网络视频流、数字电视广播等很多场景都广泛使用 H.264 编码。
      • H.264 编码过程中会将视频帧分为 I 帧(关键帧)、P 帧(预测帧)和 B 帧(双向预测帧)等不同类型的帧进行处理,通过帧间预测和变换编码等技术来压缩数据。

  • H.265
    • H.265 采用了更先进的编码技术,如更大的编码单元、更灵活的预测模式等,使得它在压缩效率上有很大提升。
    • 也称为 HEVC(High - Efficiency Video Coding)。它是 H.264 的继任者,相比 H.264 在相同视频质量下可以实现更高的压缩比。这意味着在存储和传输视频时可以占用更少的空间和带宽。例如,对于 4K 及更高分辨率的视频,使用 H.265 编码可以显著减少数据量。
  • 转换过程的作用
    • 当使用 FFmpeg 将 MP4 转换为 H.264 或 H.265 格式时,实际上是从 MP4 这个容器格式中提取出视频流,然后按照 H.264 或 H.265 的编码标准对视频流进行重新编码。
    • 这样做的目的可能有多种。例如,如果要在某个只支持 H.264 或 H.265 格式的设备上播放视频,就需要进行这种转换;或者为了减少视频文件的大小,以便更高效地存储或传输,因为在某些情况下,H.264 或 H.265 编码后的视频文件大小可能比 MP4 中原有的视频编码格式更小。

支持的产品

mxVison ascend 硬件平台内置了视频相关的硬件加速解码器, 为了提升用户的易用性,Vision SDK提供了FFmepg-Plugin解决方案。

其处理流程为:

准备芯片及环境 -> 安装CANN版本包 -> 下载开源FFmpeg代码 -> 拉取FFmpeg-Plugin代码 -> 应用patch -> 编译 -> 执行

1、环境

支持需要卡:Atlas 300I ProAtlas 300V ProAtlas A500

插件链接及参数说明:VisionSDK/AscendFFmpegPlugin · Ascend/mindxsdk-referenceapps - 码云 - 开源中国

插件支持264/265编解码,不用另外装x265程序

高效视频编码(HEVC,High Efficiency Video Coding),也称为H.265。

2、安装

# 克隆ffmpeg插件
git clone https://gitee.com/ascend/mindxsdk-referenceapps.git

# 进入补丁目录
cd mindxsdk-referenceapps/mxVision/AscendFFmpegPlugin

# 下载ffmpeg
wget https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n4.4.4.zip --no-check-certificate

# 解压
unzip n4.4.4.zip

# 进入目录
cd FFmpeg-n4.4.4

# 打补丁适配昇腾编解码
patch -p1 -f < ../ascend_ffmpeg.patch

# 设置编译环境变量
export ASCEND_HOME=/usr/local/Ascend
. /usr/local/Ascend/ascend-toolkit/set_env.sh

# 编译安装
./configure \
    --prefix=./ascend \
    --enable-shared \
    --extra-cflags="-I${ASCEND_HOME}/ascend-toolkit/latest/acllib/include" \
    --extra-ldflags="-L${ASCEND_HOME}/ascend-toolkit/latest/acllib/lib64" \
    --extra-libs="-lacl_dvpp_mpi -lascendcl" \
    --enable-ascend \
    && make -j && make install

# 设置运行环境变量(未设置会导致运行时参数不可用,调用不到ascend解码)
export LD_LIBRARY_PATH=/home/j60042934/ffmpeg/mindxsdk-referenceapps/mxVision/AscendFFmpegPlugin/FFmpeg-n4.4.4/ascend/lib:$LD_LIBRARY_PATH
export PATH=/home/j60042934/ffmpeg/mindxsdk-referenceapps/mxVision/AscendFFmpegPlugin/FFmpeg-n4.4.4:$PATH

# 验证安装
ffmpeg -version

3、 执行

3.1 h264图片h265

ffmpeg -i dvpp_vdec_h264_1frame_bp_51_1920x1080.h264 -s:v 1920x1080 -rc_mode 1 -r 25 -g 250 -b:v 8m dvpp_vdec_h264_1frame_bp_51_1920x1080.h265

3.2 mp4转264

ffmpeg -hwaccel ascend -c:v h264_ascend -resize 1920x1080 -i 1080p.mp4 -rc_mode 1 -b:v 8m -r 28 -g 250 -profile:v 2 -c:v h264_ascend 1080p.264

3.3 mp4转265

ffmpeg -hwaccel ascend -c:v h264_ascend -resize 1920x1080 -i 1080p.mp4 -rc_mode 1 -r 28 -g 250 -b:v 8m -c:v h265_ascend 1080p.265

3.4 265编码的mp4转265

ffmpeg -hwaccel ascend -c:v h265_ascend -resize 1920x1080 -i video_h265_1080p.mp4 -rc_mode 1 -r 28 -g 250 -b:v 8m -c:v h265_ascend 1080p.265

4、参数说明

-i :输入数据,-i参数前的是解码参数,-i参数后的是编码参数。 -c:v:指定解码器为 h264_ascend (解码 h265 格式可以使用 h265_ascend)。 -s:v/-resize:指定视频/图片大小。 可以去除视频的转码大小显示有问题的情况。 -rc_mode:指定视频编码器的速率控制模式(0: CBR, 1: VBR, 默认为 0)。 设定为1可以改善视频模糊情况。 CBR(Constant Bitrate)常数比特率,文件从头到尾都是一种位速率。相对于VBR来讲,它压缩出来的文件体积很大,而且画质相对于VBR不会有明显的提高。 VBR(Variable Bitrate)动态比特率,没有固定的比特率,压缩软件在压缩时根据视频数据即时确定使用什么比特率,这是以质量为前提兼顾文件大小的方式,推荐编码模式。 -r:frame rate,帧率,影响视频播放速度。 -g:关键帧间隔控制,视频跳转需要关键帧。 -b:v :video bitrate,视频比特率是指每秒传送的比特(bit)数。单位为bps(Bit Per Second),比特率越高,每秒传送数据就越多,画质就越清晰。 -profile:v:指定视频编码的画质级别(0: baseline, 1: main, 2: high, 默认为 1。 H265 编码器只支持 main)。 h264设定为2可以提升画质,消除瑕疵。

5、报错

现象:输入视频解码错误

原因与解决:h264编码的mp4视频用了-c:v h265_ascend参数,需改为使用-c:v h264_ascend参数解码。

现象:Ubuntu缺少so包

解决:

apt install libxcb-shape0-dev

原因与解决:h264编码的mp4视频用了-c:v h265_ascend参数,需改为使用-c:v h264_ascend参数解码。

现象:Ubuntu缺少so包

解决:

apt install libxcb-shape0-dev
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值