• python利用ffmpeg实现视频流的下载,并分段保存


    一段示例代码。self._running是线程运行参数,=TRUE;
    get_random_ua()是生成一个user_agent,也可以写成固定字符串,例如“Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 SE 2.X MetaSr 1.0”;
    Splittimes 是分段的时长,单位"秒";
    filename 不用解释,包含全路径;
    注释掉的Splitsizes 是分段的大小,单位"字节";

    1. while self._running:
    2. now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    3. print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") ,f'第{i}次录制')
    4. print(f'录制url:{url}')
    5. houzhui=re.findall("\.\w+",url)[-1]
    6. print(f'文件后缀名:{houzhui}')
    7. filenameshort=now +houzhui
    8. filename=filepath+'/'+filenameshort #os.path.join(filepath, filenameshort) #
    9. print(url)
    10. print("\r"," 分段录制视频中: ",filename, " 每录满: %d 分钟 存一个视频"%Splittime)
    11. #logger.info(f'{filename}录制')
    12. try:
    13. logger.info(f'{filename}开始录制')
    14. p = subprocess.check_output([
    15. ffmpeg_path, "-y",
    16. "-v","verbose",
    17. "-rw_timeout","10000000", # 10s
    18. "-loglevel","error",
    19. "-hide_banner",
    20. "-user_agent",get_random_ua(),
    21. "-protocol_whitelist","rtmp,crypto,file,http,https,tcp,tls,udp,rtp",
    22. "-thread_queue_size","1024",
    23. "-analyzeduration","2147483647",
    24. "-probesize","2147483647",
    25. "-fflags","+discardcorrupt",
    26. "-i",url,
    27. "-bufsize","5000k",
    28. "-map","0",
    29. "-sn","-dn",
    30. "-reconnect_delay_max","30","-reconnect_streamed","-reconnect_at_eof",
    31. "-c:v","copy",
    32. "-c:a","copy",
    33. "-max_muxing_queue_size","64",
    34. "-correct_ts_overflow","1",
    35. "-f","mpegts",
    36. #"-fs",str(Splitsizes),
    37. "-t",str(Splittimes),
    38. "{path}".format(path=filename),
    39. ], stderr = subprocess.STDOUT)
    40. except subprocess.TimeoutExpired as time_e:
    41. print(time_e)
    42. logger.info(time_e)
    43. time.sleep(5)
    44. continue
    45. except subprocess.CalledProcessError as call_e:
    46. print(call_e.output.decode(encoding="utf-8"))
    47. if 'NOT' in call_e.output.decode(encoding="utf-8").upper() or 'ERROR' in call_e.output.decode(encoding="utf-8").upper():
    48. logger.info('直播结束')
    49. logger.info( call_e.output.decode(encoding="utf-8"))
    50. #sched2.shutdown(wait=False)
    51. break
    52. time.sleep(5)
    53. continue
    54. except Exception as e:
    55. print(e)
    56. logger.info(e)
    57. if "error" in str(e): #Unknown error
    58. logger.info('录制非正常结束2')
    59. #sched2.shutdown(wait=False)
    60. time.sleep(5)
    61. continue

  • 相关阅读:
    Mybatis查询结果处理
    关于ASPICE 4.0评估师资质更新的说明-亚远景科技
    Sonar代码审查
    【算法专题突破】双指针 - 三数之和(7)
    企业数字化转型建设过程中需要哪些能力?
    大数据之Hadoop_Yarn的基本介绍,及入门程序的书写
    redis的常用命令及使用特点
    React之组件定义和事件处理
    dreamweaver作业静态HTML网页设计——我的家乡海南旅游网站
    【ML】使用 ARIMA 进行时间序列预测
  • 原文地址:https://blog.csdn.net/cc605523/article/details/140376578