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

裁后

代码

bash 复制代码
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)

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

bash 复制代码
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)
相关推荐
hz567892 分钟前
内网视频会议系统建设方案:适合政企单位的安全会议选择
安全·云计算·音视频·实时音视频·信息与通信
2601_956865771 小时前
怎么用AI生成带货视频?电商内容创作工具推荐与选择思路
人工智能·aigc·音视频
冰可乐配1 小时前
fmpeg音频编码组件aac(Advanced Audio Coding (AAC) encoder)学习
学习·音视频·aac
气泡音人声分离3 小时前
音频技术解析|混音的底层逻辑:从采样点相加到艺术层次塑造
音视频·混音·音频剪辑
日光明媚4 小时前
LongLive-英伟达-数字人实时生成
人工智能·计算机视觉·aigc·音视频
AI服务老曹4 小时前
GB28181接入AI视频分析常见问题与排查清单:从国标平台注册、通道同步到心跳断线的工程实践
人工智能·音视频
ai产品老杨8 小时前
GB28181接入AI视频分析项目实战记录:从国标注册、通道同步到信令调优
人工智能·音视频
Niuguangshuo8 小时前
TTS 架构的六代演进(二):第 1-2 代 · 拼接合成与 HMM-TTS
音视频
最爱老式锅包肉9 小时前
《HarmonyOS技术精讲-蓝牙》传统蓝牙实战:音频播放与文件传输
华为·音视频·harmonyos
言乐610 小时前
Python视频相对亮度检测
数据库·python·计算机视觉·小程序·音视频