ffmpeg录制但时长不变

需求

使用ffmpeg,对直播流进行下载,实现无人值守的自动录制。
比如对抖音的直播,通过ffmpeg直接下载到本地。

问题

一段时间的测试过后,发现使用ffmpeg下载会出现问题:

  1. 有时候明明直播已经结束了,而ffmpeg还显示在录制中。
  2. 有时候ffmpeg明明是正在录制,而且直播也没问题,但是下载到本地的视频时长不变。比如:直播1小时,ffmpeg从头下载到尾,没有人为打断的情况下,在第30分钟的时候停止下载了,但是ffmpeg显示正在录制。只有结束了你才能发现问题。

解法

以上两个问题,没查到什么解法。
我只好通过物理手段进行解决了。就是不断探查本地视频的时长,看是否在稳定增长,当检测到视频时长已经不变的时候,中断ffmpeg。
重新探测是否正在直播,如果正在直播则重新录制。
(因为正在下载的视频时长不好检测,所以改为通过检测视频大小来确定是否出问题)

刚开始的代码:

_output = subprocess.check_output(ffmpeg_command,stderr=subprocess.STDOUT)

解决代码:

_output = subprocess.Popen(ffmpeg_command, stdin=subprocess.PIPE, shell=False)
last_size = 0
last_name = ''
while True:
    time.sleep(5)
    mp4_path = get_last_file_name(full_path)
    file_size = os.path.getsize(mp4_path)
    print("文件大小:", file_size, os.path.basename(mp4_path))
    if file_size == last_size and last_name == mp4_path:
        _output.stdin.write('q'.encode("GBK"))  # Simulate user pressing q key
        _output.communicate()
        _output.wait()
        break
    last_size = file_size
    last_name = mp4_path

因为我的ffmpeg命令中,设置了视频自动分段,所以视频的路径不是固定的。
所以我用get_last_file_name去检测目标文件夹下的最后一个视频,即最新视频。
通过last_size和last_name记录上一时刻的视频大小和名称,file_size和mp4_path记录当前时刻的视频大小和名称,对比变化,判断是不是出问题。
如果出问题了,就中断进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值