【ffmpeg GPU硬解码】CPU与GPU在python环境下的视频硬解码对比

硬解码 FFMPEG视频解码测试

1、首先要确定ffmpeg编译安装成功

用以下代码测试ffmpeg gpu硬解码是否成功

ffmpeg -hwaccels

在这里插入图片描述如图,Hardware acceleration methods出现cuda即为安装成功。

2、安装ffmpeg-python包安装

pip install -i https://mirrors.aliyun.com/pypi/simple ffmpeg-python

3、准备一个视频用于测试解码

	找一个视频用多线程开20路线程用于解码,测试cpu利用率、gpu利用率和时间。

cpu代码:

import ffmpeg
import threading
import time

def thread_gpu(str, index):
    input_file = "/media/cv/09C1B27DA5EB573A/ljc/gpuVideo/fighttest2.avi"
    output_file = "/media/cv/09C1B27DA5EB573A/ljc/gpuVideo/fighttest_cpu_{_index}.avi".format(_index=index)
    # print(output_file)

    ffmpeg.input(input_file, hwaccel='nvdec').output(
        output_file,
        vcodec='h264',  # 使用软件编码器
        acodec='copy',  # 音频部分原样复制
        vf='scale=-2:720',  # 视频高度限制为720p
        strict='experimental'
    ).run(overwrite_output=True)

if __name__ == "__main__":
    t1 = time.time()

    for i in range(20):
        t = threading.Thread(target=thread_gpu, args=("", str(i)))
        t.start()
        t.join()

    t2 = time.time()
    print("CPU共用时:", t2-t1)

GPU代码:

import ffmpeg
import threading
import time

def thread_gpu(str, index):
    input_file = "/media/cv/09C1B27DA5EB573A/ljc/gpuVideo/fighttest2.avi"
    output_file = "/media/cv/09C1B27DA5EB573A/ljc/gpuVideo/fighttest_gpu_{_index}.avi".format(_index=index)
    # print(output_file)

    # 使用 ffmpeg-python 进行视频转码
    ffmpeg.input(input_file, hwaccel='nvdec').output(
        output_file,
        vcodec='h264_nvenc',  # 使用NVIDA进行h264解码
        acodec='copy',  # 音频原样复制
        vf='scale=-2:720',   # 高度限制为720P
        strict='experimental'
    ).run()

if __name__ == "__main__":
    t1 = time.time()

    for i in range(20):
        t = threading.Thread(target=thread_gpu, args=("", str(i)))
        t.start()
        t.join()

    t2 = time.time()
    print("GPU共用时:", t2-t1)

4、测试结果

ffmpeg gpu版本确实要更快一点,比cpu版本快三倍以上,而且两个版本代码都会使用gpu资源。

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值