首先需要安装FFmpeg处理媒体文件、ffmpy调用FFmpeg
sudo apt install ffmpeg
pip install ffmpy
FFmpeg的ffprobe命令用于解析媒体文件信息,比如:
ffprobe -show_streams -select_streams v -i /home/root/example.mp4
其中-i表示媒体文件路径,-show_streams
用于选择媒体流的整体信息,-select_streams v
用于筛选视频信息,过滤音频信息
详细参数可以参考ffprobe Documentation
在python中调用ffmpeg代码:
from ffmpy import FFmpeg, FFprobe
from subprocess import Popen, PIPE
import json
def video_info(video_path):
"""
接受视频路径, 读取视频信息
:param video_path: 视频路径
:return: 视频帧率
"""
# 构建FFmpeg命令行
ff = FFprobe(
global_options='-of json -show_streams -select_streams v',
inputs={video_path: None},
)
# ffmpeg默认输出到终端, 但我们需要在进程中获取媒体文件的信息
# 所以将命令行的输出重定向到管道, 传递给当前进程
res = ff.run(stdout=PIPE, stderr=PIPE)
video_stream = res[0]
# 解析视频流信息
video_detail = json.loads(video_stream).get('streams')[0]
# 获取视频实际帧率, 计算取整
frame_rate = round(eval(video_detail.get('r_frame_rate')))
# 返回码率
return frame_rate
此外还可以根据需要获取平均帧率/avg_frame_rate, 码率/bit_rate, 最大码率/max_bit_rate, 帧数/nb_frames等信息