PythonTip >> 博文 >> python

《冰雪奇缘》之缘——A站弹幕 JSON 转 crt

zihua 2014-03-04 15:03:46 点击: 882 | 收藏


都是 《冰雪奇缘》 惹的祸,不仅画面美仑美奂,音乐激荡人心,而且还玩 多语言版本的主题曲

you-get 竟助纣为虐,把歌词给下回来了!只叹 soimort 没有好人做到底,留一个语义不详的 JSON 让我情何以堪。

好在 muzuiget 才识不凡, 有码略释其义 ,遂如我光影、声音、文字三位一体之愿!

以下 代码数十行 ,只为女王歌一曲:

#!/usr/bin/env python3

import json
import sys

def cmtjson_reader(f):
  data = json.load(f)
  for o in data:
    c = o['c'].split(',')
    m = o['m']
    # see
    # https://github.com/muzuiget/niconvert/blob/master/niconvert/libsite/acfun.py
    start = float(c[0])
    yield start, m

def format_time(t):
  s, ms = divmod(t, 1)
  s = int(s)
  ms = int(ms * 1000)
  m, s = divmod(s, 60)
  h, m = divmod(m, 60)
  return '%d:%02d:%02d,%03d' % (h, m, s, ms)

def crt_writer(f):
  i = 0

  fmt = '%d\n%s --> %s\n%s\n\n'
  try:
    while True:
      t, m = yield
      ts = format_time(t)
      if i != 0:
        f.write(fmt % (i, format_time(old_t), ts, old_m))
      i += 1
      old_t = t
      old_m = m
  except GeneratorExit:
    f.write(fmt % (
      i+1, format_time(old_t), format_time(old_t + 2), m))

def main():
  w = crt_writer(sys.stdout)
  w.send(None)
  old_d0 = 0
  for d in cmtjson_reader(sys.stdin):
    w.send(d)
    if d[0] 
原文链接:http://www.tuicool.com/articles/ZZfyMf

作者:zihua | 分类: python | 标签: python | 阅读: 882 | 发布于: 2014-03-04 15时 |