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

使用MoviePy添加字幕预览视频时出现AttributeError错误求助

解决MoviePy添加字幕预览时的AttributeError: 'CompositeAudioClip' object has no attribute 'fps'错误

问题描述

使用MoviePy为视频添加字幕并预览时,触发以下错误:

AttributeError: 'CompositeAudioClip' object has no attribute 'fps'

完整报错栈如下:

Exception in thread Thread-10 (preview):
Traceback (most recent call last):
  File "C:\Users\kian\AppData\Local\Programs\Python\Python311\Lib\threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "C:\Users\kian\AppData\Local\Programs\Python\Python311\Lib\threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "<decorator-gen-118>", line 2, in preview
  File "C:\Users\kian\AppData\Local\Programs\Python\Python311\Lib\site-packages\moviepy\decorators.py", line 54, in requires_duration
    return f(clip, *a, **k)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\kian\AppData\Local\Programs\Python\Python311\Lib\site-packages\moviepy\audio\io\preview.py", line 49, in preview
    sndarray = clip.to_soundarray(tt, nbytes=nbytes, quantize=True)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<decorator-gen-62>", line 2, in to_soundarray
  File "C:\Users\kian\AppData\Local\Programs\Python\Python311\Lib\site-packages\moviepy\decorators.py", line 54, in requires_duration
    return f(clip, *a, **k)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\kian\AppData\Local\Programs\Python\Python311\Lib\site-packages\moviepy\audio\AudioClip.py", line 107, in to_soundarray
    fps = self.fps
          ^^^^^^^^
AttributeError: 'CompositeAudioClip' object has no attribute 'fps'

单独预览原视频正常,但合成字幕的复合视频无法预览,仅能保存后用第三方播放器打开。

问题原因

当使用CompositeVideoClip合成原视频与字幕时,生成的复合音频对象CompositeAudioClip未自动继承原视频的音频帧率(fps)属性,而预览函数处理音频时需要读取该属性,从而触发报错。

解决方案

方案1:预览时直接传入原视频的帧率

修改预览代码行,直接使用原视频的帧率参数,避免访问复合视频的fps属性:

composite_clip.preview(fps=video_clip.fps)

完整修改后的代码

from moviepy.editor import *
from moviepy.video.tools.subtitles import SubtitlesClip

# 加载视频片段
video_clip = VideoFileClip("H:/movie/A.Quiet place/1.mkv")
# 定义字幕文本生成器
def txt_gen(txt):
    return TextClip(txt, font='Times new roman - bold', fontsize=36, color='white')
# 设置字幕时间与内容
sub_start_time = 0.2
sub_end_time = 5
sub_text = "This is the subtitle text"
subs = [((sub_start_time, sub_end_time), sub_text)]
# 创建字幕剪辑
subtitles = SubtitlesClip(subs, txt_gen)
subtitles = subtitles.set_pos(('center', 'bottom'))
# 合成视频与字幕
composite_clip = CompositeVideoClip([video_clip, subtitles])
# 使用原视频帧率预览复合视频
composite_clip.preview(fps=video_clip.fps)
# 关闭预览窗口
composite_clip.close()

方案2:显式设置复合音频的帧率

在创建复合视频后,手动为其音频部分设置帧率:

composite_clip.audio.fps = video_clip.audio.fps

之后再调用composite_clip.preview()即可正常预览。

补充说明

复合视频保存为文件时无需额外处理,write_videofile()方法会自动识别并使用原视频的音频参数,仅预览场景需要手动指定帧率。

内容的提问来源于stack exchange,提问作者Kian Farooghi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:09:53