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记录当前时刻的视频大小和名称,对比变化,判断是不是出问题。
如果出问题了,就中断进程。

### 回答1: 使用 ffmpeg 获取 MP3 文件时长的命令是: ``` ffmpeg -i input.mp3 2>&1 | grep "Duration" | awk '{print $2}' ``` 这个命令会输出 MP3 文件的时长,例如:00:01:23.45 (表示1分23秒) ### 回答2: 使用FFmpeg可以很方便地获取MP3的时长。首先,我们需要下载并安装FFmpeg软件包,然后打开命令提示符或终端窗口。 在命令提示符或终端中输入以下命令: ffmpeg -i input.mp3 其中,input.mp3是你要获取时长的MP3文件名。执行上述命令后,FFmpeg将会输出一些信息,包括输入的MP3文件的时长。在输出信息中,可以找到如下行: Duration: 00:04:32.40 这行中的00:04:32.40即是MP3文件的时长,格式为时:分:秒.毫秒。 ### 回答3: 要获取MP3的时长,可以使用FFmpeg这个功能强大的开源多媒体处理工具。下面是使用FFmpeg获取MP3时长的步骤: 1. 首先,你需要安装FFmpeg并配置环境变量,以便在命令行中使用。 2. 打开命令行终端,并进入存储有你的MP3文件的目录。 3. 在命令行中输入以下命令: ``` ffmpeg -i filename.mp3 2>&1 | grep 'Duration' ``` 其中,“filename.mp3"是你要获取时长的MP3文件名。 4. 按下回车键执行该命令,FFmpeg会分析并显示MP3文件的信息。在输出结果中,你可以找到关于时长的信息。 例如,输出结果可能类似于: ``` Duration: 00:04:32.33, start: 0.000000, bitrate: 192 kb/s ``` 在这个例子中,MP3文件的时长为4分钟32.33秒。 通过上述步骤,你可以通过使用FFmpeg在命令行中获取MP3的时长信息。注意,FFmpeg还可以执行许多其他音视频处理任务,比如格式转换、剪辑和编辑等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值