YouTube や他のサイトから動画をダウンロードするために使用されるソフトウェアであるYoutube-dlを実行するために python を使用しています。特にYouTubeビデオからオーディオをダウンロードするために使用しています。check_output() を使用してコンピューターに保存されている youtube-dl.exe ファイルを実行することにより、python を使用して YouTube ビデオからオーディオをダウンロードできます。
以下は、youtube-dlファイルを実行して曲をダウンロードするために私が書いた方法です。youtube-dl プログラムからの出力である巨大なテキスト文字列を返します。
from subprocess import check_output
#downloads the audio from a song to wherever the python script is
def getSong(songUrl):
return check_output('C:\Users\Ben\Desktop\youtube-dl\youtube-dl.exe --max-quality FORMAT --extract-audio ' + songUrl, shell=True)
このメソッドを Python で実行すると、コマンドが完了するのを待ってから、多くの情報を含む巨大な応答が返されます。これには、ダウンロードの最後に出力される一般的な情報が含まれますが、(コマンド プロンプトで実行した場合) ダウンロードの進行状況に関する情報も数秒ごとに表示されます。問題は、Python で実行すると、ダウンロードが完了した後にこの進行状況の情報をすべて取得することです。
まだ実行中に check_output() メソッドから出力を取得する方法はありますか? そうすれば、ダウンロードの進行状況バーを作成できます。
編集:
更新:以下は、1つの小さな例外を除いて、私が望むように動作するようになった現在のコードです...
import subprocess
songUrl = "http://www.youtube.com/watch?v=uO3lN-hugaQ"
process = subprocess.Popen(["C:\Users\Ben\Desktop\youtube-dl\youtube-dl.exe", "--max quality", "FORMAT", "--extract-audio", songUrl], shell=True, stdout = subprocess.PIPE)
for line in iter(process.stdout.readline, b''):
print line,
process.communicate()
この新しい上記のコードを実行すると、実行されたコマンドで生成された情報が 1 行ずつ出力され始めますが、ダウンロードされた割合に関するすべての情報はすべて最後に出力されます。コマンド プロンプトで同じコマンドを実行してみたところ、ダウンロードされた割合に関する情報を提供するテキストが、更新された情報で新しい行が作成されるのではなく、実際には 1 秒ごとに変更されることがわかりました。パイソンで。プログレスバーに必要な情報を取得できるように、これを回避する方法はあると思いますか?