我正在开发一个可以下载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个更长的控制台。下载较长的视频时,最后一个控制台变得无法忍受。
有可能摆脱那些吗?
答案 0 :(得分:1)
问题与代码无关。事实上,它更像是一个“窗户问题”。如果我在我的计算机上运行代码(这是一个linux),没有问题。只有一个控制台(我用来启动脚本的控制台)。
我认为如果您使用.pyw
重命名该文件,它将起作用。根据该链接:How to hide console window in python?
在Windows系统上,没有“可执行模式”的概念。 Python安装程序会自动将.py文件与python.exe相关联,这样双击Python文件就会将其作为脚本运行。扩展名也可以是.pyw,在这种情况下,通常出现的控制台窗口会被抑制。
这将解决您的问题
(如果没有,也许你可以在控制台中运行代码(而不是双击文件浏览器)来查看问题的来源并给我一些反馈:))