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

MoviePy中CompositeVideoClip生成空白不可播放视频问题排查

问题排查与解决方案

问题原因分析

  • 分辨率异常:生成2570×960的视频,说明代码大概率误将素材做了横向拼接(hstack),而非目标的纵向拼接(vstack)。目标竖屏为1080宽、1920高,图片和视频需统一宽度为1080,高度各960,纵向堆叠后总高度才会是1920。
  • 空白不可播放:
    • 未设置总剪辑的时长(比如图片剪辑未指定时长,默认对齐视频时长但逻辑出错);
    • 输出时未指定合适编码格式,比如缺少codec='libx264'参数;
    • 素材加载逻辑存在隐性问题(虽路径有效,但需确认图片/视频能被MoviePy正常读取)。
  • 文字层级失效:未通过CompositeVideoClip将文字剪辑叠加到拼接后的素材上层,导致文字未显示。

实现方案代码

方式1:使用clips_array实现纵向堆叠+文字叠加

from moviepy.editor import *

# 1. 加载并处理素材
# 图片:调整为1080宽、960高,时长同步视频
img_clip = ImageClip("你的图片路径.jpg").resize(width=1080).crop(height=960)
# 视频:缩放裁剪到1080宽、960高
video_clip = VideoFileClip("你的视频路径.mp4").resize(width=1080).crop(height=960)
# 同步图片时长与视频一致
img_clip = img_clip.set_duration(video_clip.duration)

# 2. 纵向堆叠图片和视频
stacked_clip = clips_array([[img_clip], [video_clip]])

# 3. 创建文字剪辑(叠加在最上层)
text_clip = TextClip(
    "你的文字内容",
    fontsize=50,
    color="white",
    font="SimHei"  # 中文需指定支持的字体
).set_position("center").set_duration(video_clip.duration)

# 4. 合成最终剪辑
final_clip = CompositeVideoClip([stacked_clip, text_clip])

# 5. 输出竖屏视频(指定编码保证兼容性)
final_clip.write_videofile(
    "输出视频.mp4",
    fps=25,
    codec="libx264",
    audio_codec="aac",
    preset="medium"
)

方式2:使用vstack配合合成逻辑(替代concatenate_videoclips时间轴拼接)

concatenate_videoclips默认是时间轴拼接,要实现空间纵向堆叠需用vstack,再叠加文字:

from moviepy.editor import *

# 1. 处理素材(同方式1)
img_clip = ImageClip("你的图片路径.jpg").resize(width=1080).crop(height=960)
video_clip = VideoFileClip("你的视频路径.mp4").resize(width=1080).crop(height=960)
img_clip = img_clip.set_duration(video_clip.duration)

# 2. 纵向堆叠素材
stacked_clip = vstack([img_clip, video_clip])

# 3. 添加文字剪辑
text_clip = TextClip(
    "你的文字内容",
    fontsize=50,
    color="white",
    font="SimHei"
).set_position("center").set_duration(video_clip.duration)

# 4. 合成并输出
final_clip = CompositeVideoClip([stacked_clip, text_clip])
final_clip.write_videofile(
    "输出视频.mp4",
    fps=25,
    codec="libx264",
    audio_codec="aac"
)

额外注意事项

  • 中文文字需确保系统有对应字体,否则会出现乱码;
  • 裁剪素材时优先用resize(width=1080)保证宽度正确,再用crop调整高度,避免画面变形;
  • 输出时指定codec='libx264'和audio_codec='aac',确保视频在多数播放器中正常播放。

内容的提问来源于stack exchange,提问作者The Amateur Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:15:15