转载自:https://blog.youkuaiyun.com/u013992365/article/details/81287041
一、在windows下编译python所需的protobuf的相关文件
1、首先下载protobuf源码(后一个是我自己从github上down的,因为版本是3.6.0,因为网不好下了很久,但是这个是完全体,就是我把包括python在内的全部版本都下了下来):
https://github.com/google/protobuf/releases/tag/v3.6.0
或是:https://download.youkuaiyun.com/download/u013992365/10570515
2、找到protobuf-3.6.0.zip和protoc-3.6.0-win32.zip两个文件,解压;
3、将protoc-3.6.0-win32\bin下的protoc.exe复制到protobuf-3.6.0\src;
4、cmd窗口下切换到protobuf-3.6.0的python目录下,依次运行以下命令:
python setup.py build
python setup.py test
python setup.py install
通过以上操作,就在机器中安装了python的protubuf。可以通过import google.protobuf
命令来检测是否安装成功,如果成功了就是下图这样,如果报错了就是失败了。
生成python解析文件
B站弹幕解析格式
syntax = "proto3";
package dm;
message DmSegMobileReply{
repeated DanmakuElem elems=1;
}
message DanmakuElem{
int64 id = 1;
int32 progress = 2;
int32 mode = 3;
int32 fontsize = 4;
uint32 color = 5;
string midHash = 6;
string content = 7;
int64 ctime = 8;
int32 weight = 9;
string action = 10;
int32 pool = 11;
string idStr = 12;
}
利用protoc工具将其编译为python解析文件。
protoc --python_out=./ ./dm.proto
解析弹幕
执行完上面语句,就会拿到一份dm_pb2.py文件,我们需要在解析字幕的时候引用他。使用方法如下:
from dm_pb2 import DmSegMobileReply
from google.protobuf.json_format import MessageToJson,Parse
import json
DM = DmSegMobileReply()
with open("./message","rb") as f:
DM.ParseFromString(f.read())
with open("./message.json","w") as f:
f.write(json.dumps(json.loads(MessageToJson(DM)),ensure_ascii=False))