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)
相关推荐
深圳市青牛科技实业有限公司1 小时前
GC1843|24bit 立体声差分输入 ADC,超小封装音频采集芯片
音视频
W_chuanqi1 小时前
使用EV录屏视频噪声很大
音视频·ev录屏
开开心心就好2 小时前
超市定时播音软件,免费版支持循环播放
智能手机·ffmpeg·ocr·word·vim·音视频·visual studio
linux_cfan5 小时前
videojs v10 源代码系列解读:35 · HLS 解析器:multivariant 与 media playlist
前端·javascript·音视频
硬件学长森哥15 小时前
成像技术实例-HDR视频技术基础
图像处理·音视频
美狐美颜SDK开放平台18 小时前
Android与iOS直播APP美颜有什么区别?视频美颜SDK开发详解
android·ios·音视频·视频美颜sdk
2601_9556624620 小时前
文本转语音(TTS)技术选型与工程实践
大数据·人工智能·音视频·语音识别·媒体
贾伟康21 小时前
【HarmonyOS 7新能力|066】弱网直播优化实战:从网络感知到码率、缓冲与恢复
音视频·harmonyos·arkts·网络优化·弱网直播
Android系统攻城狮21 小时前
Linux Gstreamer深度解析之gst_audio_decoder_get_parse_state调用流程与实战(四十九)
linux·音视频·gstreamer音视频·gstreamer音视频进阶
勤劳X码农1 天前
2026年TTS工具音频质量量化评测:MOS评分、延迟与格式兼容性实测
音视频