gpt4 book ai didi

Python,从 FFMPEG 中获取帧号

转载 作者:行者123 更新时间:2023-12-04 23:07:16 25 4
gpt4 key购买 nike

我正在使用脚本将图像序列编译成视频。

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) + ')')
我想用 ETA 和完成百分比替换它。运行 时弹出的窗口ffmpeg_image_sequence 函数显示以下信息:
frame=1234 fps= 16 q=13.0 size= 56789kB time=00:38:48.36 bitrate=12345.6kbits/sec speed=0.681x
从打印到该窗口的内容中,我想获取当前的 帧= 值来确定过程完成的百分比,然后显示更像:
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 中获取输出文本并将其转为 帧= 数成变量?

最佳答案

你可以尝试复制this method通过在 ffmpeg 包之外构建您的 ffmpeg 命令并直接运行该进程。您可以将 DUR_REGEX 正则表达式替换为捕获帧而不是持续时间的正则表达式。
如果您对框架没有其他需求,则可以保持原样。它已经产生了百分比的进步。
链接由 slhck here 提供.

关于Python,从 FFMPEG 中获取帧号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65853167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com