【发布时间】: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