步骤:
1、提取音频轨道:
使用工具如 `ffmpeg` 提取视频中的音频部分。
bash
ffmpeg i input_video.mp4 q:a 0 map a audio_output.mp3
2、应用 ASR 技术:
使用语音转文字工具将音频转换为文本。
常用的 ASR 工具包括:
Google SpeechtoText API:支持多种语言,准确率高。
Microsoft Azure Speech to Text:支持实时和批量处理。
Deepgram:适合长音频处理。
科大讯飞语音识别:中文支持优秀。
Whisper(OpenAI 开源模型):支持离线运行,效果出色。
3、后处理文本:
校正 ASR 输出的文本错误。
添加时间戳或分段信息以便与视频同步。
工具推荐:
在线工具:
[Google SpeechtoText](https://cloud.google.com/speechtotext)
[Microsoft Azure Speech to Text](https://azure.microsoft.com/enus/services/cognitiveservices/speechtotext/)
本地工具:
Whisper(开源,支持离线运行)
bash
pip install openaiwhisper
whisper audio_output.mp3 model medium language en
4、结合 OCR 和 ASR
如果需要同时提取视频中的屏幕文字和语音内容,可以将上述两种方法结合起来:
1、使用 OCR 提取屏幕上的文字。
2、使用 ASR 提取语音内容。
3、合并两种结果,并根据时间戳对齐。
6、注意事项
OCR 精度:OCR 对于复杂背景或模糊文字可能效果不佳,需预处理图片(如二值化、去噪)。
ASR 精度:ASR 对于方言、嘈杂环境或快速语速可能有误差,需后期校正。
语言支持:确保所选工具支持目标语言(如中文、英文等)。
隐私问题:如果视频包含敏感信息,建议在本地部署工具而不是使用云端服务。
示例代码(Python 实现)
以下是一个简单的 Python 示例,结合 OCR 和 ASR 提取视频文字:
python
import cv2
import pytesseract
from pydub import AudioSegment
import speech_recognition as sr
提取视频帧并使用 OCR
def extract_text_from_frames(video_path):
cap = cv2.VideoCapture(video_path)
frame_count = 0
extracted_texts = []
while True:
ret, frame = cap.read()
if not ret:
break
每隔 30 帧提取一次
if frame_count % 30 == 0:
text = pytesseract.image_to_string(frame)
extracted_texts.append(text)
frame_count += 1
cap.release()
return extracted_texts
提取音频并使用 ASR
def extract_text_from_audio(video_path):
提取音频
audio_path = temp_audio.wav
os.system(fffmpeg i {video_path} q:a 0 map a {audio_path})
使用 SpeechRecognition 进行 ASR
recognizer = sr.Recognizer()
with sr.AudioFile(audio_path) as source:
audio_data = recognizer.record(source)
text = recognizer.recognize_google(audio_data, language=zhCN)
return text