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

如何用Python将16:9视频裁剪为9:16?求高效解决方案

高效Python实现16:9视频转9:16裁剪方案

一、原MoviePy代码问题分析

原代码仅加载了视频但未执行裁剪操作,且write_videofile未配置正确参数,导致导出黑屏无音频、耗时过长。

二、修正后的MoviePy方案

若仍偏好使用MoviePy,需添加裁剪逻辑并优化导出参数:

import moviepy.editor as mpy

orig_video = "video.mp4"
output_video = "cropped-video.mp4"

# 加载视频并保留音频
video = mpy.VideoFileClip(orig_video, audio=True)
original_width, original_height = video.size

# 计算中心裁剪参数:目标宽度607px
target_width = 607
x_start = (original_width - target_width) / 2
# 保留原视频高度(607/原高度≈9/16,匹配目标比例)
y_start = 0
target_height = original_height

# 执行裁剪
cropped_video = video.crop(x1=x_start, y1=y_start, x2=x_start + target_width, y2=y_start + target_height)

# 高效导出:指定编码、多线程、硬件加速
cropped_video.write_videofile(
    output_video,
    codec="libx264",
    audio_codec="aac",
    preset="fast",
    threads=4,
    ffmpeg_params=["-hwaccel", "auto"]
)

# 释放资源
video.close()
cropped_video.close()

三、更高效的ffmpeg-python方案(推荐)

直接调用FFmpeg底层命令,比MoviePy封装效率高数倍,适合大体积视频处理:

1. 安装依赖

pip install ffmpeg-python

2. 自动探测原视频尺寸的实现代码

import ffmpeg

orig_video = "video.mp4"
output_video = "cropped-video.mp4"

# 探测原视频分辨率
probe = ffmpeg.probe(orig_video)
video_stream = next((s for s in probe['streams'] if s['codec_type'] == 'video'), None)
original_width = int(video_stream['width'])
original_height = int(video_stream['height'])

# 计算中心裁剪参数
target_width = 607
x_start = (original_width - target_width) // 2

# 构建FFmpeg裁剪命令
(
    ffmpeg
    .input(orig_video)
    .filter("crop", target_width, original_height, x_start, 0)
    .output(
        output_video,
        vcodec="libx264",
        acodec="aac",
        preset="fast",
        hwaccel="auto"
    )
    .overwrite_output()
    .run(capture_stdout=True, capture_stderr=True)
)

3. 手动指定参数(已知原视频为1920x1080时)

如果确认原视频是1920x1080的16:9规格,可省略探测步骤直接写死参数:

import ffmpeg

orig_video = "video.mp4"
output_video = "cropped-video.mp4"

# 1920x1080视频中心裁剪607px宽度,起始x坐标为(1920-607)//2=656
(
    ffmpeg
    .input(orig_video)
    .filter("crop", 607, 1080, 656, 0)
    .output(output_video, vcodec="libx264", acodec="aac", preset="fast", hwaccel="auto")
    .overwrite_output()
    .run()
)

四、核心优化要点

  • 硬件加速:通过-hwaccel auto启用GPU加速,大幅缩短处理时间
  • 编码预设:preset=fast在画质损失极小的前提下提升编码速度
  • 多线程利用:MoviePy的threads参数和FFmpeg默认多线程配置可充分利用多核CPU

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:45:54