Browse Source

media tag processing #1

pull/3/head
Nzix 6 years ago
parent
commit
4e1b876556
  1. 10
      README.md
  2. 49
      ncmdump.py

10
README.md

@ -2,16 +2,20 @@
## 简介 ## 简介
早就在算计网易云ncm文件,不过一直没什么机会,前些天突然看到已经有大佬 [anonymous5l/ncmdump ](https://github.com/anonymous5l/ncmdump)实现了,因为好奇加密算法就用Python移植了下,啊大佬不愧是大佬,感激!测试发现转换出来的媒体文件都已包含媒体信息,故未再实现原repo中的写tag操作。还有Python实现比C++慢不少。仅供学习交流,请勿传播扩散。用Python处理字节真让人头大emmm 感激大佬的 [anonymous5l/ncmdump ](https://github.com/anonymous5l/ncmdump)项目,因好奇加密算法就用Python移植了下。自测发现转换出来的媒体文件都已包含媒体信息(包括专辑封面),~~故未再实现原repo中的写tag操作~~,应issue要求还是补上了写tag操作。Python实现比C++慢不少,实用性不大,仅供学习交流,请勿传播扩散。
## 依赖 ## 依赖
``` ```
pip(3) install pycrypto pip(3) install pycrypto mutagen
``` ```
## 使用 ## 使用
指定ncm文件
``` ```
python(3) ncmdump.py [files ...] python(3) ncmdump.py [files ...]
``` ```
工作目录下所有ncm文件
```
python(3) ncmdump.py
```

49
ncmdump.py

@ -11,6 +11,7 @@ import base64
import json import json
import os import os
from Crypto.Cipher import AES from Crypto.Cipher import AES
from mutagen import mp3, flac, id3
def dump(file_path): def dump(file_path):
@ -69,9 +70,9 @@ def dump(file_path):
# media data # media data
file_name = meta_data['artist'][0][0] + ' - ' + meta_data['musicName'] + '.' + meta_data['format'] file_name = meta_data['artist'][0][0] + ' - ' + meta_data['musicName'] + '.' + meta_data['format']
m = open(os.path.join(os.path.split(file_path)[0],file_name),'wb') music_path = os.path.join(os.path.split(file_path)[0],file_name)
m = open(music_path,'wb')
chunk = bytearray()
while True: while True:
chunk = bytearray(f.read(0x8000)) chunk = bytearray(f.read(0x8000))
chunk_length = len(chunk) chunk_length = len(chunk)
@ -87,13 +88,47 @@ def dump(file_path):
m.close() m.close()
f.close() f.close()
# media tag
if meta_data['format'] == 'flac':
audio = flac.FLAC(music_path)
audio.delete()
image = flac.Picture()
image.type = 3
image.mime = 'image/jpeg'
image.data = image_data
audio.clear_pictures()
audio.add_picture(image)
elif meta_data['format'] == 'mp3':
audio = mp3.MP3(music_path)
audio.delete()
image = id3.APIC()
image.type = 3
image.mime = 'image/jpeg'
image.data = image_data
audio.tags.add(image)
audio.save()
audio = mp3.EasyMP3(music_path)
audio['title'] = meta_data['musicName']
audio['album'] = meta_data['album']
audio['artist'] = ';'.join([artist[0] for artist in meta_data['artist']])
audio.save()
if __name__ == '__main__': if __name__ == '__main__':
import sys import sys
if len(sys.argv) > 1: if len(sys.argv) > 1:
for file_path in sys.argv[1:]: files = sys.argv[1:]
try:
dump(file_path)
except:
pass
else: else:
files = [file_name for file_name in os.listdir('.') if os.path.splitext(file_name)[-1] == '.ncm']
if not files:
print('please input file path!') print('please input file path!')
for file_name in files:
try:
dump(file_name)
print(os.path.split(file_name)[-1])
except Exception as e:
print(e)
pass

Loading…
Cancel
Save