2012-05-13 13 views
6

大きなプロジェクトの一環として、対応するファイルをダウンロードせずにYoutube AUDIOをアプリケーションにストリームする方法を探していました。Youtube Audioへのリンクを生成する

私が今のところ持っているものは、saveyoutube.comのようなWebサービスを使ってビデオをダウンロードするプログラムです。しかしこれはあまり効率的ではありません。ビデオ自体のダウンロードには約5分かかり、クライアントは待っていて飽きてしまい、Youtubeインターフェイスを直接使用することがあります。また、プログラムのユーザーが4時間の長時間のアルバムにアクセスしたいとします。しかし、彼らは説明のために、その特定の部分だけを聞きたいと思っているので、ユーザーは2時間以上ビデオを見たいとします(例えば、thisビデオを撮る)。

私のプログラムもこれに対応していることは間違いありませんが、音楽の再生を開始するには約20分かかります(2時間分のオーディオをダウンロードするには時間がかかります)。また、私はその時までにユーザーのコンピュータに約400メガバイトのスペースを使い果たしました。確かに、私は一時フォルダにファイルを保存すると、彼らはプログラムを終了した後、それを削除し、それは多くの問題につながることができますためにダウンロードが不足の完了する前にプログラムが1分でクラッシュした場合

  1. スペース(誰が自分のコンピュータに何を持っているかを知っている人)は、クライアントは時間の無駄に約20分を費やしてしまいます。

  2. 次回プログラムを読み込んだとき、同じことをしたいと言っています。それから20分ほど待たなければなりません。これは、インターフェイスに「オーディオを保存」ボタンを追加することで防止できます。このボタンをクリックすると、プログラムは終了時にファイルを削除しません。しかし、最初の邪魔は残っています。だからここ

は私の質問です: YouTubeのビデオのAUDIOへのリンクを生成する方法はありますか? http://www.youtube.com/watch?v=AOARzA8nGu4.(AUDIOEXTENSIONのようなURLを取得する方法はありますか?そうすれば、サウンドトラックの一部にスキップするのが簡単になり、ダウンロードが不要になります。私はかなり長い間これを研究してきましたが、これまでのところ答えに最も近いのはWAS saveyoutube:mp3ダウンローダーです。

これも可能ですか?そうでない場合は、これを行うことができるYoutubeの代替手段はありますか?私はYoutube APIを見てきましたが、それはまた、ほとんどのGoogleサービスと同様、そのAPIは限られているので、やはり好ましくありません。

ほとんどのコードを翻訳できるので、プログラミング言語には制限はありません。しかし、PythonやC/C++のソリューションが理想的です。

ありがとうございます!

P.S.私はこれに利用可能なサーバーを持っていますが、私はすべてのYoutubeビデオをサーバーにダウンロードすることに非常に嫌です。しかし、Youtube全体をリッピングすることを伴わないサーバーを含む別の解決策がある場合は、それは素晴らしいことです。

+0

私はyoutubeがオーディオとビデオを別々に保存しているとは思わないので、オーディオのみを取り出すことは不可能です。また、利用規約に違反する可能性があると私は考えています。 – aland

答えて

6

さらに多くの研究が行われた後、解決策が見つかりました。オーディオに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 

を返すという事実のための回避策として意図されて、私は長さを取得するために実際のビデオページを解析されました。少し遅くなりますが、失敗することはありません。

4

YouTubeはH.264/MPEG-4 codingにAACステレオサウンドを使用しています。サウンドはビデオファイル内に埋め込まれています。サウンドトラックを再生するには、ビデオ全体をダウンロードする必要があります。

関連する問題