所以我正在使用handbrake和python根据时间表对视频进行编码。我需要监视进度,因为我用它来估计编码时间。然后我可以把它放到我的调度程序上。
我遇到了从流程中获取ETA和%完成的问题。这是我到目前为止所拥有的
profile = ["HandBrakeCLI","-i",input,"-o","output","-e","x264"]
cp = subprocess.Popen(profile, stderr=subprocess.PIPE, bufsize=1)
for line in iter(cp.stderr.readline, b''):
# regex match for % complete and ETA
matches = re.match( r'.*(\d+\.\d+)\s%.*ETA\s(\d+)h(\d+)m(\d+)s', line.decode('utf-8') )
if matches:
print( matches.group() )
print(line),
cp.stderr.close()
cp.wait()
它不匹配,实际上我并不完全确定发生了什么。当我运行我的脚本时,我看到ETA和%完成打印
Encoding: task 1 of 1, 1.19 % (45.57 fps, avg 62.74 fps, ETA 00h08m01s)
我尝试过使用stdout,但它也没有用。
答案 0 :(得分:0)
你需要从stdout读取,而不是stderr。
<?php
if(is_user_logged_in())
{
?>
<style type="text/css"> .search-label{ display:none !important; }</style>
<?php
}
?>
使用进度包装器(使用clint.textui.progress.Bar)并逐字节读取(适用于我):
profile = ["HandBrakeCLI","-i",input,"-o","output","-e","x264"]
cp = subprocess.Popen(profile, stderr=subprocess.PIPE, strout=subprocess.PIPE, bufsize=1)
for line in iter(cp.stdout.readline, b''):
# regex match for % complete and ETA
matches = re.match( r'.*(\d+\.\d+)\s%.*ETA\s(\d+)h(\d+)m(\d+)s', line.decode('utf-8') )
if matches:
print( matches.group() )
print(line),
cp.stderr.close()
cp.stdout.close()
cp.wait()
没有测试代码,重新编写它以匹配线程的初始帖子。
希望有所帮助。