You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows系统的Django网站中使用ccextractor提取字幕及部署

解决Django中集成ccextractor提取字幕的实操步骤

一、先搞定本地ccextractor的基础调用

先别着急碰Django,先确保本地能正常用ccextractor:

  • 安装ccextractor:Ubuntu直接跑sudo apt install ccextractor,Windows下载二进制包后放到系统PATH里。
  • 命令行测试:ccextractor 你的视频文件.mp4 -o 输出字幕.srt,确认能生成有效的srt字幕文件。

接着在Django里用subprocess调用,这是核心逻辑:

import subprocess
import os
from django.conf import settings

def extract_subtitle(video_path, output_dir):
    # 确保输出目录存在,不存在就创建
    os.makedirs(output_dir, exist_ok=True)
    output_sub = os.path.join(output_dir, "subtitle.srt")
    
    # 拼接ccextractor命令
    cmd = [
        "ccextractor",
        video_path,
        "-o", output_sub
    ]
    
    try:
        # 执行命令并捕获输出
        result = subprocess.run(
            cmd,
            capture_output=True,
            text=True,
            check=True
        )
        return output_sub, result.stdout
    except subprocess.CalledProcessError as e:
        # 捕获错误信息,方便排查
        return None, e.stderr

注意:本地测试时,把视频放到Django的media目录下,用settings.MEDIA_ROOT拼接路径,同时给Django进程足够的文件读写权限。

二、本地Django调用失败的常见排查点

  • ccextractor路径问题:如果系统PATH没配置,直接写绝对路径,比如"/usr/bin/ccextractor"或者"C:/ccextractor/ccextractor.exe"。
  • 文件权限:确保Django运行用户(比如本地的你)能读取视频文件、写入输出目录,必要时用chmod 755调整权限。
  • 视频格式兼容:ccextractor对部分小众格式支持有限,先拿MP4、AVI这类常见格式测试,或者加-autoprogram参数自动适配。

三、部署环境的关键配置

不管用VPS、云服务器还是Docker,核心是让部署环境里有ccextractor:

  • Linux服务器:部署前执行sudo apt update && sudo apt install ccextractor,如果需要特定版本可以从源码编译。
  • Docker容器:在Dockerfile里加入安装命令:
FROM python:3.10-slim
RUN apt-get update && apt-get install -y ccextractor && rm -rf /var/lib/apt/lists/*
# 后续的Django依赖安装、代码拷贝步骤...
  • 部署权限:确保运行Django的进程(比如uWSGI/Gunicorn的运行用户)有权限访问媒体文件和临时输出目录,用chown www-data:www-data调整目录归属。

四、完整的Django视图示例

把提取逻辑整合到视图里,处理用户上传的视频:

from django.http import HttpResponse
from django.views.decorators.http import require_POST
from .utils import extract_subtitle  # 把上面的提取函数放到utils.py里

@require_POST
def upload_and_extract(request):
    video_file = request.FILES.get("video")
    if not video_file:
        return HttpResponse("请上传视频文件", status=400)
    
    # 保存上传的视频到media目录
    video_path = os.path.join(settings.MEDIA_ROOT, video_file.name)
    with open(video_path, "wb+") as f:
        for chunk in video_file.chunks():
            f.write(chunk)
    
    # 提取字幕
    output_dir = os.path.join(settings.MEDIA_ROOT, "subtitles")
    sub_path, msg = extract_subtitle(video_path, output_dir)
    
    if sub_path:
        # 返回字幕内容,或者提供下载链接
        with open(sub_path, "r", encoding="utf-8") as f:
            subtitle_content = f.read()
        return HttpResponse(subtitle_content, content_type="text/plain")
    else:
        return HttpResponse(f"提取失败: {msg}", status=500)

内容的提问来源于stack exchange,提问作者its me crzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:03:26