问题描述
我正在使用脚本将图像序列编译成视频。
def ffmpeg_image_sequence(image_sequence,video,fps,encoder):
global task
task = False
path = os.path.dirname(os.path.realpath(image_sequence))
image_format = {
'png': '\%06d.png','iff': '\%06d.tiff','tif': '\%06d.tif','jpg': '\%06d.jpg'
}
sequence = path + image_format[image_sequence[-3:]]
output_options = {
'crf': 20,'preset': 'slow','movflags': 'faststart','pix_fmt': 'yuv420p','c:v': encoder,'b:v': '20M'
}
try:
(
ffmpeg
.input(sequence,framerate=fps)
.output(video,**output_options)
).run()
except ffmpeg.Error as e:
warning(str(e))
task = True
我使用 wxPython 作为 GUI,使用 ffmpeg 来编译框架:
import wx
import ffmpeg
我在自己的类中运行上述函数,以便它可以在不同的线程中运行,从而允许状态栏随着时间的推移而更新。
def wait(start,text):
time.sleep(.05)
time_running = round(time.time() - start)
update_status_bar(main_window,text + ' (Time Elapsed: ' + seconds_to_str(time_running) + ')')
我想用预计到达时间和完成百分比替换它。运行ffmpeg_image_sequence函数时弹出的窗口显示如下信息:
frame=1234 fps= 16 q=13.0 size= 56789kB time=00:38:48.36 bitrate=12345.6kbits/sec speed=0.681x
从打印到该窗口的内容中,我想获取当前的 frame= 值以确定过程完成的百分比,然后显示更多类似的内容:
def wait(text,frame,number_of_frames):
time.sleep(.05)
current_frame = frame
number_of_frames = number_of_files_in_dir - 1
percentage = round(current_frame / number_of_frames,1)
update_status_bar(main_window,text + ' ' + percentage + '% ' + Completed)
通过一些数学运算来计算完成的预计到达时间。
那么,有没有办法从 ffmpeg 中获取输出文本并将该 frame= 数字转换为变量?
解决方法
您可以尝试通过在 ffmpeg 包之外构建 ffmpeg 命令并直接运行该过程来复制 this method。您可以将 DUR_REGEX 正则表达式替换为捕获帧而不是持续时间的正则表达式。
如果您不需要框架,则可以保持原样。它已经产生了百分比的进步。
链接由 slhck here 提供。