标注自用 适用性不行 顶多作为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