硬解码 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资源。