2021-04-16 mp4==>wav+txt==>音频段00:00:00-99:99:99

 

标注自用 适用性不行 顶多作为tools 拆开用

~1)json转txt 并提取需要的类temp数据

import json
import os
import numpy as np

def readjson():
    # // 打开json文件,文件路径要自己改
    with open("./draft.json", 'r', encoding='utf-8') as f:


        temp = json.loads(f.read())
        # // 获得 中的内容
        # print(temp['materials']['texts'])

        j = 0

        file_handle = open('./text_timeline.txt', mode='w')
        # // 遍历 中的每一项
        for t1 in temp['tracks'][1]['segments']:
            str1 = str(temp['tracks'][1]['segments'][j]['target_timerange'])
            id1 = temp['tracks'][1]['segments'][j]['material_id']
            i = 0
            for t2 in temp['materials']['texts']:
                str2 = temp['materials']['texts'][i]['content']
                id2 = temp['materials']['texts'][i]['id']
            # // 获得 和  id
                if id2 == id1:
                    # print(str2, str1)
                    str_U = str1 + ";" + str2
                    print(str_U + '\n')
                    file_handle.writelines(str_U + '\n')
                i = i + 1
            j = j + 1


        # # print(str_U)
        #     file_handle.writelines(str_U + '\n')
        # print(str_U + '\n')
        # print(i,j)
        file_handle.close()


        # // 遍历 中的每一项



if __name__ == '__main__':
    readjson()

~2)使用win10 powershell FFmpeg 命令行解决 MP4 转 wav (批量自加

#mp4 转 wav
ffmpeg -i ./kefu2.mp4 -ar 16000 -vn ./kefu2.wav

#wav 设置为 单通道

ffmpeg -i ./kefu2.wav -ac 1 -ar 16000 ./kefu2.wav




#同时

ffmpeg -i .\peiwan2.mp4 -ac 1 -ar 16000 -vn .\peiwan2.wav

~3)根据txt 数据 截取 提取.wav 音频段

from scipy.io import wavfile
import sys
import os
from pathlib import Path


def pickup(output_file, path, name, num):

    my_file = Path(output_file)
    like = wavfile.read(path + name)
    with open("text_timeline.txt", "r") as f:
        if not my_file.exists():
            os.makedirs(my_file)
        file_handle = open(output_file + 'label.txt', mode='w')
        for line in f.readlines():

            start_time = 0
            end_time = 0
            sample_1 = line.split('}')
            sample_2 = sample_1[0].split('{')
            end_time = sample_2[1].split(':')
            end_time = end_time[1].split(',')
            # print(end_time[0][1:-1])
            # print(int(end_time[0][1:]))    #int(end_time[0][1:-1]) 维持时间
            if 'start' in sample_2[1]:
                locat =  sample_2[1][int(sample_2[1].rfind('start'))+8:]

                start_time = float(int(locat)/1000000)
                end_time = float((int(locat) + int(end_time[0][1:]))/1000000)
                # start_time = str(start_time)[:-4] + "*" + str(start_time)[-4:]
                # end_time = str(end_time)[:-4] + "*" + str(end_time)[-4:]
                #转化成切割时间
                print('start_time:%.3f, end_time:%.3f'% (start_time,end_time))

                s = '%05d' % num
                print('ATC'+ s + '.wav',sample_1[1][1:])  # sample_1[1][1:] 标注的识别文字
                start = int(start_time * 44100)
                end = int(end_time * 44100)
                wavfile.write(output_file + 'ATC'+ s + '.wav', 44100, like[1][start:end])
                file_handle.writelines(output_file[1:] + 'ATC'+ s + '.wav' + '   ' + sample_1[1][1:])
                num += 1
        file_handle.close()
    return num


if __name__ == '__main__':
    path = './'
    num = 0

    for name in os.listdir(path):
        if name.endswith(".wav"):

            file_name = name.split('.')[0]

            output_file = f'./{file_name}/'
            # print(output_file)
            num = pickup(output_file, path, name, num)
            print(output_file + 'final_num:%d' % num)

 

 

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------end

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值