【问题标题】:Hide ffmpeg's console window when running YoutubeDL in GUI application在 GUI 应用程序中运行 YoutubeDL 时隐藏 ffmpeg 的控制台窗口
【发布时间】:2016-10-16 14:53:34
【问题描述】:

我正在开发一个可以下载 YouTube 视频的基本应用程序。在整个开发过程中,我遇到了一些怪癖,包括格式问题。

我决定使用一种希望万无一失的格式语法,youtube-dl 几乎在任何情况下都会很乐意为我下载。

我的部分 YoutubeDL 选项如下所示:

self.ydl_opts = {
    'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
    'quiet': True,
    'progress_hooks': [self.ydl_progress],
    'outtmpl': None
}

outtmpl 稍后在用户选择输出文件夹时插入。

由于我使用的是这种格式字符串,所以 youtube-dl 使用 ffmpeg 来合并(?)音频和视频(如果它们是单独下载的)。

当它这样做时,它会打开非常烦人的控制台窗口,这些窗口会捕捉焦点并打断我在下载视频时可能正在做的其他事情。

我的问题是,我怎样才能防止 ffmpeg 或 youtube-dl 创建这些控制台窗口,又名。我该如何隐藏它们?

编辑

我将提供重现问题的简单脚本:

from __future__ import unicode_literals
from PyQt4 import QtGui, QtCore
import youtube_dl, sys

def on_progress(info):
    print info.get("_percent_str", "Finished")

ydl_opts = {
    'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
    'progress_hooks': [on_progress],
    'quiet': True,
    'outtmpl': "C:/Users/Raketa/Desktop/%(title)s.%(ext)s"
}

ydl = youtube_dl.YoutubeDL(ydl_opts)

class DownloadThread(QtCore.QThread):
    def __init__(self):
        super(DownloadThread, self).__init__()
        self.start()

    def __del__(self):
        self.wait()

    def run(self):
        print "Download start"
        ydl.download(["https://www.youtube.com/watch?v=uy7BiiOI_No"])
        print "Download end"

class Application(QtGui.QMainWindow):
    def __init__(self):
        super(Application, self).__init__()
        self.dl_thread = DownloadThread()

    def run(self):
        self.show()

def main():
    master = QtGui.QApplication(sys.argv)

    app = Application()
    app.run()

    sys.exit(master.exec_())

if __name__ == '__main__':
    main()

每次下载开始时会出现 2(?) 个控制台,下载视频和音频时会出现 1 个更持久的控制台。当下载较长的视频时,最后一个控制台变得难以忍受。

是否有可能摆脱这些?

【问题讨论】:

    标签: python ffmpeg youtube-dl


    【解决方案1】:

    问题实际上与代码无关。实际上,这更像是一个“Windows问题”。如果我在我的计算机上运行代码(这是一个 linux 计算机),就没有问题。只有一个控制台(我用来启动脚本的那个)。

    我认为如果您将文件重命名为.pyw,它将起作用。根据该链接:How to hide console window in python?

    在 Windows 系统上,没有“可执行模式”的概念。 Python 安装程序会自动将 .py 文件与 python.exe 关联,以便双击 Python 文件将其作为脚本运行。扩展名也可以是.pyw,在这种情况下,通常出现的控制台窗口会被抑制。

    这会解决你的问题

    (如果没有,也许您可​​以在控制台中运行代码(而不是双击文件浏览器)以查看问题出在哪里并给我一些反馈:))

    【讨论】:

    • 当你说“文件”时,你是指我的代码文件还是一些 youtube-dl 的代码文件?
    • 顺便说一下,将我的 *.py 文件重命名为 *.pyw 并没有隐藏 ffmpeg 的控制台窗口。我不确定在控制台中运行代码会有什么帮助。基本上,youtube-dl 使用 ffmpeg(或 aconv)来读取/写入/合并音频/视频文件。当它运行这些时,它会打开我试图摆脱的控制台窗口。
    • 好的。我会把我的电脑转到windows来寻找解决方案。我会尝试在几分钟(20-30 分钟)内给出解决方案。然后,我将编辑我的帖子:)
    • 应该是你安装ffmpeg的问题。我在 32 位 Windows 7 上完成了 python2.7 + PyQT + youtube-download 的全新安装。当我启动扩展名为 .py 的文件时,我只有一个控制台 + 一个 GUI 应用程序。当我用 .pyw 重命名它时,我只得到 GUI 应用程序(如预期的那样)。我建议你检查一下: - 你的“基本脚本”真的接近你的原始脚本吗? - 您的脚本是否在另一台计算机(如我的)上按预期运行?这表明安装错误:s
    猜你喜欢
    • 2011-03-17
    • 2011-04-20
    • 2014-06-18
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2011-04-04
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多