さらに多くの研究が行われた後、解決策が見つかりました。オーディオにLINKSを取得しないうちに、私はYouTubeのビデオを目に見えない状態で再生するプログラムを作成したので、私の意図であった「AUDIO」を再生することができます。
私が書いたプログラムは、目標を達成するために既に利用可能なPythonモジュールをたくさん使用しています。
リンクは、リンクを見つけました。これは、wxPython(here)経由でFlashをPythonアプリケーションに埋め込む方法を説明しています。それは私がフラッシュを演奏するために利用したアクティブなラッパーモジュールを持っています。
コード:
import wx
if wx.Platform == '__WXMSW__':
from wx.lib.flashwin import FlashWindow
class MyPanel(wx.Panel):
def __init__(self, parent, id):
wx.Panel.__init__(self, parent, -1)
self.pdf = None
sizer = wx.BoxSizer(wx.VERTICAL)
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
self.flash = FlashWindow(self, style=wx.SUNKEN_BORDER)
sizer.Add(self.flash, proportion=1, flag=wx.EXPAND)
#sizer.Hide(0)
self.SetSizer(sizer)
self.SetAutoLayout(True)
print "Importing Flash..."
self.flash.LoadMovie(0, raw_input('Copy link for flash: '))
#Used to load a flash file. You may also give a location of a specific file on disk.
print "Done."
app = wx.PySimpleApp()
# create window/frame, no parent, -1 is default ID, title, size
# change size as needed
frame = wx.Frame(None, -1, "Flash Stream", size = (500, 400))
# make instance of class, -1 is default ID
MyPanel(frame, -1)
# show frame
frame.Show(True)
#comment if you don't want to see the ui
print "Started"
# start event loop
app.MainLoop()
ビデオを再生。私の場合、GUIを使いたくないので、 'frame.Show(True)
'行を削除しました。テストする場合は、後で説明するように、 'http://www.youtube.com/v/cP6lppXT-9U?version=3&hl=en_US'のようなリンクを試してください。
ただし、一時停止などはできません。したがって、他の方法を使用する必要があります。
自動再生を開始するには:ここではURLに
「を&autoplay=1
」を追加しますが、あなたが一時停止することができる方法である。
あなたはyoutube-dlモジュールをuringビデオの長さを生成し、ときに、ユーザーが一時停止スレッドを殺すことができますそれ。ただし、すでに再生した時間を保存しておけば、次回には '&start=SECONDSPLAYED
'を追加すると効果的にビデオを再開します。詳細はhereです。
また、動作する唯一のYouTube埋め込みURLを使用する必要があります。例では、 'http://www.youtube.com/v/cP6lppXT-9U?version=3&hl=en_US
'
賛否
- 法的*
- 高速フラッシュ・ロード時間(0.01秒ベンチマーク)
- はスペース
- はダウンロードせずに終了へスキップすることができ無駄にしないように見えますファイル全体
- YouTube APIを使用しないため無制限の使用
YouTube's terms of serviceによると
*、セクション4:サービス - 許可と制限の一般的な使用、サブセクション3.
あなたはどんな技術を介してコンテンツにアクセスしないことに同意したりのビデオ再生ページ以外の意味サービス自体、埋め込み可能プレーヤー、またはYouTubeが指定することができる明示的に許可されたその他の手段。
このプログラムでは、Embeddable Playerを主に使用する別のインターフェイスを使用しているため、絶対に違法な行為はしません([私の最初のアイデア]をダウンロードするなど)。ためのActiveX、このアプリケーション意志ていない任意のオペレーティングシステム上で動作しますが、Windowsのへの依存へ
短所
- 。
- 私が知っている人からは、Internet Explorerをほとんど使用していません。悲しいかな、このプログラムでは、インターネットエクスプローラのFlashをインストールする必要があります。 Mozzila Flash、Chrome Flashではありません。それは絶対にIEでなければなりません。それ以外の場合、アプリケーションはロードされますが、ビデオは表示されません。
- wxの読み込みに非常に時間がかかります(約10秒)。
依存明白な理由のために
- 、wxPythonのを使用する必要があります。
- Pythonのcomtypes(found here)がインストールされている必要があります。それ以外の場合、wxPythonはActiveXと通信できません。
役立つ機能
私も同じことをやっている人のためのプロセスをスピードアップするためにいくつかの関数を作成しました。
すべてが素晴らしい1ライナーのラムダです。
generate_link:通常のYouTube URLを指定して、YouTube埋め込みURLを返します。
generate_link = lambda link: 'http://www.youtube.com/v/'+re.compile(r'watch\?v=(.*?)(?:&|$)').search(link).group(1)+'?version=3&hl=en_US'
start_from:ビデオを開始する場所の時間、分、秒を受け入れ、リンクを返します。
start_from = lambda hours, minutes, seconds, link: link + '&start=' + str((hours*60*60)+(minutes*60)+seconds)
autoplay:おそらく最も簡単な方法は、autoplayをtrueに設定してリンクを返すことです。それはリンクを受け入れる。
autoplay = lambda link: link + '&autoplay=1'
video_length:ビデオの長さを返します。便利で、YouTubeのリンクを受け入れる。
video_length = lambda video: re.compile(r'length_seconds=(.*?)\\', re.S).search(urllib2.urlopen(video).read()).group(1).strip()
これは、ライセンスされた動画は、エラー
ため
status=fail&errorcode=150&reason=This+video+contains+content+from+WMG.+It+is+restricted+from+playback+on+certain+sites.%3Cbr%2F%3E%3Cu%3E%3Ca+href%3D%27http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DVALbSjayAgw%26feature%3Dplayer_embedded%27+target%3D%27_blank%27%3EWatch+on+YouTube%3C%2Fa%3E%3C%2Fu%3E
を返すという事実のための回避策として意図されて、私は長さを取得するために実際のビデオページを解析されました。少し遅くなりますが、失敗することはありません。
私はyoutubeがオーディオとビデオを別々に保存しているとは思わないので、オーディオのみを取り出すことは不可能です。また、利用規約に違反する可能性があると私は考えています。 – aland