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)
相关推荐
EasyDSS1 小时前
EasyRTC嵌入式音视频通信SDK助力物联网/视频物联网音视频打造全场景应用
人工智能·音视频
aqi002 小时前
FFmpeg开发笔记(六十三)FFmpeg使用vvenc把视频转为H.266编码
ffmpeg·音视频·直播·流媒体
babytiger4 小时前
rk3588 上运行smolvlm-realtime-webcam,将视频转为文字描述
音视频
Icoolkj4 小时前
Komiko 视频到视频功能炸裂上线!
人工智能·音视频
sukalot4 小时前
window 显示驱动开发-DirectX 视频加速 2.0
音视频
冷凌爱4 小时前
每天总结一个html标签——Audio音频标签
前端·html·音视频
思通数科多模态大模型7 小时前
重构城市应急指挥布控策略 ——无人机智能视频监控的破局之道
人工智能·深度学习·安全·重构·数据挖掘·音视频·无人机
武子康17 小时前
AI炼丹日志-28 - Audiblez 将你的电子书epub转换为音频mp3 做有声书
人工智能·爬虫·gpt·算法·机器学习·ai·音视频
gomogomono1 天前
【面试】音视频面试
音视频
Likeadust1 天前
视频汇聚平台EasyCVR“明厨亮灶”方案筑牢旅游景区餐饮安全品质防线
网络·人工智能·音视频