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)