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

使用Python调用FFmpeg给MKV添加字幕时路径报错求助

解决Python调用FFmpeg为MKV添加字幕的路径错误问题

错误原因分析

从报错信息里的Unable to parse option value "UsersclaraDocumentsProyectosSubtitulossubtitulos..." as image size可以看出:Windows路径的反斜杠被转义后消失,导致路径变成无分隔符的连续字符串,FFmpeg误将其识别为subtitles滤镜的original_size参数值,从而触发参数无效的错误。

解决方案

方案1:修正路径转义问题

将Windows路径的反斜杠替换为正斜杠,同时避免在滤镜字符串中使用单引号包裹路径:

import os
from fuzzywuzzy import fuzz
import ffmpeg

for video_file, (video, subtitle) in video_subtitle_mapping.items():
    print(f"Video: {video_file}, Subtitle: {subtitle}")

    # 构建字幕、视频和输出路径
    subtitulo_file = os.path.join(r"C:\Users\clara\Documents\Proyectos\Subtitulos\subtitulos", subtitle)
    video_path = os.path.join(r"C:\Users\clara\Documents\Proyectos\Subtitulos\videos", video_file)
    output_video_file = os.path.join(r"C:\Users\clara\Documents\Proyectos\Subtitulos\videos_con_subtitulos", video_file)

    # 将Windows反斜杠替换为正斜杠,避免转义问题
    subtitulo_file = subtitulo_file.replace("\\", "/")
    video_path = video_path.replace("\\", "/")

    try:
        # 直接传递路径,无需额外单引号包裹
        ffmpeg.input(video_path).output(output_video_file, vf=f"subtitles={subtitulo_file}").run()
    except ffmpeg.Error as e:
        # 解码stderr输出为可读字符串
        print(f"Error processing video {video_file}: {e.stderr.decode('utf-8')}")

方案2:使用FFmpeg-Python的filter方法(推荐)

直接调用filter()方法传递字幕参数,完全避免字符串转义问题:

import os
from fuzzywuzzy import fuzz
import ffmpeg

for video_file, (video, subtitle) in video_subtitle_mapping.items():
    print(f"Video: {video_file}, Subtitle: {subtitle}")

    # 构建路径
    subtitulo_file = os.path.join(r"C:\Users\clara\Documents\Proyectos\Subtitulos\subtitulos", subtitle)
    video_path = os.path.join(r"C:\Users\clara\Documents\Proyectos\Subtitulos\videos", video_file)
    output_video_file = os.path.join(r"C:\Users\clara\Documents\Proyectos\Subtitulos\videos_con_subtitulos", video_file)

    try:
        # 使用filter方法配置字幕滤镜,无需手动处理字符串转义
        stream = ffmpeg.input(video_path)
        stream = ffmpeg.filter(stream, 'subtitles', filename=subtitulo_file)
        ffmpeg.output(stream, output_video_file).run()
    except ffmpeg.Error as e:
        print(f"Error processing video {video_file}: {e.stderr.decode('utf-8')}")

额外提示

  • 如果输出文件已存在,FFmpeg默认会报错,可以在output()方法中添加overwrite_output=True参数覆盖已有文件:ffmpeg.output(stream, output_video_file, overwrite_output=True).run()
  • 确保FFmpeg已正确添加到系统环境变量中,或者在代码中指定FFmpeg的路径:ffmpeg.input(video_path, cmd=r"C:\path\to\ffmpeg.exe")

内容的提问来源于stack exchange,提问作者Clara Ogalla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:25:08