当前位置: 首页 > news >正文

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_heightprint(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_heightnew_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)
http://www.xdnf.cn/news/351955.html

相关文章:

  • docker 日志暴露方案 (带权限 还 免费 版本)
  • 企业如何将钉钉付款单高效集成到金蝶云星空?
  • 高频微服务面试题总结
  • 【MySQL】联合查询
  • 自适应混合索引创建与管理:一种智能数据库优化机制的研究
  • 高并发内存池(二):项目的整体框架以及Thread_Cache的结构设计
  • 怎么用idea打jar包
  • 从“山谷论坛”看AI七剑下天山
  • 集成管理工具Gitlab
  • 高清屏幕录像工具 Mirillis Action v4.45.0
  • kitty 终端ssh 命令远程无法正常输入命令
  • 第J7周:ResNeXt解析
  • 【Linux】环境变量(图文)
  • Servlet、HttpServlet 和 DispatcherServlet 区别与关系
  • SPN技术介绍
  • Redis 常见数据类型
  • 新闻发稿筛选媒体核心标准:影响力、适配性与合规性
  • 【LUT技术专题】ECLUT代码解读
  • 如何从极狐GitLab 容器镜像库中删除容器镜像?
  • 解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
  • android-ndk开发(11): 安装 repo 命令
  • MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解
  • NAT穿越
  • 力扣-24.两两交换链表中的结点
  • SpringBoot默认并发处理(Tomcat)、项目限流详解
  • 【列表类型】
  • Spring Boot + MyBatis-Plus 高并发读写分离实战
  • 人工智能 机器学习期末考试题
  • Android RxJava框架分析:它的执行流程是如何的?它的线程是如何切换的?如何自定义RxJava操作符?
  • 内存安全革命:工具、AI 与政策驱动的 C 语言转型之路