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'];

 

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 강부자아들
,

다양한 레스터 포맷간의 변환을 수행

사용법

gdal_translate [--help-general]

[-ot {Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/

CInt16/CInt32/CFloat32/CFloat64}] [-strict]

[-of format] [-b band] [-expand {gray|rgb|rgba}]

[-outsize xsize[%] ysize[%]]

[-unscale] [-scale [src_min src_max [dst_min dst_max]]]

[-srcwin xoff yoff xsize ysize] [-projwin ulx uly lrx lry]

[-a_srs srs_def] [-a_ullr ulx uly lrx lry] [-a_nodata value]

[-gcp pixel line easting northing [elevation]]*

[-mo "META-TAG=VALUE"]* [-q] [-sds]

[-co "NAME=VALUE"]*

src_dataset dst_dataset

요약

gdal_translate 유틸리티는 다양한 포멧들 사이의 변환을 할 수 있게 하고, 잠정적으로 subsetting, 리샘플링(resampling), rescaling pixel과 같은 프로세스에 수행될 수 있다.

 

-ot:  type

밴드(band)의 결과 값을 위해 데이터 타입을 지정( Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64)

-strict:

결과 형태로 변환될 부적합한 것을 허용하지 않을 사용하는 옵션

-of format:

결과 값의 포맷을 선택한다. 기본값으로 GeoTIFF (GTiff) 들어 간다. 포맷 축약어를 사용하여라. http://www.gdal.org/formats_list.html 표에 있는 Code 열을 참조하여 축약어를 사용하여라

-b band:

결과 값을 위해 입력 밴드(band)값을 band 자리에 설정하여라. 밴드(band)들은 1부터 다양한 수가 있다. -b 옵션은 결과 값이나 밴드의 순서를 바꾸기 위해 쓰여질 입력 밴드 값들을 선택하기 위해 사용된다.

-expand gray|rgb|rgba:

(GDAL 1.6.0부터 사용가능) 컬러 테이블을 가진 1개의 밴드 데이터 세트를 컬러 테이블을 가진 3(RGB) 혹은 4(RGBA)개의 밴드를 가진 데이터 셋으로 드러내기 위해 사용한다. JPEG, JPEG2000, MrSID, ECW 같이 컬러 인덱싱된 데이터 세트를 지원하지 않는 output 드라이버에 유용하다. 'gray' 옵션 (GDAL 1.7.0부터 사용가능) 그레이(gray) 레벨의 컬러 테이블을 가진 데이터 세트를 그레이 인덱스된 데이터 셋으로 확장을 가능하게 해준다.

-outsize xsize[%] ysize[%]:

출력파일의 사이즈를 설정한다. Outsize is in pixels and lines unless '' is attached in which case it is as a fraction of the input image size.

-scale [src_min src_max [dst_min dst_max]]:

src_max  범위까지의 입력 필설들을 dst_min 부터 dst_max 픽셀로 비율을 재조정 한다. 결과 값의 범위를 지정하지 않으면 0 부터 255 재조정 되고, 입력 값의 범위를 입력하지 않으면 원본 데이터로부터 자동적으로 계산된 입력 값이 들어가게 된다.

-unscale:

Apply the scale/offset metadata for the bands to convert scaled values to unscaled values. It is also often necessary to reset the output datatype with the -ot switch.

-srcwin xoff yoff xsize ysize:

원본 이미지로부터 복사하여 출력이 되어질 이미지의 부분만 지정해 준다.

-projwin ulx uly lrx lry:

-srcwin 같이 원본 이미지로부터 복사하여 출력이 되어질 부분만 지정한다. 하지만 코너들의 값을 지리좌표 값의 형태로 입력한다.

-a_srs srs_def:

출력 파일을 위해 투영(projection)값을 덮어 씌운다srs_def  WKT, PROJ.4, EPSG:n WKT 포함하고 있는 파일과 같이 GDAL/OGR 형태이다..

-a_ullr ulx uly lrx lry:

출력 파일의 경계좌표 값을 할당/덮어 씌운다. 소스파일로부터 나왔던 값들은 무시되게 된다.

-a_nodata value:

출력 밴드(band) 특정 nodata 값을 할당한다.

-mo "META-TAG=VALUE":

가능한 결과 데이터 세트에 할당할 메타데이터의 / 전달한다.

-co "NAME=VALUE":

출력 형식 드라이버(output format driver) 생성 옵션(creation option) 전달한다. 다수의 -co 옵션들이 열거 되어질 있다. 각각의 포멧에 대한 적적한 생성 옵션을 알려면 포맷 별로 포맷사양서 참조하여라.

-gcp pixel line easting northing elevation:

출력 파일을 위한 ground control point 추가한다. 옵션은 여러 세트의 GCP들을 호출하기 위해 여러 호출될 있다.

-q:

Suppress progress monitor and other non-error output.

-sds:

Copy all subdatasets of this file to individual output files. Use with formats like HDF or OGDI that have subdatasets.

src_dataset:

원본 데이터 세트의 이름. 파일이름이 수도 있고, 데이터 소스의 URL 수도 있고 다중데이터세트파일의 하위데이터세트일 수도 있다.

dst_dataset:

최종 결과 파일의 이름.

EXAMPLE

gdal_translate -of GTiff -co "TILED=YES" utm.tif utm_tiled.tif

Posted by 강부자아들
,
http://a.deveria.com/caniuse/
Posted by 강부자아들
,