python3将seq文件转化为avi

欢迎扫描二维码关注微信公众号 深度学习与数学  [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
在这里插入图片描述

read_seq.py

# -*- coding: utf-8 -*-  
"""
@author: 赵磊
@project: FURKING_MESS_TOOLS
@file: read_seq.py
@time: 2019/9/28 15:57
@description: 
"""

import struct
import cv2


def read_header(ifile):
    feed = ifile.read(4)
    norpix = ifile.read(24)
    version = struct.unpack('@i', ifile.read(4))
    length = struct.unpack('@i', ifile.read(4))
    assert (length != 1024)
    descr = ifile.read(512)
    params = [struct.unpack('@i', ifile.read(4))[0] for i in range(0, 9)]
    fps = struct.unpack('@d', ifile.read(8))
    # skipping the rest
    ifile.read(432)
    image_ext = {100: 'raw', 102: 'jpg', 201: 'jpg', 1: 'png', 2: 'png'}
    return {'w': params[0], 'h': params[1],
            'bdepth': params[2],
            'ext': image_ext[params[5]],
            'format': params[5],
            'size': params[4],
            'true_size': params[8],
            'num_frames': params[6]}


def read_seq(path):
    ifile = open(path, 'rb')
    params = read_header(ifile)
    bytes = open(path, 'rb').read()

    # this is freaking magic, but it works
    extra = 8
    s = 1024
    seek = [0] * (params['num_frames'] + 1)
    seek[0] = 1024

    images = []

    # this crashes in the last iteration, so we reduce it by one iteration
    for i in range(0, params['num_frames'] - 1):
        tmp = struct.unpack_from('@I', bytes[s:s + 4])[0]
        s = seek[i] + tmp + extra
        if i == 0:
            val = struct.unpack_from('@B', bytes[s:s + 1])[0]
            if val != 0:
                s -= 4
            else:
                extra += 8
                s += 8
        seek[i + 1] = s
        nbytes = struct.unpack_from('@i', bytes[s:s + 4])[0]
        I = bytes[s + 4:s + nbytes]

        tmp_file = 'tmp/img%d.jpg' % i
        open(tmp_file, 'wb+').write(I)

        img = cv2.imread(tmp_file)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        images.append(img)
    return images

seq2avi.py

# -*- coding: utf-8 -*-  
"""
@author: 赵磊
@project: FURKING_MESS_TOOLS
@file: seq2avi.py
@time: 2019/9/28 15:35
@description: 
"""


import numpy as np
import os
import read_seq
import cv2

video_list = 'video_Olympic.list'
dataset_root = 'C:\\Users\\user\\Desktop\\set08'
dataset_converted_root = 'C:\\Users\\user\\Desktop\\set08\\re'

if not os.path.exists(dataset_converted_root):
    print('Creating new folder for converted dataset')
    os.mkdir(dataset_converted_root)

cnt = 0
file = open(video_list, 'r')
for line_raw in file:
    video_name = line_raw.rstrip('\n')
    video_class = video_name.split('/')[0]
    video_filename = video_name.split('/')[-1]
    video_path = os.path.join(dataset_root, video_name)
    video_name_wo_ext = os.path.join(*video_name.split('.')[:-1])
    converted_video_path = os.path.join(dataset_converted_root, video_name_wo_ext + '_converted.avi')

    dest_class_folder = os.path.join(dataset_converted_root, video_class)
    if not os.path.exists(dest_class_folder):
        os.mkdir(dest_class_folder)

    print('#{:04d} \t| Reading video {}'.format(cnt + 1, video_name))
    image_npy_list = read_seq.read_seq(video_path)
    print('Found {:04d} images'.format(len(image_npy_list)))
    sample_img = image_npy_list[0]
    h = sample_img.shape[0]
    w = sample_img.shape[1]

    video = np.array(image_npy_list, dtype=np.float32)
    writer = cv2.VideoWriter(converted_video_path, cv2.VideoWriter_fourcc(*'PIM1'), 25, (w, h), True)
    for img in image_npy_list:
        img = img[:, :, [2, 1, 0]]
        writer.write(img)
    print('')
    cnt += 1
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值