2012-05-13 2 views
6

큰 프로젝트의 일환으로 Youtube AUDIO를 해당 파일을 다운로드하지 않고 응용 프로그램으로 스트리밍하는 방법을 찾으려고 잠시 동안이었습니다.Youtube Audio에 대한 링크 생성

내가 지금 가지고있는 것은 saveyoutube.com과 같은 웹 서비스를 사용하여 비디오를 다운로드하는 프로그램입니다. 그러나 이것은 매우 효율적이지 않습니다. 동영상 자체의 다운로드에는 약 5 분이 소요되며 클라이언트는 대기 중이며 Youtube 인터페이스를 직접 사용하는 데 지쳐 버릴 수 있습니다. 또한 프로그램의 사용자가 4 시간 길이의 앨범에 액세스하려고한다고 가정 해보십시오. 그러나 사용자는 설명의 편의를 위해 특정 부분 만 듣기를 원하며 사용자가 2 시간 이상 비디오를보고 싶어한다고 가정합니다 (예 : this 비디오).

나의 프로그램이 이것에 대해서도 효과가 있다는 것은 의심의 여지가 없지만, 음악 재생을 시작하는데 약 20 분이 걸린다. (2 시간의 오디오 다운로드에는 많은 시간이 걸린다. 또한 나는 그때까지 사용자의 컴퓨터에 약 400 MB의 공간을 소비했다. 물론, 임시 폴더에 파일을 저장하고 프로그램을 닫은 후 삭제, 그러나 그것은 더 많은 문제에 이르게 할 수 있습니다 다운로드 전에 일분의 프로그램이 충돌 때문에 부족 완료되면

  1. 공간 (클라이언트가 컴퓨터에 무엇을 가지고 있는지를 아는 사람)이 있으면 클라이언트는 아무 것도 할 수없는 시간으로 약 20 분을 낭비하게됩니다.

  2. 다음 번에 프로그램을로드 할 때 다음과 같은 작업을 수행하려고합니다. 그런 다음 그들은 20 분을 더 기다려야합니다. 이것은 인터페이스에 '오디오 저장'버튼을 추가하여 프로그램이 닫을 때 파일을 삭제하지 못하도록 방지함으로써 막을 수 있습니다. 그러나 첫 번째 통념이 남아 있습니다. 그래서 여기

내 질문은 : YouTube 동영상의 오디오에 대한 링크를 생성하는 방법은 무엇입니까? http://www.youtube.com/watch?v=AOARzA8nGu4.(AUDIOEXTENSION과 같은 URL을 얻을 수있는 방법이 있습니까? 그렇게하면 사운드 트랙의 일부를 건너 뛰는 것이 더 쉬울 것이고 다운로드가 필요하지 않을 것입니다. 나는 이것을 잠시 동안 연구했고, 지금까지 대답에 가장 가까운 것은 saveyoutube였습니다 : mp3 다운로더.

이렇게해도 될까요? 그렇지 않다면 Youtube 대신이 작업을 수행 할 수 있습니까? Youtube API을 살펴 봤지만 대부분의 Google 서비스와 마찬가지로 API가 제한되어있어 바람직하지 않습니다.

대부분의 코드를 번역 할 수 있으므로 프로그래밍 언어에는 제한이 없습니다. 그러나 Python 또는 C/C++ 솔루션이 이상적입니다.

미리 감사드립니다.

P. 이 서버를 사용할 수 있지만 모든 Youtube 비디오를 서버에 다운로드하는 것을 매우 꺼리게됩니다. 그러나 Youtube 전체를 찢어 버릴 필요가없는 서버와 관련된 또 다른 솔루션이 있다면 큰 일입니다.

+0

나는 youtube가 오디오와 비디오를 별도로 저장하는 것을 의심하므로 오디오 만 가져올 수는 없습니다. 또한 서비스 약관을 위반할 수도 있습니다. – aland

답변

6

상당량의 연구가 있은 후에 해결책을 찾았습니다. 오디오에 대한 링크를 얻지는 못했지만 유튜브 비디오를 보이지 않게 재생하는 프로그램을 만들었고, 따라서 나의 의도였던 '오디오'를 재생할 수 있습니다.

내가 작성한 프로그램은 이미 사용 가능한 파이썬 모듈을 많이 사용하여 목표를 달성합니다.

나는 플래시를 파이썬 응용 프로그램에 삽입하는 방법을 설명하는 this 링크를 wxPython (here)을 통해 발견했습니다. 그것은 플래시를 재생하는 데 활용되는 활성 래퍼 모듈을 가지고 있습니다.

코드 :

비디오를 재생
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 모듈을 uring 비디오 길이를 생성 할 수 있으며, 스레드를 죽일 때 사용자의 일시 중지 그것. 그러나 이미 재생 한 시간을 저장하고 다음 번에 '&start=SECONDSPLAYED'을 추가하면 효과적으로 '다시 시작'됩니다. 이에 대한 자세한 내용은 here입니다.

또한, 작동하는 유일한 URL 인 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를 사용하는 대체 인터페이스를 사용하며 완전히 불법적으로 처리하지 않습니다 ([내 첫 번째 아이디어] 파일 다운로드와 같은).

단점

  • 인해 액티브 X에 대한 의존도에,이 응용 프로그램 것이다 모든 운영 체제하지만 Windows에서하지 작동합니다.
  • 내가 아는 사람들로부터, 소수만 Internet Explorer를 사용합니다. 아아,이 프로그램을 설치하려면 인터넷 익스플로러 플래시가 필요합니다. Mozzila Flash, Chrome Flash가 아닙니다. 그것은 절대적으로 IE가되어야합니다. 그렇지 않으면 응용 프로그램이로드되지만 비디오는 나타나지 않습니다.
  • wx로드하는 데 오랜 시간이 걸립니다 (약 10 초).

종속성 분명한 이유를 들어

  • , wxPython을 사용해야합니다.
  • Python comtypes (찾을 수 here)를 설치해야합니다. 그렇지 않으면, wxPython은 ActiveX와 통신 할 수 없습니다.

유용한 기능들

은 또한 같은 일을하는 사람에 대한 처리 속도를 높이기 위해 일부 기능을 만들었습니다.

모두 멋진 lambda입니다.

generate_link : 정상적인 YouTube URL이 주어지면 YouTube Embed 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 스테레오 사운드와 함께 사용합니다. 사운드는 비디오 파일에 포함됩니다. 사운드 트랙을 복구하려면 전체 비디오를 다운로드해야합니다.

관련 문제