微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python,从 FFMPEG 中抓取帧数

如何解决Python,从 FFMPEG 中抓取帧数

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

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 提供。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。