【1】Python 视频文字识别提取 - Mp4转换成Mp3
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                【1】Python 视频文字识别提取 - Mp4转换成Mp3
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                我們有時候會對文字視頻文字進(jìn)行提取,網(wǎng)絡(luò)上沒有很好的方法。所有我用Python寫了。
?先把Mp4轉(zhuǎn)換成Mp3? ?MP42MP3.py?
# encoding:utf-8 #設(shè)置編碼方式 import hashlib import json import os import random import time import requests from requests_toolbelt import MultipartEncoder from moviepy.video.io.VideoFileClip import VideoFileClip# 分隔符,上傳文件需要 boundary = '----WebKitFormBoundarydXKxqoF1Oi2HdYCd'header = {'accept': 'application/json, text/javascript, */*; q=0.01','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36','content-type': 'application/x-www-form-urlencoded; charset=UTF-8','origin': 'http://voice.xunjiepdf.com','sec-fetch-site': 'cross-site','sec-fetch-mode': 'cors','sec-fetch-dest': 'empty','accept-language': 'zh-CN,zh;q=0.9' }# 上傳時用這個header,這個boundary要和請求中files的boundary保持一致,否則上傳會報錯 update_header = {'accept': 'application/json, text/javascript, */*; q=0.01','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36','content-type': 'multipart/form-data; boundary=' + boundary,'accept-language': 'zh-CN,zh;q=0.9' }# 用于請求的基地址BaseUrl BASE_URL = 'https://user.api.hudunsoft.com'# md5轉(zhuǎn)Text MD5_TO_TEXT_URL = BASE_URL + '/v1/alivoice/md5Totext'# 查詢?nèi)蝿?wù)進(jìn)度 TASK_INFO = BASE_URL + '/v1/alivoice/getTaskInfo'# 上傳相關(guān)的url UPLOAD_AUDIO_FILE = BASE_URL + '/v1/alivoice/uploadaudiofile?r=' + str(random.uniform(0, 1))# 這里只用到了一個post請求,所以封裝成一個方法 def post(url, body, header):requests.packages.urllib3.disable_warnings()return requests.post(url=url, data=body, headers=header, verify=False)# 任務(wù)開始、結(jié)束、刪除,都使用這個方法,只需要傳入file_info及action動作即可 action:'Begin'、'End'、'Delete' def upload_operate(file_info, action):body = {'action': action,'fileName': file_info['fileName'],'md5': file_info['md5']}return post(UPLOAD_AUDIO_FILE, body, header)# 根據(jù)文件路徑返回文件名稱 def get_file_name(file_path):return os.path.basename(file_path)# 計算文件的MD5值 def get_file_md5(filename):m = hashlib.md5() # 創(chuàng)建md5對象with open(filename, 'rb') as fp:while True:data = fp.read(4096) # 每次讀取4MBif not data:breakm.update(data) # 更新md5對象fp.close()return m.hexdigest()# 獲取文件大小 返回結(jié)果單位:byte字節(jié) def get_file_size(filePath):fsize = os.path.getsize(filePath)return fsize# 獲取當(dāng)前任務(wù)進(jìn)度 def get_task_info(file_info):body = {'client': 'web','source': '335','soft_version': 'v3.0.1.1','device_id': '33c5ba842f15511aa539830082a32500','taskId': file_info['md5']}res = post(TASK_INFO, body, header)if res.status_code == 200:info = json.loads(res.text)print(info)if info['code'] == 0:fileTextList = info['data']['file_text']s = ''for i in fileTextList:s = s + i['text']print('音頻轉(zhuǎn)義之后的文字結(jié)果為:')print(s)else:print('延時2s輪詢查詢')time.sleep(2)get_task_info(file_info)else:print(res)# 開始音頻轉(zhuǎn)語音任務(wù) def md5_to_text(file_info):body = {'client': 'web','source': '335','soft_version': 'v3.0.1.1','device_id': '33c5ba842f15511aa539830082a32500','md5': file_info['md5'],'fileName': file_info['fileName'],'title': file_info['fileName']}res = post(MD5_TO_TEXT_URL, body, header)# 說明創(chuàng)建轉(zhuǎn)義成文本的任務(wù)成功if res.status_code == 200:info = json.loads(res.text)print(info)# 開始查詢轉(zhuǎn)義的任務(wù)進(jìn)度get_task_info(file_info)else:print(res)# 刪除上傳的mp3音頻文件任務(wù) def delete_mp3_file(file_info):res = upload_operate(file_info, 'Delete')if res.status_code == 200:print('刪除成功')else:print(res)# 結(jié)束上傳mp3音頻文件任務(wù) def stop_upload_mp3_file(file_info):res = upload_operate(file_info, 'End')if res.status_code == 200:info = json.loads(res.text)print(info)# 結(jié)束任務(wù)成功之后,開始做音頻轉(zhuǎn)文字的任務(wù)md5_to_text(file_info)else:print(res)# 上傳mp3音頻文件 def upload_mp3_file(file_info):url = BASE_URL + '/v1/alivoice/uploadaudiofile?r=' + str(random.uniform(0, 1))f = open(file=file_info['filePath'], mode='rb')data = f.read()multipart_encoder = MultipartEncoder(fields={'action': (None, 'Store'),'pos': (None, '0'),'size': (None, str(file_info['size'])),'md5': (None, file_info['md5']),'file': ('blob', data, 'application/octet-stream'),},boundary=boundary)res = post(url, multipart_encoder, update_header)# 說明上傳成功if res.status_code == 200:info = json.loads(res.text)print(info)# 調(diào)用結(jié)束上傳任務(wù)stop_upload_mp3_file(file_info)else:print(res)# 開始mp3音頻文件任務(wù) def start_mp3_file(file_info):res = upload_operate(file_info, 'Begin')if res.status_code == 200:info = json.loads(res.text)print(info)if info['pos'] >= 0:# 創(chuàng)建任務(wù)成功開始之后,開始上傳音頻文件upload_mp3_file(file_info)else:# 說明之前已上傳成功過,那就直接去創(chuàng)建生成text的任務(wù)md5_to_text(file_info)else:print(res)# 將mp4文件轉(zhuǎn)為mp3音頻文件,生成路徑仍在原路徑中(需要先下載moviepy庫) def mp4_to_mp3(path):try:video = VideoFileClip(path)audio = video.audio# 設(shè)置生成的mp3文件路徑newPath = path.replace('mp4', 'mp3')audio.write_audiofile(newPath)return newPathexcept Exception as e:print(e)return Noneif __name__ == '__main__':# *********MP4文件的路徑地址,注意路徑轉(zhuǎn)義 每次修改這個路徑*********mp4FilePath = '../mp4/九邊勞動人口下跌就完全是壞事嗎這可能拯救35歲以上的中年人_1080p.mp4'# 將 mp4文件路徑,轉(zhuǎn)成的mp3文件路徑mp3FilePath = mp4_to_mp3(mp4FilePath)# 創(chuàng)建一個文件信息對象,方面后續(xù)讀取音頻文件信息# file_info = {}# file_info['md5'] = get_file_md5(mp3FilePath) # mp3對應(yīng)的md5值# file_info['fileName'] = get_file_name(mp3FilePath) # MP3文件的文件名稱# file_info['size'] = get_file_size(mp3FilePath) # 文件大小# file_info['filePath'] = mp3FilePath # 文件路徑# # 創(chuàng)建上傳MP3文件的任務(wù)# start_mp3_file(file_info)總結(jié)
以上是生活随笔為你收集整理的【1】Python 视频文字识别提取 - Mp4转换成Mp3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: SpringCloud Sleuth分布
- 下一篇: android lint工作机制,And
