Python中定时录制在线网页广播有什么成熟的方案?
有一个想法,有没有办法实现,就是用现在买的云主机,定时录制在线网页广播,有没有什么成熟的方案可以用 请各位大佬指导下。
Python中定时录制在线网页广播有什么成熟的方案?
2 回复
对于定时录制在线网页广播,一个成熟的方案是结合 schedule 库进行任务调度,并使用 ffmpeg 或 streamlink 来捕获和录制音频流。下面是一个完整的示例,展示如何定时录制一个已知流媒体地址的广播。
import schedule
import time
import subprocess
import datetime
import os
def record_stream(stream_url, duration_seconds, output_dir="./recordings"):
"""
录制指定时长的音频流。
:param stream_url: 音频流的URL
:param duration_seconds: 录制时长(秒)
:param output_dir: 输出目录
"""
# 确保输出目录存在
os.makedirs(output_dir, exist_ok=True)
# 生成基于当前时间的文件名
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
output_file = os.path.join(output_dir, f"recording_{timestamp}.mp3")
# 使用ffmpeg录制流
# -i 输入流URL
# -t 录制时长
# -acodec copy 直接复制音频编解码器(如果流是MP3格式)
command = [
'ffmpeg',
'-i', stream_url,
'-t', str(duration_seconds),
'-acodec', 'copy',
output_file
]
try:
print(f"开始录制: {timestamp}")
subprocess.run(command, check=True, timeout=duration_seconds + 10)
print(f"录制完成,保存至: {output_file}")
except subprocess.CalledProcessError as e:
print(f"录制过程中出现错误: {e}")
except subprocess.TimeoutExpired:
print("录制超时,强制结束")
def job():
"""定时任务:每天上午8点录制5分钟的广播"""
stream_url = "http://example.com/radio-stream" # 替换为实际的流媒体URL
record_stream(stream_url, duration_seconds=300)
# 设置定时任务:每天8:00执行
schedule.every().day.at("08:00").do(job)
print("定时录制任务已启动,等待执行...")
# 保持脚本运行,检查定时任务
while True:
schedule.run_pending()
time.sleep(1)
关键点说明:
- 流媒体地址:你需要将
stream_url替换为实际的广播流URL。通常可以在网页源代码或开发者工具的Network标签中找到。 - 录制工具:示例使用了
ffmpeg,它是一个强大的多媒体处理工具,支持大多数音频流格式。如果流是HLS或DASH,ffmpeg也能处理。 - 定时调度:
schedule库提供了简洁的API来设置定时任务,支持分钟、小时、天等周期。 - 输出管理:录制文件会按时间戳命名,避免覆盖,并保存在指定目录中。
依赖安装:
pip install schedule
# ffmpeg需要单独安装,可以从官网下载或使用包管理器:
# Ubuntu: sudo apt-get install ffmpeg
# macOS: brew install ffmpeg
# Windows: 从ffmpeg官网下载并添加到环境变量
如果广播流需要认证或具有动态URL,你可能需要先用 requests 或 selenium 获取最新的流地址。对于复杂的网页交互(如点击播放按钮),selenium 是更可靠的选择。
总结:用 schedule 定时,ffmpeg 录制。
用 cronjob+rtmpdump ?

