iPodで空いた時間にTEDの動画を見たい。英語の能力がショッパイので、字幕が欲しい。
1. 見たい動画のIDを
Translations Talks in 日本語から見つける。
2. 字幕と映像を入手。映像はTEDのページにあるダウンロードリンクから。字幕は↓のような感じで。
wget -O - http://www.ted.com/talks/subtitles/id/${TALKID}/lang/jpn > jpn.json
3. ダウンロードした字幕は、JSONなので、SRTとやらに変えてあげる。使ったスクリプト↓
#!/usr/bin/python
# -*- encoding: utf-8 -*-
import sys
import codecs
from datetime import date, datetime, time, timedelta
import simplejson as json
sys.stdin = codecs.getreader('utf-8')(sys.stdin)
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
def timestr(timeobj):
return timeobj.strftime('%H:%M:%S,') + '%03d' % (timeobj.microsecond // 1000)
# MAX_CHARS文字より長いときは2行に分ける
MAX_CHARS=25
def main():
f = open(sys.argv[1], 'r')
captions = json.load(f)['captions']
for i, c in enumerate(captions):
startTime = int(c['startTime'])
duration = int(c['duration'])
# TEDのスプラッシュの時間を加える
startTime += 16000
st = datetime.combine(date.today(), time(0, 0)) + timedelta(milliseconds=startTime)
et = st + timedelta(milliseconds=duration)
if len(c['content']) > MAX_CHARS:
print u'%d\n%s --> %s\n%s\n%s\n' % (i+1, timestr(st), timestr(et),
c['content'][0:MAX_CHARS],
c['content'][MAX_CHARS:])
else:
print u'%d\n%s --> %s\n%s\n' % (i+1, timestr(st), timestr(et), c['content'])
if __name__ == '__main__':
main()
4. mencoderで動画と字幕をひっつける。動画のファイルがvideo.mp4、字幕のファイルがjpn.srtとしてます。↓としたらiPod Touchでも見られた。
mencoder video.mp4 -ofps 30 -sws 9 -of lavf -lavfopts format=ipod -vf scale=-10:240,dsize=320:240:0,harddup -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=448:acodec=libfaac:abitrate=128 -oac lavc -alang en -srate 22050 -sub jpn.srt -utf8 -slang ja -subalign 0 -subpos 93 -subfont-outline 5 -subfont-text-scale 3 -font 'Meiryo' -sub-bg-alpha 255 -o video_sub.mp4