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의 동영상은 http://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 값도 필요로 한다. 다운로드 받는 주소는 아래와 같다.
http://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'];
Appendix A
비디오의 화질은 아래와 같다.
Standard FLV Video
Video: Flash Video 1 320x180 [Video] |
File Size: 617kb
Higher Quality MP4 Format
Video: MPEG4 Video (H264) 480x270 24.93fps [Video] |
File Size: 1,162kb
High Definition 720p MP4 Format
Video: MPEG4 Video (H264) 1280x720 30.00fps [Video] |
File Size: 4,168kb
On some videos: Standard=7mb, HD720p=47mb
http://nathanhammond.com/youtube-video-format-information