Python获取FFMPEG转码进度

Python获取FFMPEG转码进度

关键词:subprocess

总的思路:从ffmpeg的stderr信息中 获取总时长和当前时长
progress = currentTime*100 / allTime

获取进度后,可以存储,也可以通过websocket方式通知

def get_seconds(time):
    h = int(time[0:2])
    m = int(time[3:5])
    s = int(time[6:8])
    ms = int(time[9:12])
    ts = (h * 60 * 60) + (m * 60) + s + (ms / 1000)
    return ts


def do_ffmpeg_transcode(cmd):
    process=subprocess.Popen(cmd,stderr=subprocess.PIPE,bufsize=0,universal_newlines=True,shell=True)
    
    compute_progress_and_send_progress(process)
    return process.returncode == 1:

def compute_progress_and_send_progress(process):
    duration = None
    while process.poll() is None:
        line = process.stderr.readline().strip()
        if line:
            duration_res = re.search(r'Duration: (?P<duration>\S+)', line)
            if duration_res is not None:
                duration = duration_res.groupdict()['duration']
                duration = re.sub(r',', '', duration)

            result = re.search(r'time=(?P<time>\S+)', line)
            if result is not None and duration is not None:
                elapsed_time = result.groupdict()['time']

                currentTime =  get_seconds(elapsed_time)
                allTime = get_seconds(duration)

                progress = currentTime * 100/allTime
                print(progress)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值