【问题标题】:How to display converting progress of write_audiofile from moviepy in PyQt5 app?如何在 PyQt5 应用程序中显示来自 moviepy 的 write_audiofile 的转换进度?
【发布时间】:2021-01-22 19:19:37
【问题描述】:

我想使用 moviepy 库中的 write_audiofile 函数将 mp4 文件转换为 mp3 文件,并使用进度条在 PyQT5 应用程序中显示进度。

当我使用时:

mp4audio.write_audiofile(filename, logger="bar")

它在控制台中显示一个进度条,那么我可以通过某种方式访问​​该进度变量并使用它来更新 PyQt5 应用程序中的进度条吗?

我也试过这个:

from proglog import ProgressBarLogger
from my_library import my_routine

class MyBarLogger(ProgressBarLogger):

    def callback(self, **changes):
        # Every time the logger is updated, this function is called with
        # the `changes` dictionnary of the form `parameter: new value`.

        for (parameter, new_value) in changes.items():
            print ('Parameter %s is now %s' % (parameter, value))

logger = MyBarLogger()
my_routine(logger=logger)

但它只在开始和结束时写下消息。不是进展。

Parameter message is now MoviePy - Writing audio in C:/Users/.../file.mp3
Parameter message is now MoviePy - Done.

请问有人知道解决办法吗?

【问题讨论】:

  • 看来moviepy使用proglog,所以你可以实现你自己的ProgressBarLogger子类,覆盖它的callback并使用它的一个实例作为logger参数write_audiofile()。跨度>

标签: python pyqt5 progress-bar moviepy


【解决方案1】:

proglog 似乎没有很好地记录,但ProgressBarLogger 中的callback 可以访问一次性消息,但进度本身需要bars_callback

class MyBarLogger(ProgressBarLogger):
    def callback(self, **changes):
        # Every time the logger message is updated, this function is called with
        # the `changes` dictionary of the form `parameter: new value`.
        for (parameter, value) in changes.items():
            print ('Parameter %s is now %s' % (parameter, value))
    def bars_callback(self, bar, attr, value,old_value=None):
        # Every time the logger progress is updated, this function is called        
        percentage = (value / self.bars[bar]['total']) * 100
        print(bar,attr,percentage)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多