一刀流:一个简单的脚本,瞬间去除视频片头广告,享受纯净的观影体验。


1. 前言

作为一个热爱生活、热爱学习、热爱收集高质量资源的程序员,在码字间隙看看电影剧集,那是相当正常的。

电影需要沉浸感、需要专注、需要氛围感。但有些无良发布商非要在前面加几十秒甚至几分钟的广告片头:“XXX高清独家发布!"、“关注我们不迷路!"、”…全国通用”,还配音乐、配logo、配10秒钟的静默背景图。

这谁能忍?大叔不能忍。—— 程序员拔刀。


2. 刀

核心理念:FFmpeg + Shell脚本,无损切割,一刀毙命。

设计哲学

  • 刀身:FFmpeg(专业视频处理工具包)
  • 刀柄:Shell脚本自动化控制
  • 刀法:指定时间提取,无损复制
  • 刀效:覆盖原文件,保持文件名

简单说,就是告诉FFmpeg:“从第X秒开始,我要后面的全部,前面的垃圾统统扔掉。”


3. 铸刀

神器出世:mvcut脚本,简单粗暴,一击制胜。

#!/bin/bash

if [ $# -lt 2 ]; then
  echo "用法: $0 <视频文件> <切割时间点(秒数或00:02:00)>"
  exit 1
fi

INPUT_PATH="$1"
CUT_TIME="$2"

INPUT_FILE="$(cd "$(dirname "$INPUT_PATH")"; pwd)/$(basename "$INPUT_PATH")"
DIRNAME=$(dirname "$INPUT_FILE")
BASENAME=$(basename "$INPUT_FILE")
EXT="${BASENAME##*.}"
FILENAME="${BASENAME%.*}"
TEMP_FILE="${DIRNAME}/${FILENAME}_cut.${EXT}"

ffmpeg -hide_banner -loglevel error -ss "$CUT_TIME" -i "$INPUT_FILE" -c copy "$TEMP_FILE"

if [ $? -ne 0 ]; then
  echo "切割失败: $INPUT_FILE"
  exit 1
fi

rm -f "$INPUT_FILE"
mv "$TEMP_FILE" "$INPUT_FILE"
echo "搞定: ${INPUT_FILE}"

铸刀原理

  • -ss参数是刀刃,告诉FFmpeg从哪里开始切
  • -c copy是刀魂,无损复制,不重新编码,快如闪电
  • 先切到临时文件,成功后再替换原文件,避免数据丢失

4. 试刀

实战演示:假设有个movie.mp4,前面2分钟都是垃圾广告。

出刀!砍掉前120秒

mvcut movie.mp4 120

再来一刀!砍掉前2分钟

mvcut movie.mp4 00:02:00

装备刀具

# 安装到home目录
mkdir -p ~/.local/bin
# 将上面的代码保存为 ~/.local/bin/mvcut

# 给执行权限
chmod +x ~/.local/bin/mvcut

# 加入PATH
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

刀效:一刀下去垃圾没了,文件名还是原来的,干净利落。想砍几秒砍几秒,支持时间格式,想怎么砍怎么砍。


5. 后记

这把小刀虽短,但够用。我不搞花里胡哨的GUI,不搞视频特效,就是一把命令行刀,够锋利够狠就行。

下次写《批量砍头术》或者《片尾去除大法》,继续为电影"正义"而战。

老程序员守则:人生苦短,片头别长。


Alex Hu:代码堆里摸爬滚打的老兵 | 2025-06-07 | 快刀系列