python之使用ffmpeg下载直播推流视频rtmp、m3u8协议实时获取时间进度
一、ffmpeg下载
录制函数
def download_video_by_live_url():playUrl = "rtmp://....." #推流url:rtmp、m3u8等print(f"已开始录制: playUrl:{playUrl}")now_time = datetime.now().strftime('%Y_%m_%d__%H_%M_%S')output_file = now_time + ".mp4"output_file = re.sub(r'[\\/:*?"<>|]', '', output_file)ffmpeg_command = ["ffmpeg","-i", playUrl,"-c", "copy","-f", "mp4",output_file]process = subprocess.Popen(ffmpeg_command,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True, # decode bytes to strencoding="utf-8",bufsize=1)time_pattern = re.compile(r'time=(\d+:\d+:\d+\.\d+)')start_time = time.time()try:for line in process.stderr:line = line.strip()if 'time=' in line:match = time_pattern.search(line)if match and time.time() - start_time > 10:start_time = time.time()current_time = match.group(1)print(f" Progress: {current_time}", flush=True)if 'No such stream' in line:print(f"直播结束,结束录制!")breakexcept KeyboardInterrupt:print(f"检测到手动中断,正在优雅停止 ffmpeg...")process.stdin.write('q'.encode("GBK"))process.communicate()process.kill()except Exception as e:print(f"[{current_name}][{nickname}]录制出错: {e}")process.wait()