怎么用脚本提取视频字幕

wen 实用脚本 3

本文目录导读:

怎么用脚本提取视频字幕

  1. 方法一:使用 Python + EasyOCR(OCR识别)
  2. 方法二:使用 PaddleOCR(更精准)
  3. 方法三:使用 Whisper(语音识别)
  4. 方法四:使用 ffmpeg(提取软字幕)
  5. 方法五:使用视频字幕提取工具
  6. 安装依赖
  7. 使用建议

使用 Python + EasyOCR(OCR识别)

import easyocr
import cv2
from PIL import Image
import numpy as np
def extract_subtitles(video_path, frame_interval=2):
    """
    从视频中提取字幕(通过OCR识别)
    """
    # 初始化OCR
    reader = easyocr.Reader(['ch_sim', 'en'])  # 支持中英文
    # 打开视频
    cap = cv2.VideoCapture(video_path)
    fps = cap.get(cv2.CAP_PROP_FPS)
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    subtitles = []
    current_text = ""
    for frame_num in range(0, total_frames, int(fps * frame_interval)):
        cap.set(cv2.CAP_PROP_POS_FRAMES, frame_num)
        ret, frame = cap.read()
        if not ret:
            break
        # 提取字幕区域(通常是底部1/3)
        height, width = frame.shape[:2]
        subtitle_region = frame[int(height*0.7):, :]
        # OCR识别
        result = reader.readtext(subtitle_region)
        text = ' '.join([item[1] for item in result])
        if text and text != current_text:
            subtitles.append({
                'timestamp': frame_num / fps,
                'text': text
            })
            current_text = text
    cap.release()
    return subtitles
# 使用示例s = extract_subtitles('your_video.mp4')
for sub in subtitles:
    print(f"[{sub['timestamp']:.1f}s] {sub['text']}")

使用 PaddleOCR(更精准)

from paddleocr import PaddleOCR
import cv2
def extract_with_paddle(video_path, interval=1):
    """
    使用PaddleOCR提取字幕
    """
    ocr = PaddleOCR(use_angle_cls=True, lang='ch')
    cap = cv2.VideoCapture(video_path)
    subtitles = []
    fps = int(cap.get(cv2.CAP_PROP_FPS))
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    for i in range(0, total_frames, fps * interval):
        cap.set(cv2.CAP_PROP_POS_FRAMES, i)
        ret, frame = cap.read()
        if not ret:
            break
        # 获取字幕区域
        h, w = frame.shape[:2]
        roi = frame[int(h*0.7):, :]
        # OCR识别
        result = ocr.ocr(roi, cls=True)
        if result:
            text = ' '.join([line[1][0] for line in result[0]])
            subtitles.append({
                'time': i / fps,
                'text': text
            })
    cap.release()
    return subtitles

使用 Whisper(语音识别)

import whisper
def extract_with_whisper(video_path):
    """
    使用OpenAI Whisper提取字幕(从音频)
    """
    # 加载模型(支持多语言)
    model = whisper.load_model("base")
    # 识别
    result = model.transcribe(video_path, language="zh")
    # 输出字幕
    for segment in result["segments"]:
        print(f"[{segment['start']:.1f}s - {segment['end']:.1f}s] {segment['text']}")
    # 保存为SRT格式
    with open("subtitles.srt", "w", encoding="utf-8") as f:
        for i, segment in enumerate(result["segments"], 1):
            start = segment['start']
            end = segment['end']
            text = segment['text']
            f.write(f"{i}\n")
            f.write(f"{format_timestamp(start)} --> {format_timestamp(end)}\n")
            f.write(f"{text}\n\n")
    return result
def format_timestamp(seconds):
    """格式化时间戳"""
    m, s = divmod(seconds, 60)
    h, m = divmod(m, 60)
    return f"{int(h):02d}:{int(m):02d}:{int(s):02d},000"

使用 ffmpeg(提取软字幕)

# 提取内嵌字幕流
ffmpeg -i input.mp4 -map 0:s:0 subtitles.srt
# 列出所有字幕流
ffmpeg -i input.mp4
# 提取特定字幕流
ffmpeg -i input.mp4 -map 0:s:1 -f srt subtitle1.srt

使用视频字幕提取工具

import subprocess
import os
def extract_with_tool(video_path, output_srt="output.srt"):
    """
    使用第三方工具(如VideoSubFinder等)
    """
    # 确保安装了工具
    if os.path.exists("VideoSubFinder_CLI"):
        # 提取字幕帧
        subprocess.run([
            "./VideoSubFinder_CLI", 
            "-i", video_path,
            "-o", "output_frames"
        ])
        # OCR识别字幕帧
        subprocess.run([
            "tesseract", 
            "output_frames",
            output_srt.replace('.srt', ''),
            "-l", "chi_sim+eng"
        ])

安装依赖

# 方法一所需
pip install easyocr opencv-python
# 方法二所需
pip install paddlepaddle paddleocr
# 方法三所需
pip install openai-whisper
# ffmpeg
sudo apt install ffmpeg  # Linux/macOS
# Windows下载: https://ffmpeg.org/download.html

使用建议

  1. 字幕在画面底部:视频字幕通常在底部1/3区域
  2. 视频清晰度:清晰的视频OCR效果更好
  3. 字幕样式:颜色和字体影响识别准确率
  4. 性能优化:可以设置帧间隔,避免每帧都处理

需要我帮你实现其中某一种方法的具体应用吗?

抱歉,评论功能暂时关闭!