前言
在上篇:在jetson中调用NVENC与NVDEC模块进行硬编解码中我们已经实现了调用硬编解码,那么在这篇文章中,我们将详细记录如何在Jetson平台上对FFmpeg实际测试对视频进行硬编解码处理。
实测过程
在这里我们上传一段视频进行硬解码测试并使用非硬解码处理,视频信息如下表所示:
视频信息
参数 | 数据 |
---|---|
大小 | 266MB |
时长 | 00:39:07 |
帧宽度 | 854 |
帧高度 | 480 |
数据速率 | 769kbps |
总比特率 | 941kbps |
帧速率 | 30.00帧/秒 |
在jetson设备中我们区别与在win中调用cuda加速那样 -cv:h264_cuvid ,在jetson中是使用 -c:v h264_nvmpi 进行的调用硬编解码操作,这里的硬编解码不占用GPU的计算单元,属于单独的计算单元。
ini
import os
import time
input_file = "input.mp4"
output_file = "output.mp4"
t1 = time.time()
# command_gpu = f"ffmpeg -c:v h264_nvmpi -i {input_file} -c:v h264_nvmpi {output_file}"
command_cpu = f"ffmpeg -c:v h264 -i {input_file} -c:v h264 {output_file}"
os.system(command_cpu)
print(time.time() - t1)
分别运行上述代码中的cpu 与gpu部分代码,对其运行过程中的核心信息具有差异性的部分截图如下所示。我们可以看出二者在耗时方面的确是有一些差异。具体原因后续再逐步分析。
log信息截图:
jtop信息截图:
总结
我们通过一个对视频进行转解码的操作指令分别进行实验,可以得到在时间消耗上二者存在差异,在资源的消耗方面也存在差异。由于这里的ffmpeg是已经由jetson-ffmpeg和ffmpeg联合编译得到的,所以在编码阶段二者都调用了NVENC部分,或许这部分不够严谨。