小米触屏闹钟视频制作
v1.1.0B站视频下载裁剪压缩工具。下载bilibili视频、裁剪去除边框、压缩到指定大小时使用。支持b23.tv短链和BV号。别名:闹钟视频下载。
运行时依赖
安装命令
点击复制技能文档
闹钟视频下载 依赖 yt-dlp: py -m pip 安装 yt-dlp ffmpeg/ffprobe: 需在PATH中 工作流
- 下载720P视频
固定下载720P分辨率视频(格式ID: 30064+30280),文件名使用BV号:
py -m yt_dlp -f "30064+30280" -o "PATH/%(id)s.%(ext)s" --merge-输出-格式化 mp4 URL
说明: 30064为720P视频流,30280为音频流。使用 %(id)s 自动提取BV号作为文件名,避免多个视频下载时文件名冲突。
- 裁剪边框(可选)
使用 --crop 参数指定裁剪区域,默认裁剪参数 792:600:432:56(去除B站边框):
ffmpeg -y -i IN -vf "crop=792:600:432:56" -c:v libx264 -crf 18 -c:a copy OUT
720P固定裁剪参数: crop=792:600:432:56 如无需裁剪,传入 --no-crop。
- 剪切视频(可选,默认去除前后各10秒)
步骤1: 去除前10秒
ffmpeg -y -i IN -ss 00:00:10 -c:v libx264 -crf 18 -c:a copy TEMP
步骤2: 获取剩余视频时长
ffprobe -v error -show_entries 格式化=duration -of default=noprint_wr应用ers=1:nokey=1 TEMP
步骤3: 去除后10秒(总时长-10)
ffmpeg -y -i TEMP -t (duration-10) -c:v libx264 -crf 18 -c:a copy OUT
说明: 固定去除片头10秒和片尾10秒,总时长减少20秒。如无需剪切,传入 --no-trim。
- 压缩到目标大小
目标:压缩到10MB以内
步骤1: 获取视频时长
ffprobe -v error -show_entries 格式化=duration -of default=noprint_wr应用ers=1:nokey=1 输入_VIDEO
步骤2: 计算动态码率 使用Python计算码率参数(以目标10MB为例):
tar获取_MB = 10 duration = 217.345783 # 从步骤1获取的实际时长 vbr = max(int((tar获取_MB 0.9 8 1024) / duration - 64), 100) # 视频码率 maxrate = int(vbr 1.25) # 最大码率 bufsize = int(vbr 2.5) # 缓冲大小 # 示例输出: vbr=275k, maxrate=344k, bufsize=688k
计算公式:
视频码率: vbr = max(int((tar获取_MB 0.9 8 1024) / duration - 64), 100) 最大码率: maxrate = int(vbr 1.25) 缓冲大小: bufsize = int(vbr 2.5)
步骤3: 执行压缩
ffmpeg -y -i 输入_VIDEO -c:v libx264 -b:v 275k -maxrate 344k -bufsize 688k -c:a aac -b:a 64k -ar 44100 输出_VIDEO
验证压缩结果:
ffprobe -v error -show_entries 格式化=size -of default=noprint_wr应用ers=1:nokey=1 输出_VIDEO
实际案例参考:
输入视频: 792x600, 时长217秒, 约22.4MB 压缩参数: vbr=275k, maxrate=344k, bufsize=688k 输出结果: 约9.0MB, 成功压缩到10MB以内
- 一键脚本
必选参数:
url — B站视频URL(支持BV号、b23.tv短链)
可选参数:
参数 默认值 说明 --格式化_id 30064+30280 下载格式ID --crop 792:600:432:56 裁剪参数(宽:高:左:上) --no-crop — 跳过裁剪步骤 --no-trim — 跳过去头尾步骤(默认去除前后各10秒) --max_size_mb 10 目标文件大小(MB) --filename 自动从URL提取 输出文件名(不含扩展名) --输出_dir Documents 输出目录
使用示例:
# 默认处理(下载→裁剪→去头尾→压缩) py scripts/下载_and_process.py "https://www.bilibili.com/video/BV1m24y1d7xw"
# 不裁剪,直接去头尾并压缩 py scripts/下载_and_process.py "https://www.bilibili.com/video/BV1m24y1d7xw" --no-crop
# 不去头尾,只裁剪并压缩 py scripts/下载_and_process.py "https://www.bilibili.com/video/BV1m24y1d7xw" --no-trim
# 完全不裁剪也不去头尾 py scripts/下载_and_process.py "https://www.bilibili.com/video/BV1m24y1d7xw" --no-crop --no-trim
# 自定义裁剪区域 py scripts/下载_and_process.py "https://www.bilibili.com/video/BV1m24y1d7xw" --crop "800:600:240:60"
# 压缩到20MB以内 py scripts/下载_and_process.py "https://www.bilibili.com/video/BV1m24y1d7xw" --max_size_mb 20
脚本自动依次执行:下载 → [裁剪] → [去头去尾] → 压缩到目标大小(中括号为可选步骤)
文件名约定
所有视频文件必须以BV号命名,禁止使用固定文件名如 bilibili_video.mp4。
下载时: -o "PATH/%(id)s.%(ext)s" → 生成 BV1N14y1Y7uN.mp4 中间文件: {bvid}_raw.mp4, {bvid}_cropped.mp4, {bvid}_trimmed.mp4, {bvid}_trim_启动.mp4 最终输出: {bvid}.mp4
这样每个视频都有独立文件名,不会相互覆盖。