当前位置: 首页 > 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)

相关文章:

  • 系统思考:短期困境与长期收益
  • 嵌入式开发学习日志Day17
  • 设计模式-策略模式(Strategy Pattern)
  • VBA -- 学习Day4
  • 华为银河麒麟 V10(ARM)系统软件部署全攻略:Redis、RabbitMQ、MySQL 等集群搭建指南
  • Elasticsearch太重?它的超轻量的替代品找到了!
  • 华为OceanStor 5500 V3存储证书过期问题处理
  • lambda 表达式
  • 在一台CentOS服务器上开启多个MySQL服务
  • 【高并发】Celery + Redis异步任务队列方案提高OCR任务时的并发
  • 代码随想录第40天:图论1
  • 1、mongodb-- BSON 学习和JSON性能对比
  • qml用PathView实现Cover Flow效果
  • Lightweight App Alternatives
  • 耀圣-气动带刮刀硬密封法兰球阀:攻克颗粒高粘度介质的自清洁 “利器”
  • c++中构造对象实例的两种方式及其返回值
  • 牛客练习赛138-题解
  • 机器人手臂的坐标变换:一步步计算齐次矩阵过程 [特殊字符]
  • 基于大模型预测的足月胎膜早破行阴道分娩全流程研究报告
  • 2025数维杯数学建模A题完整限量论文:空中芭蕾——蹦床运动的力学行为分析
  • 新城市志|上海再攻坚,营商环境没有最好只有更好
  • 明明睡够了,怎么还有黑眼圈?可能是身体在求救
  • 趣看 | 五一黄金周:你拍风景,拍风景的人在拍你
  • 对话|蓬皮杜策展人布莱昂:抽象风景中的中国审美
  • 4月深圳新房、二手房成交同比均上涨,“5月有望延续积极向好的发展态势”
  • 无人机穿越大理崇圣寺千年古塔时“炸机”,当地:肇事者已找到,将被追责