Files
python----/RTSP录制音频.py
admin 2d8c1ea8f9 chore: 批量新增各类工具脚本与配置文件
1. 新增音频录制、下载、上传相关脚本
2. 新增数据库操作、API调用工具
3. 新增Excel数据处理脚本
4. 新增弱密码检测脚本
2026-06-14 17:47:15 +08:00

91 lines
2.9 KiB
Python

import subprocess
import time
from datetime import datetime
import os
# RTSP 流地址
rtsp_url = "rtsp://10.68.66.174/audio"
# 录制时长(分钟)
duration_minutes = 60
output_filename = f"rtsp_recording_{datetime.now().strftime('%Y%m%d_%H%M%S')}.wav"
print(f"开始录制 RTSP 音频流...")
print(f"RTSP 地址: {rtsp_url}")
print(f"录制时长: {duration_minutes} 分钟")
print(f"保存路径: {output_filename}")
print(f"按 Ctrl+C 停止录制")
print("-" * 50)
# 转换为秒
duration_seconds = duration_minutes * 60
try:
# 使用 ffmpeg 录制 RTSP 流
# -rtsp_transport tcp 使用 TCP 协议,更稳定
# -t 指定录制时长
# -acodec pcm_s16le 输出 PCM WAV 格式
cmd = [
'ffmpeg',
'-rtsp_transport', 'tcp',
'-i', rtsp_url,
'-t', str(duration_seconds),
'-acodec', 'pcm_s16le',
'-ar', '16000', # 采样率
'-ac', '1', # 单声道
'-y', # 覆盖已存在的文件
output_filename
]
print(f"执行命令: {' '.join(cmd)}")
print("开始录制...")
# 执行 ffmpeg 命令
process = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True
)
# 用于跟踪进度的变量
start_time = time.time()
last_size = 0
# 实时输出 ffmpeg 的日志
for line in iter(process.stdout.readline, ''):
if line:
# 检查文件大小变化
if os.path.exists(output_filename):
current_size = os.path.getsize(output_filename)
if current_size != last_size:
elapsed = time.time() - start_time
size_mb = current_size / (1024 * 1024)
progress = (elapsed / duration_seconds) * 100 if duration_seconds > 0 else 0
print(f"进度: {int(elapsed)}秒 / {duration_seconds}秒 ({progress:.1f}%), 大小: {size_mb:.2f}MB", end='\r')
last_size = current_size
process.wait()
# 录制完成
elapsed = time.time() - start_time
if os.path.exists(output_filename):
size_mb = os.path.getsize(output_filename) / (1024 * 1024)
print(f"\n\n录制完成!")
print(f"总时长: {int(elapsed)}秒 ({elapsed/60:.1f}分钟)")
print(f"文件大小: {size_mb:.2f}MB")
print(f"保存路径: {os.path.abspath(output_filename)}")
else:
print("\n录制失败,文件未生成")
except KeyboardInterrupt:
print(f"\n\n录制已手动停止")
if os.path.exists(output_filename):
size_mb = os.path.getsize(output_filename) / (1024 * 1024)
elapsed = time.time() - start_time
print(f"已录制: {int(elapsed)}秒")
print(f"文件大小: {size_mb:.2f}MB")
print(f"保存路径: {os.path.abspath(output_filename)}")
except Exception as e:
print(f"\n错误: {e}")