avi 视频

百度云里的一个avi 视频被扫黄毁坏掉了,于是想研究下是怎么回事。

参考 

http://www.alexander-noe.com/video/documentation/avi.pdf

http://blog.csdn.net/d_l_u_f/article/details/7309212

python 代码读 LIST 信息

import os

def charSequece2Int(data):
  ret = 0
  td = data[::-1]
  for x in td:
    ret = ret * 16 * 16 + ord(x)
  #print 'data=',data, 'ret=',ret
  return ret

def readList(data, cursor, prefix=''):
  oldCursor = cursor
  List = {}
  if len(data) < cursor + 12:
    return List
  List['dwList'] = data[cursor: cursor + 4]
  cursor += 4
  dwSize = charSequece2Int(data[cursor: cursor + 4]);
  List['dwSize'] = dwSize
  if dwSize == 0:
    return {}
  cursor += 4
  if List['dwList'] != 'LIST' and List['dwList'] != 'RIFF':
    #CHUNK
    List['dwFourCC'] = List['dwList']
    del List['dwList']
    List['data'] = data[cursor: cursor + dwSize]
    cursor += dwSize
  else:
    #LIST
    List['dwFourCC'] = data[cursor: cursor + 4]
    cursor += 4
    List['data'] = data[cursor: cursor + dwSize - 4]
    cursor += dwSize - 4

  List['len'] = cursor - oldCursor

  if 'dwList' in List: print prefix,'dwList:', List['dwList']
  print prefix, 'dwSize:', str(dwSize)
  print prefix, 'dwFourCC:', List['dwFourCC']
  
  return List

def recursiveReadList(data, cursor, prefix=''):
  while True:
    print
    List = readList(data, cursor, prefix)
    listType = ['LIST', 'RIFF']
    if('dwList' in List and List['dwList'] in listType and List['dwFourCC'] != 'movi'):
      recursiveReadList(List['data'], 0, prefix + '\t')
    if 'len' in List:
      cursor += List['len']
    else:
      break

def main():
  #avi = '../xs.avi'
  avi = '../jpm.avi'
  data = open(avi, 'rb').read()
  print('len(data)=',len(data));

  cursor = 0
  #List = readList(data, cursor)
  #print
  #cursor += 12
  recursiveReadList(data, cursor)
  #while 'data' in List:
  #  List = readList(data, cursor)
  #  if 'data' in List:
  #    cursor += List['len']
  #  print

if __name__ == '__main__': main()


经过对比发现文件的开头的  1749322 个字节被度娘替换掉了,整个文件也无法恢复成最初的样子了(至少我不会)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值