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)