
裁后
代码
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)