2016-06-15 2 views
3

Я разрабатываю базовое приложение, которое может загружать видео на YouTube. На протяжении всего развития у меня было несколько причуд, включая проблемы с форматами.Скрыть окно консоли ffmpeg при запуске приложения YoutubeDL в GUI

Я решил использовать надежный надежный формат синтаксиса, который 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 от создания тех окон консоли, которые появляются, ака. как я могу скрыть их?

EDIT:

я предоставлю голые кости скрипт, который воспроизводит проблему: (?)

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 более длительная консоль появляется, когда оба видео и аудио. При загрузке более длинных видео последняя консоль становится невыносимой.

Можно ли избавиться от них?

ответ

1

Проблема на самом деле не связана с кодом. На самом деле, это скорее «проблема с окнами». Если я запустил код на своем компьютере (который является Linux-файлом), проблем нет. Есть только одна консоль (та, что я использовал для запуска скрипта).

Я думаю, что если вы переименуете файл с .pyw, он будет работать. По этой ссылке: How to hide console window in python?

On Windows systems, there is no notion of an “executable mode”. The Python installer automatically associates .py files with python.exe so that a double-click on a Python file will run it as a script. The extension can also be .pyw, in that case, the console window that normally appears is suppressed.

Это позволит решить вашу проблему

(если нет, может быть, вы могли бы запустить код в консоли (а не двойной щелчок на файловом браузере) чтобы увидеть, где проблема возникает и дает мне некоторую обратную связь :))

+0

Когда вы говорите «файл», вы имеете в виду мой файл кода или какой-либо файл кода youtube-dl? –

+0

Кстати, переименование моего * .py-файла в * .pyw не скрывало окон консоли ffmpeg. Я не уверен, как поможет запуск кода в консоли. В принципе, youtube-dl использует ffmpeg (или aconv anyways) для чтения/записи/объединения аудио/видео файлов. Когда он запускает их, он открывает окна консоли, от которых я пытаюсь избавиться. –

+0

Хорошо. Я верну свой компьютер к окнам, чтобы найти решение. Я попытаюсь дать решение в течение нескольких минут (20-30 минут). Тогда, я отредактирую свой пост :) –

Смежные вопросы