fffmpeg python3.8 拉rtsp流3分钟,并分析其I帧间隔,帧率,码率,分辨率,编码格式
时间: 2024-11-27 14:23:12 浏览: 12
windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流
FFmpeg是一个强大的跨平台命令行工具,常用于视频处理,包括抓取RTSP流。在Python 3.8中,你可以通过 subprocess 模块来调用FFmpeg的命令行功能。以下是使用FFmpeg拉取RTSP流、截取3分钟并分析关键信息的一个示例:
```python
import subprocess
import time
# RTSP地址
rtsp_url = "your_rtsp_url"
output_file = "video.mp4" # 输出文件名
# 拉取3分钟的RTSP流
start_time = time.time()
cmd = f"ffmpeg -i {rtsp_url} -t 180 -c copy {output_file}"
subprocess.run(cmd, capture_output=True, text=True)
# 分析视频信息
cmd_analyze = f"ffprobe -v error -select_streams v:0 -show_entries stream=avg_frame_rate,r_frame_rate,nb_frames,duration,nb_read_frames \
-of default=noprint_wrappers=1:nokey=1 {output_file}"
analyze_results = subprocess.check_output(cmd_analyze, shell=True).decode("utf-8")
# 解析输出
frame_rate_info = analyze_results.splitlines()[1:3]
i_frame_interval = None
for line in frame_rate_info:
if 'avg_frame_rate' in line:
avg_frame_rate = float(line.strip().split('=')[1])
i_frame_interval = 1 / avg_frame_rate
elif 'r_frame_rate' in line:
r_frame_rate = float(line.strip().split('=')[1])
frame_rate = int(r_frame_rate)
elif 'nb_frames' in line:
total_frames = int(line.strip().split('=')[1])
# 码率、分辨率和编码格式通常需要单独获取
cmd_extra = f"ffprobe -v quiet -select_streams v:0 -print_format json -show_format -show_streams {output_file}"
extra_results = subprocess.check_output(cmd_extra, shell=True).decode("utf-8")
json_data = json.loads(extra_results)
bitrate = json_data['format']['bit_rate']
width_height = json_data['streams'][0]['height'], json_data['streams'][0]['width']
codec_name = json_data['streams'][0]['codec_name']
# 结果打印
print(f"视频剪辑:{output_file}")
print(f"I帧间隔:{i_frame_interval}秒")
print(f"帧率:{frame_rate} fps")
print(f"码率:{bitrate} bps")
print(f"分辨率:{width_height[0]}x{width_height[1]}")
print(f"编码格式:{codec_name}")
#
阅读全文