6

私はしばらくの間、より大きなプロジェクトの一環として、対応するファイルをダウンロードせずに Youtube AUDIO をアプリケーションにストリーミングする方法を見つけようとしました。

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

私のプログラムがこれに対しても機能することは間違いありませんが、音楽の再生が始まるまでに約 20 分かかります (2 時間のオーディオのダウンロードにはかなりの時間がかかるため)。また、それまでにユーザーのコンピューターで約 400 メガバイトのスペースを使い果たしました。確かに、ファイルを一時フォルダーに保存し、プログラムを閉じた後に削除することはできますが、それではさらに問題が発生します。

  1. ダウンロードが完了する 1 分前にプログラムがクラッシュした場合、(クライアントが自分のコンピューターに何を持っているかは誰にもわかりません) スペースが不足しているため、クライアントは約 20 分間の時間を無駄に費やしていたことになります。

  2. 次回プログラムをロードするときに、同じことをしたいとします。その後、さらに 20 分待たなければなりません。これは、インターフェイスに「オーディオの保存」ボタンを追加することで回避できます。これにより、プログラムが閉じたときにファイルが削除されなくなります。ただし、最初の行き詰まりが残ります。

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

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

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

前もって感謝します!

PS私はこれに利用できるサーバーを持っていますが、すべてのYoutubeビデオをサーバーにダウンロードするのは非常に気が進まないでしょう. ただし、Youtube全体をはぎ取ることを含まないサーバーを含む別のソリューションがあれば、それは素晴らしいことです.

4

2 に答える 2

7

かなりの量の調査の後、解決策を見つけました。オーディオへのLINKSを取得していませんが、YouTubeのビデオを目に見えないように再生するプログラムを作成しました。これにより、意図した「AUDIO」を再生できます。

私が書いたプログラムは、すでに利用可能な Python モジュールをたくさん使って目標を達成しています。

wxPython を使用して Flash を Python アプリケーションに埋め込む方法を説明するこのリンクを見つけました (ここにあります)。フラッシュを再生するために利用したactivexwrapperモジュールがあります。

コード:

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 ' のようなリンクを試してください。

ただし、一時停止などはできません。したがって、他の方法を使用する必要があります。

&autoplay=1自動再生を開始するには: URL に「 」を追加します

一時停止する方法は次のとおりです。

youtube-dlモジュールを使用してビデオの長さを生成し、ユーザーが一時停止したときにスレッドを強制終了できます。ただし、既に再生された時間を保存し、次回&start=SECONDSPLAYEDはビデオを効果的に「再開」する「 」を追加します。詳細については、こちらをご覧ください

また、YouTube の埋め込み URL を使用する必要があります。これが機能する唯一の URL です。例は「http://www.youtube.com/v/cP6lppXT-9U?version=3&hl=en_US」のようになります

長所

  • 法的*
  • 高速フラッシュ読み込み時間 (0.01 秒のベンチマーク)
  • スペースを無駄にしません
  • ファイル全体をダウンロードせずに最後までスキップできます
  • YouTube API を使用しないため、無制限に使用できます

* YouTube の利用規約のセクション 4: サービスの一般的な使用 - 権限と制限、サブセクション 3 によると。

お客様は、本サービス自体の動画再生ページ、埋め込み型プレーヤー、または YouTube が指定するその他の明示的に承認された手段以外の技術または手段を介してコンテンツにアクセスしないことに同意するものとします。

そのため、プログラムは主に Embeddable Player を使用する代替インターフェイスを使用し、完全に違法なことは何もしません (ファイルのダウンロードなど [私の最初のアイデア])。

短所

  • ActiveX に依存しているため、このアプリケーションはWindows 以外のオペレーティング システムでは動作しません。
  • 私が知っている人の中には、Internet Explorer を使用している人はほとんどいません。残念ながら、このプログラムには INTERNET EXPLORER Flash がインストールされている必要があります。Mozzila Flash、Chrome Flash ではありません。それは絶対にIEでなければなりません。そうしないと、アプリケーションはロードされますが、ビデオは表示されません。
  • wx のロードには非常に長い時間がかかります (約 10 秒)。

依存関係

  • 明らかな理由から、wxPython を使用する必要があります。
  • Python comtypes (ここにあります) をインストールする必要があります。そうしないと、wxPython は ActiveX と通信できません。

便利な機能

また、同じことをしている人のためにプロセスを高速化する関数もいくつか作成しました。

すべてが素晴らしいワンライナーラムダです。

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

そのため、実際の動画ページを解析して長さを取得しました。少し遅くなりますが、確実に動作します。

于 2012-05-15T16:27:03.757 に答える
4

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

于 2012-05-13T19:03:17.247 に答える