2025-05-10-FFmepg库裁切有水印的视频

在这里插入图片描述
裁后
在这里插入图片描述

代码

import subprocess

# 文件路径
input_video_path = "bg_video.mp4"
output_video_path = "output_video_cropped.mp4"

# 裁剪视频下方的水印
def crop_video(input_video_path, output_video_path, crop_height):
    # 获取视频的分辨率
    def get_video_resolution(video_path):
        result = subprocess.run(
            ["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=width,height", "-of", "csv=p=0", video_path],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True
        )
        width, height = result.stdout.strip().split(",")
        return int(width), int(height)

    width, height = get_video_resolution(input_video_path)
    print(f"视频分辨率: {width}x{height}")

    # 计算裁剪后的高度
    new_height = height - crop_height
    print(f"裁剪后的高度: {new_height}")

    # 使用 ffmpeg 裁剪视频
    subprocess.run([
        "ffmpeg",
        "-i", input_video_path,              # 输入视频文件
        "-vf", f"crop={width}:{new_height}:0:0",  # 裁剪滤镜:宽度不变,高度减少 crop_height
        "-c:v", "libx264",                   # 视频编码器
        "-c:a", "copy",                      # 直接复制音频流
        "-y",                                # 覆盖输出文件
        output_video_path                    # 输出文件
    ])

    print(f"裁剪后的视频已保存到 {output_video_path}")

# 设置裁剪的高度(根据水印的高度调整)
crop_height = 50  # 例如,裁剪掉底部 100 像素
crop_video(input_video_path, output_video_path, crop_height)

代码二:保持原视频比例不变

import subprocess

# 文件路径
input_video_path = "bg_video.mp4"
output_video_path = "output_video_cropped——保持原比例.mp4"


# 裁剪视频下方的水印
def crop_video(input_video_path, output_video_path, crop_height):
    # 获取视频的分辨率
    def get_video_resolution(video_path):
        result = subprocess.run(
            ["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=width,height", "-of",
             "csv=p=0", video_path],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True
        )
        width, height = result.stdout.strip().split(",")
        return int(width), int(height)

    width, height = get_video_resolution(input_video_path)
    print(f"视频分辨率: {width}x{height}")

    # 计算原始宽高比
    original_aspect_ratio = width / height

    # 计算裁剪后的高度(确保能被2整除,因为H.264编码要求)
    new_height = height - crop_height
    new_height = new_height - (new_height % 2)  # 确保能被2整除

    # 根据原始宽高比计算新的宽度(确保能被2整除)
    new_width = int(new_height * original_aspect_ratio)
    new_width = new_width - (new_width % 2)  # 确保能被2整除

    print(f"裁剪后的分辨率: {new_width}x{new_height}")
    print(f"原始宽高比: {original_aspect_ratio:.2f}, 裁剪后宽高比: {(new_width / new_height):.2f}")

    # 使用 ffmpeg 裁剪视频
    subprocess.run([
        "ffmpeg",
        "-i", input_video_path,  # 输入视频文件
        "-vf", f"crop={new_width}:{new_height}:0:0",  # 裁剪滤镜:保持原始宽高比
        "-c:v", "libx264",  # 视频编码器
        "-preset", "fast",  # 编码预设
        "-crf", "18",  # 质量参数(18-28是常用范围,值越小质量越高)
        "-c:a", "copy",  # 直接复制音频流
        "-y",  # 覆盖输出文件
        output_video_path  # 输出文件
    ])

    print(f"裁剪后的视频已保存到 {output_video_path}")


# 设置裁剪的高度(根据水印的高度调整)
crop_height = 50  # 例如,裁剪掉底部 100 像素
crop_video(input_video_path, output_video_path, crop_height)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值