JavaScript

Javascript는 웹 사이트 주소 넣는 곳에 "javascript:<들어갈 자바스크립트 코드>"와 같은 형태로도 실행 될 수 있다.

예를 들어 크롬을 실행시키고, 주소 창에 javascript:alert('test');와 같이 넣으면,

아래와 같이 경고 창을 확인할 수 있다. 즉 JavaScript를 주소 창에 입력 함으로써 실행할 수 있는 것이다.

javascript:window.location.href=<이동하고자 하는 url주소>와 같은 코드는 웹 브라우져를 이동하고자하는 url로 접속하게 해준다. 나중에 YouTube동영상을 다운로드 하는 주소로 연결할 때 이 JavaScript가 실행된다. 또한 YouTube의 동영상들은 yt라는 JavaScript 객체를 사용하는데 yt.getConfig('SWF_ARGS')['<속성이름>'] 과 같이 사용하여 동영상의 속성 값을 알 수 있다. 예를 들어 javascript:alert(yt.getConfig('SWF_ARGS')['video_id']);는 비디오의 id 값을 출력한다.

 

YouTube

YouTube의 동영상은 https://www.youtube.com/ 뒤의 URL에 get_video.php?와 함께 적절한 인자 값을 넣으면 다운로드 받을 수 있다. 이러한 인자 값들은 YouTube사이트의 Flash플레이어의 ActionScript 에 적혀 있다. 우리는 이러한 인자 값들을 Flash object를 통해 JavaScript에서 얻어 올 수 있다. 인자 값에는 여러 가지가 있는데 video_id, t(token),q, fexp, invideo, sourceid, l(length), fmt_map(format map), sk 등이 있다.

t 는token으로 비디오를 보거나 다운로드 받을 수 있게 해준다. token은 특정 시간이 지나면 해제되기 때문에, 영구적인 비디오 다운로드 링크를 제공하지 못하게 하는 역할을 한다. flv형식의 비디오를 받으려면 t(token)과 video ID(video_id)가 있으면 된다. 가끔 token과 더불어 필요한 인자 값이 있는데, sk 값이다. 가끔은 l 값도 필요로 한다. 다운로드 받는 주소는 아래와 같다.

 

https://www.youtube.com/get_video.php?video_id=[id]&fmt=[영상에 맞는 fmt ]&sk=[sk]&t=[t]

 

[id]는 동영상의 고유 주소인 id이고 fmt는 아래 표와 같다. 동영상마다 적절한 fmt 값을 설정해 주어야 한다. 동영상을 보다가 소스코드를 보면 fmt_map이라는 변수를 볼 수 있는데 맨 앞 부분에 정의된 숫자가 fmt 값이 될 수 있는 숫자이다. javascript:alert(yt.getConfig('SWF_ARGS')[ 'fmt_map']);를 통해 확인할 수 있다.

식으로 값이 나오는데 이는 37, 즉 fmt=37과 같이 넣어 줄 수 있다는 말이다. 즉 HD1080 해상도까지 지원하는 것이다.

Fmt ID

포멧

픽셀 해상도

비디오 코덱

음성 코덱

해상도

비고

fmt=0 

flv

320x240

flv1

mp3 1.0 22KHz

[ ]

( fmt=5와 같음)

fmt=5 

flv

320x240

flv1

mp3 1.0 22KHz

[small ]

 

fmt=6 

flv

480x360

flv1

mp3 1.0 44KHz

[ ]

(No more...)

fmt=13 

3gp

176x144

H263

AMR 2.0 8KHz

[ ]

(핸드폰 용)

fmt=17 

3gp

176x144

mpg4

AAC 1.0 22KHz

[ ]

(핸드폰 용)

fmt=18 

mp4

480x360

H264

AAC 2.0 44KHz

[large ]

 

fmt=22 

mp4

1280x720

H264

AAC 2.0 44KHz

[HD720 ]

 

fmt=34 

flv

640x480

H264

AAC 2.0 44KHz

[medium]

(기본값)

fmt=35 

flv

854x640

H264

AAC 2.0 44KHz

[large ]

 

fmt=37 

mp4

1920x1080

H264

AAC 2.0 44KHz

[HD1080]

 

 

이렇게 javascript:alert(yt.getConfig('SWF_ARGS')[ 'fmt_map']);로 확인된 값을 가지고 이제 스크립트를 만들어 주소 창에 넣으면 된다. 아래는 몇 가지 예제이다.

Flash Videos (.flv)

javascript:window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

High Quality MP4 Format

javascript:window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&fmt=18&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

High Definition (720p)

javascript:window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&fmt=22&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

High Definition (720p)    

javascript:window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&fmt=37&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

 

javascript:var fmt_id = yt.getConfig('SWF_ARGS')['fmt_map'].substr(0,2); window.location.href = 'http://youtube.com/get_video?video_id=' + yt.getConfig('SWF_ARGS')['video_id'] + "&fmt=" + fmt_id +"&sk=" + yt.getConfig('SWF_ARGS')['sk'] + '&t=' + yt.getConfig('SWF_ARGS')['t'];

Appendix A

비디오의 화질은 아래와 같다.

Standard FLV Video

Video: Flash Video 1 320x180 [Video] 
Audio: 
MPEG Audio Layer 3 22050Hz mono 64Kbps [Audio]

File Size: 617kb

Higher Quality MP4 Format 

Video: MPEG4 Video (H264) 480x270 24.93fps [Video]
Audio: 
AAC 44100Hz stereo 1411Kbps [Audio]

File Size: 1,162kb

High Definition 720p MP4 Format 

Video: MPEG4 Video (H264) 1280x720 30.00fps [Video]
Audio: 
AAC 44100Hz stereo 1411Kbps [Audio]

File Size: 4,168kb

On some videos: Standard=7mb, HD720p=47mb

 

http://nathanhammond.com/youtube-video-format-information

http://userscripts.org/topics/38520?page=1#posts-192672

http://docs.sun.com/source/816-6408-10/location.htm

Posted by 강부자아들