这是一款python源码,实现将没有文字字幕的视频,通过语音识别技术识别为文本,然后重写将字幕添加到视频底部的效果代码。
注意调用的是google语音识别服务,确保你的网络能访问谷歌。
import os
import speech_recognition as sr
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
from pydub import AudioSegment
def extract_audio(video_path):
video = VideoFileClip(video_path)
audio = video.audio
audio.write_audiofile("temp_audio.wav")
return "temp_audio.wav"
def transcribe_audio(audio_path):
recognizer = sr.Recognizer()
audio = AudioSegment.from_wav(audio_path)
# 将音频分割成较小的片段
chunk_length_ms = 10000 # 10秒
chunks = [audio[i:i+chunk_length_ms] for i in range(0, len(audio), chunk_length_ms)]
transcriptions = []
for i, chunk in enumerate(chunks):
chunk.export(f"temp_chunk_{i}.wav", format="wav")
with sr.AudioFile(f"temp_chunk_{i}.wav") as source:
audio_data = recognizer.record(source)
try:
text = recognizer.recognize_google(audio_data, language="zh-CN")
transcriptions.append((i * chunk_length_ms / 1000, text))
except sr.UnknownValueError:
print(f"Could not understand audio in chunk {i}")
except sr.RequestError as e:
print(f"Could not request results from Google Speech Recognition service; {e}")
os.remove(f"temp_chunk_{i}.wav")
return transcriptions
def create_subtitle_clips(transcriptions, videosize, fontsize=24, font='Arial', color='white', method='caption'):
subtitle_clips = []
for i, (t, text) in enumerate(transcriptions):
if i < len(transcriptions) - 1:
duration = transcriptions[i+1][0] - t
else:
duration = 5 # 最后一个字幕显示5秒
text_clip = TextClip(text, fontsize=fontsize, font=font, color=color, size=videosize, method=method)
text_clip = text_clip.set_pos('bottom').set_duration(duration).set_start(t)
subtitle_clips.append(text_clip)
return subtitle_clips
def add_subtitles_to_video(video_path, output_path):
# 提取音频
audio_path = extract_audio(video_path)
# 转写音频
transcriptions = transcribe_audio(audio_path)
# 创建视频剪辑
video = VideoFileClip(video_path)
# 创建字幕剪辑
subtitle_clips = create_subtitle_clips(transcriptions, video.size)
# 将字幕添加到视频
final_video = CompositeVideoClip([video] + subtitle_clips)
# 写入新视频
final_video.write_videofile(output_path)
# 清理临时文件
os.remove(audio_path)
# 使用示例
input_video = "inputvideo.mp4"
output_video = "output.mp4"
add_subtitles_to_video(input_video, output_video) 网友回复
有没有免费让ai自动帮你接管操作电脑的mcp服务?
mcp为啥用Streamable HTTP 替代 HTTP + SSE?
scratchjr有没有开源的前端html网页版本源代码?
多模态大模型能否根据ui交互视频来来模仿写出前端交互动画效果ui代码?
如何用阿里云oss+函数计算fc+事件总线EventBridge+消息队列+数据库+redis缓存打造一个高并发弹性系统?
阿里云函数计算 FC如何在海外节点搭建一个代理网络?
ai studio中gemini build的代码如何发布到github pages等免费网页托管上 ?
如何在cursor、qoder、trae中使用Claude Skills功能?
有没有不用u盘就能重装系统的开源工具?
python如何固定摄像头实时计算停车场停车位剩余数量?


