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)
相关推荐
REDcker5 天前
WebCodecs VideoDecoder 的 hardwareAcceleration 使用
前端·音视频·实时音视频·直播·webcodecs·videodecoder
gihigo19985 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
山河君5 天前
四麦克风声源定位实战:基于 GCC-PHAT + 最小二乘法实现 DOA
算法·音视频·语音识别·信号处理·最小二乘法·tdoa
音视频牛哥5 天前
Android平台RTMP/RTSP超低延迟直播播放器开发详解——基于SmartMediaKit深度实践
android·人工智能·计算机视觉·音视频·rtmp播放器·安卓rtmp播放器·rtmp直播播放器
qq_416276425 天前
通用音频表征的对比学习
学习·音视频
美狐美颜sdk5 天前
Android全局美颜sdk实现方案详解
人工智能·音视频·美颜sdk·视频美颜sdk·美狐美颜sdk
EasyDSS5 天前
私有化部署EasyDSS视频点播能力:全链路视频技术赋能,打造企业级视听新体验
音视频·hls·m3u8·点播技术·智能转码
qq_416276425 天前
DeLoRes——一种通用的音频表征学习新方法(DeLoRes(基于 Barlow Twins 的冗余最小化方法)
学习·音视频
Q_4582838685 天前
从定位到视频:808 + 1078 在各行业的落地实践
音视频
山顶望月川5 天前
实测MiniMax-Hailuo-02:当“开工大吉“变成“无字天书“,国产AI视频模型的能与之不能
人工智能·音视频