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

使用MoviePy剪辑拼接视频后输出画面被拉伸的原因排查

问题:MoviePy剪辑导出后画面垂直拉伸,宽高比异常

问题原因

你的输入视频采用了非方形像素(PAR,Pixel Aspect Ratio)——比如常见的720x480标清视频,存储的像素不是正方形,播放时需要通过像素宽高比转换为正确的显示宽高比(DAR,Display Aspect Ratio)。但MoviePy的VideoFileClip默认会忽略原视频的像素宽高比元数据,直接按原始像素尺寸导出,播放器按方形像素渲染时就会导致画面垂直拉伸。

解决方案

以下两种方案均可解决问题,根据需求选择:

方案1:导出时传递FFmpeg参数指定显示宽高比

直接在导出环节告诉FFmpeg使用原视频的显示宽高比,无需修改视频像素尺寸:

from moviepy.editor import *

input_file = "input.mp4"
timestamps = [[60,70],[80,100]]
output_destination = "test-output"
video_end = 120

video = VideoFileClip(input_file)

# 剪辑逻辑保持不变
initial_time = 0
clips = []
for a in timestamps:
    temp = video.subclip(initial_time, a[0])
    initial_time = a[1]
    clips.append(temp)
clips.append(video.subclip(initial_time, video_end))

result = concatenate_videoclips(clips)

# 导出时添加-aspect参数,传入原视频的显示宽高比
result.write_videofile(
    f"{output_destination}.mp4",
    fps=29.97,
    codec='libx264',
    audio_bitrate='448k',
    preset='superfast',
    ffmpeg_params=['-crf','18', '-aspect', f"{video.aspect_ratio}"],
    write_logfile=True
)

方案2:转换为方形像素尺寸

如果希望直接修改视频的像素尺寸以匹配显示宽高比(避免依赖元数据),可以用resize方法计算并转换:

from moviepy.editor import *

input_file = "input.mp4"
timestamps = [[60,70],[80,100]]
output_destination = "test-output"
video_end = 120

video = VideoFileClip(input_file)

# 根据原视频的显示宽高比,计算方形像素的目标分辨率
# 示例:原720x480、4:3宽高比的视频,转换为640x480(方形像素的4:3)
target_width = int(video.h * video.aspect_ratio)
video = video.resize((target_width, video.h))

# 剪辑逻辑保持不变
initial_time = 0
clips = []
for a in timestamps:
    temp = video.subclip(initial_time, a[0])
    initial_time = a[1]
    clips.append(temp)
clips.append(video.subclip(initial_time, video_end))

result = concatenate_videoclips(clips)

result.write_videofile(
    f"{output_destination}.mp4",
    fps=29.97,
    codec='libx264',
    audio_bitrate='448k',
    preset='superfast',
    ffmpeg_params=['-crf','18'],
    write_logfile=True
)

额外说明

  • 你之前直接设置720x480分辨率无效,是因为问题根源不是尺寸本身,而是缺少像素宽高比的元数据;
  • 直接重新编码仍出问题,也是因为MoviePy默认没有将原视频的宽高比参数传递给FFmpeg。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:40:27