1
0

dump-audio.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/bin/env python2
  2. # -*- coding: utf-8 -*-
  3. # File: dump-audio.py
  4. # Author: Yuxin Wu <ppwwyyxxc@gmail.com>
  5. import sys
  6. import argparse
  7. from common.textutil import ensure_unicode
  8. from wechat.parser import WeChatDBParser
  9. from wechat.res import Resource
  10. from wechat.render import HTMLRender
  11. from wechat.libchathelper import LibChatHelper
  12. def get_args():
  13. parser = argparse.ArgumentParser()
  14. parser.add_argument('name', help='name of contact')
  15. parser.add_argument('--output', help='output mp3 dir', default='/tmp')
  16. parser.add_argument('--db', default='decrypted.db', help='path to decrypted database')
  17. parser.add_argument('--res', default='resource', help='reseource directory')
  18. args = parser.parse_args()
  19. return args
  20. if __name__ == '__main__':
  21. args = get_args()
  22. name = ensure_unicode(args.name)
  23. output_file = args.output
  24. parser = WeChatDBParser(args.db)
  25. res = Resource(args.res, '')
  26. if name and name in parser.msgs_by_chat:
  27. msgs = parser.msgs_by_chat[name]
  28. else:
  29. sys.stderr.write(u"Valid Contacts: {}\n".format(u'\n'.join(parser.msgs_by_chat.keys())))
  30. sys.stderr.write(u"Couldn't find that contact {}.".format(name));
  31. sys.exit(1)
  32. print "Number of Messages: ", len(msgs)
  33. assert len(msgs) > 0
  34. libchat = LibChatHelper(parser, res)
  35. msgs = libchat.convert_msgs(msgs)
  36. voices = [m.sound for m in msgs if m.sound]
  37. for idx, v in enumerate(voices):
  38. p = v.find(':')
  39. v = v[p:]
  40. with open('/{}/{:04d}.mp3'.format(args.output, idx), 'wb') as f:
  41. f.write(v)