project:youtubeupload
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
project:youtubeupload [2013/03/25 15:55] – 새로 만듦. 문서 구조 잡기. 초벌 작성. changwoo | project:youtubeupload [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 4: | 줄 4: | ||
얼마전 휴대전화에 저장된 동영상들을 유튜브에 올려두고 싶었습니다. 그런데 파일이 꽤 있어서 일일이 클릭해서 올리기 힘들고 귀찮았습니다. 분명히 구글의 API를 이용해 배치 작업을 할 수 있도록 만든 무언가가 있을 것 같더군요. | 얼마전 휴대전화에 저장된 동영상들을 유튜브에 올려두고 싶었습니다. 그런데 파일이 꽤 있어서 일일이 클릭해서 올리기 힘들고 귀찮았습니다. 분명히 구글의 API를 이용해 배치 작업을 할 수 있도록 만든 무언가가 있을 것 같더군요. | ||
- | 아니나다를까, | + | 아니나다를까, |
===== 필요한 것들 ===== | ===== 필요한 것들 ===== | ||
줄 17: | 줄 17: | ||
위 두 개의 시스템으로 이렇게 작업을 진행할 것입니다. | 위 두 개의 시스템으로 이렇게 작업을 진행할 것입니다. | ||
+ | - 촬영 날짜, 파일 목록 가져오기 | ||
- 동영상 정보 작성 | - 동영상 정보 작성 | ||
- | - 데스크탑 PC의 동영상을 홈서버로 | + | - 데스크탑 PC의 동영상을 홈서버로 |
- 홈서버에 스크립트 설치 | - 홈서버에 스크립트 설치 | ||
- 스크립트 실행 | - 스크립트 실행 | ||
줄 25: | 줄 26: | ||
===== 진행 순서 ===== | ===== 진행 순서 ===== | ||
- | == | + | ==== 동영상의 촬영 날짜와 파일 목록 가져오기 |
- | ==== 동영상 | + | 촬영 일자는 상당히 중요한 정보이므로, |
- | 데스크탑의 동영상을 장시간 업로드하려면 파일을 복사해두는 | + | |
+ | 파일 목록을 가져오는 것은 윈도우 기준으로 볼 때 명령 프롬프트의 한 줄이면 됩니다. | ||
+ | - ' | ||
+ | - 적당히 빈 곳을 클릭해, 폴더의 어떤 파일도 선택하지 않은 상태로 만듭니다. | ||
+ | - Shift 키를 누른 상태에서 마우스 우측 버튼을 눌러 컨텍스트 메뉴를 엽니다. 그러면 ' | ||
+ | - 단 윈도우 비스타, 7 이상인 경우 ' | ||
+ | - 윈도우 8는 탐색기 메뉴에 명령창 열기가 기본으로 포함되어 있습니다. | ||
+ | - 명령 프롬프트에서 다음 한 줄을 실행하면 됩니다. <code dos>dir /b > file_list.txt</ | ||
+ | 이렇게 하면 한 줄에 하나씩 파일명이 file_list.txt 라는 파일에 기록됩니다. file_list.txt 파일을 열어서 동영상 파일의 내역을 확인합니다. 아, 이 파일 안에는 file_list.txt 파일 자체도 포함되어 있으니 그 줄은 지워 주면 됩니다. 또한 텍스트 편집기의 기능을 이용해 절대 경로를 수정해야 서버에서 작업하기 용이합니다. | ||
+ | |||
+ | |||
+ | |||
+ | ==== 동영상의 정보 작성 ==== | ||
+ | 일괄 업로드라고 해서 정말 동영상만 올리면 허전합니다. 동영상 제목, 설명, 그리고 태그 등도 같이 올릴 때 작성되는 편이 훨씬 좋습니다. 이 부분만큼은 자동화가 어렵겠네요. 동영상을 일일이 보면서 적고 싶은 내용들을 적어야 합니다. :-( 하지만 최대한 힘을 덜 들인 상태에서 집약적으로, | ||
+ | |||
+ | 그러므로 저는 아래 그림과 같이 엑셀을 열어 테이블에 기록하고자 하는 바를 한눈에 보이도록 테이블로 작성했습니다. 스크린을 수직으로 분할해 한편에는 엑셀 창을, 다른 한편에는 탐색기 창을 배치했습니다. 그리고 탐색기 창은 파일을 큰 아이콘으로 보도록 하여 동영상의 섬네일 스냅샷이 보이도록 했습니다. 최대한 스냅샷만 보고 기억나는 동영상들은 굳이 열어 보지 않고도 작업할 수 있으니까요. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 테이블의 각 열은 아래 순서대로 정했습니다. | ||
+ | * 파일명: 각 동영상의 경로를 적었습니다. 현재는 로컬 PC에서 작업 중이지만, | ||
+ | * 카테고리: | ||
+ | * 제목: 각 동영상의 제목입니다. 자동 채우기 기능을 이용하면 ' | ||
+ | * 설명: 각 동영상의 설명입니다. 동영상에 대한 설명을 정성스럽게 적어도 되지만 이것도 제목처럼 아예 공란으로 두기는 싫은 경우 일괄적으로 복사해서 채워 넣으면 됩니다. | ||
+ | * 키워드: 태그입니다. 콤마로 구분하면 됩니다. | ||
+ | * 개인: 동영상을 외부에 공개하고 싶지 않을 때 사용합니다. ' | ||
+ | * 동영상 링크: 이것은 현재 기록하는 내용이 아닙니다. 동영상을 업로드하면 유튜브가 업로드된 동영상이 어디에 있는지 주소를 알려주는데, | ||
+ | 이렇게 테이블을 다 완성하면 CSV로 저장합니다. | ||
+ | |||
+ | |||
+ | ==== 동영상 복사 ==== | ||
+ | 데스크탑의 동영상을 장시간 업로드하려면 파일을 복사해두는 편이 좋습니다. 작업은 서버에게 맡겨두고 데스크탑은 꺼두는 게 좋겠죠. 이것은 문서를 참조하시는 분들의 환경에 맞게 적절히 조절하세요. 삼바를 이용해도 되고, FTP를 이용해도 되고, 뭐 직접 USB로 복사해도 8-o 됩니다. 어떤 식으로든, | ||
+ | |||
+ | ==== 홈서버에 스크립트 설치 ==== | ||
+ | 파이썬 2.7이 정상 동작한다고 가정합니다. 구글 코드에 있는 [[http:// | ||
+ | |||
+ | * Gentoo <code bash># emerge dev-python/ | ||
+ | * Ubuntu, Debian <code bash># apt-get install python-gdata</ | ||
+ | * Fedora <code bash># rpm -ivh python-gdata</ | ||
+ | |||
+ | 다운로드 받은 youtube-upload는 압축을 풀어 폴더로 접근한 다음 <code bash># python setup.py install</ | ||
+ | |||
+ | 설치가 되었으면 youtube-upload를 실행해 보세요. | ||
+ | <code bash> | ||
+ | $ youtube-upload --help | ||
+ | Usage: youtube-upload [OPTIONS] VIDEO_PATH ... | ||
+ | |||
+ | Upload videos to youtube. | ||
+ | |||
+ | Options: | ||
+ | --version | ||
+ | -h, --help | ||
+ | -m EMAIL, --email=EMAIL | ||
+ | Authentication email or Youtube username | ||
+ | -p PASSWORD, --password=PASSWORD | ||
+ | Authentication password | ||
+ | -t TITLE, --title=TITLE | ||
+ | Video(s) title | ||
+ | -c CATEGORY, --category=CATEGORY | ||
+ | Video(s) category | ||
+ | --get-categories | ||
+ | --create-playlist=TITLE|DESCRIPTION|PRIVATE (0=no, 1=yes) | ||
+ | Create new playlist and add uploaded video(s) to it | ||
+ | -d DESCRIPTION, | ||
+ | Video(s) description | ||
+ | --keywords=KEYWORDS | ||
+ | --title-template=STRING | ||
+ | Title template to use on multiple videos (default: | ||
+ | $title [$n/ | ||
+ | --private | ||
+ | --unlisted | ||
+ | --location=LAT, | ||
+ | --update-metadata | ||
+ | --api-upload | ||
+ | --get-upload-form-info | ||
+ | Don't upload, get the form info (PATH, TOKEN, URL) | ||
+ | --add-to-playlist=URI | ||
+ | Add video(s) to an existing playlist | ||
+ | --delete-from-playlist=URI | ||
+ | Delete video(s) from an existing playlist | ||
+ | --wait-processing | ||
+ | --captcha-token=STRING | ||
+ | Captcha token | ||
+ | --captcha-response=STRING | ||
+ | Captcha response | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 스크립트 실행 ==== | ||
+ | 파이썬에서 직접 명령을 실행할 수도 있지만, 파이썬은 우리가 만든 CSV 테이블을 BASH 쉘 스크립트를 만들어내는 역할만 하도록 하겠습니다. 윈도우로 따지자면 패치 파일인 .bat 파일을 만들어 내는 것이겠죠. 이 편이 훨씬 프로그램하기도 단순하고, | ||
+ | |||
+ | 서버는 UTF-8을, 데스크탑은 CP949를 쓴다고 가정합니다. CSV 파일 또한 CP949로 작성되었다고 가정합니다. | ||
+ | |||
+ | <code python batch_upload.py> | ||
+ | # -*- coding: utf-8 -*- | ||
+ | # | ||
+ | |||
+ | import csv | ||
+ | import sys | ||
+ | |||
+ | def cp949_to_uni(_in): | ||
+ | return _in.decode(' | ||
+ | |||
+ | def print_script(entries): | ||
+ | EMAIL = u' | ||
+ | PASS = u' | ||
+ | |||
+ | print '# | ||
+ | |||
+ | for entry in entries: | ||
+ | command = u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | |||
+ | if entry[' | ||
+ | command += u' | ||
+ | |||
+ | command += entry[' | ||
+ | print command.encode(' | ||
+ | |||
+ | def main(argv): | ||
+ | if len(argv) != 2: | ||
+ | print " | ||
+ | return 1 | ||
+ | |||
+ | entries = [] | ||
+ | |||
+ | with open(argv[1], | ||
+ | reader = csv.reader(csvfile, | ||
+ | for filename, category, title, description, | ||
+ | entries.append( | ||
+ | { | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | } | ||
+ | ) | ||
+ | |||
+ | print_script(entries) | ||
+ | return 0 | ||
+ | |||
+ | if __name__ == ' | ||
+ | sys.exit(main(sys.argv)) | ||
+ | </ | ||
+ | |||
+ | 스크립트를 실행하면 CSV 파일을 기반으로 BASH 쉘 스크립트를 만들어 냅니다. 쉘 스크립트가 올바로 동작하는지 확인해 보세요. | ||
+ | 만일 윈도우의 .bat 파일이 필요하시다면 "print '# | ||
+ | |||
+ | <code bash> | ||
+ | python batch_upload.py csv파일 > upload.sh | ||
+ | </ | ||
+ | <code dos> | ||
+ | python batch_upload.py csv파일 > upload.bat | ||
+ | </ | ||
+ | |||
+ | 이렇게 만들어낸 sh(bat) 파일을 쉘에서 실행시키면 업로드가 일괄적으로 진행되겠지요. 일단 쉘 스크립트 파일(sh) 첫번째 줄을 따로 복사해 그것 하나만 올바로 동작하는지 확해 보았습니다. 프로그램이 생성한 스크립트이므로 첫번째 것만 무사히 진행되면 나머지 작업도 별다른 문제가 없는 한 순조롭게 될 것입니다. 여러 파일에 대해 일괄적인, | ||
+ | |||
+ | 한편 서버에 장시간 업로드를 할 경우, 로그아웃을 하더라도 작업이 진행되어야 합니다. 그럴 때는 nohup 명령을 이용합니다. | ||
+ | <code bash> | ||
+ | $nohup upload.sh > youtube_upload_status.txt | ||
+ | </ | ||
+ | 이렇게 하면 로그아웃을 하더라도 작업이 끝까지 진행됩니다. | ||
+ | ==== 로그 분석 ==== | ||
+ | nohup에 의해 youtube-upload 명령어가 출력하는 메시지가 youtube_upload_status.txt에 저장되었습니다. 여기서 업로드된 파일이 어떤 URL로 지정되었는지 파악해서 아까의 CSV (혹은 XLS, XLSX) 파일에 다시 기록해둡니다. 파이썬을, | ||
project/youtubeupload.1364226941.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)