起因是这样的,前几天到一个病人家看看,结果他家在给小朋友放儿歌视频,但是每个视频的开头和结尾都有广告(视频内的广告),听着不胜其烦。于是昨天在 bilibili 整个儿歌专辑下载过来,一共172个儿歌MV视频,利用 FFmpeg 批处理把开头和结尾的广告去除,上传到云盘,有时候遇到患病的小朋友也可以随时投屏播放。

儿歌MV视频分享
去广告思路
视频开头有7秒钟广告,结尾也有4秒钟广告,用视频编辑软件裁剪再保存这一百多个视频着实太麻烦。刚好去年有用 FFmpeg 视频切片(参见《Windows 操作系统下安装 FFmpeg 环境教程》),于是乎就想着用它来批处理视频。
为了减少出错的概率,我先删前7秒,再删后4秒,运行了两次批处理,这里就分享后4秒的 bat 批处理代码供参考。
@echo off
setlocal enabledelayedexpansion
:: 设置输入目录和输出目录
set "INPUT_DIR=c:\erge"
set "OUTPUT_DIR=c:\erges"
:: 创建输出目录(如果不存在则创建)
md "%OUTPUT_DIR%" 2>nul
:: 遍历输入目录中的所有常见视频文件类型
for %%F in ("%INPUT_DIR%\*.mp4" "%INPUT_DIR%\*.avi" "%INPUT_DIR%\*.mov" "%INPUT_DIR%\*.flv" "%INPUT_DIR%\*.mkv") do (
echo 正在处理: %%F
:: 使用 ffprobe 获取视频文件的时长,并将其存储在变量 duration 中
for /f "tokens=*" %%D in ('ffprobe -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 "%%F" 2^>^&1') do (
set "duration=%%D"
:: 计算新的时长,即原时长减去4秒,如果结果小于0则设为0
for /f %%T in ('powershell -Command "[math]::Max(0, !duration! -4)"') do set "new_duration=%%T"
if "!new_duration!"=="0" (
echo 跳过处理: %%F(总时长不足4秒)
) else (
:: 使用 ffmpeg 截取视频文件,除去最后4秒,并保存到输出目录
ffmpeg -y -i "%%F" -t !new_duration! -c:v copy -c:a copy "%OUTPUT_DIR%\%%~nF_trimmed%%~xF" 2>nul
:: 检查 ffmpeg 是否成功执行,如果失败则记录错误日志
if errorlevel 1 (
echo 处理失败: %%F >> error.log
) else (
echo 成功处理: %%F
)
)
)
)
echo 全部处理完成!输出目录:%OUTPUT_DIR%
pause
其中开头的"INPUT_DIR=c:\erge"源视频所在目录,"OUTPUT_DIR=c:\erges"是处理后输出的视频存放目录,小伙伴们看着修改。
使用 ffprobe 获取视频总时长,通过PowerShell进行浮点数计算(总时长-4秒),支持精确到毫秒级的截断操作。通过-c:v copy -c:a copy
参数直接复制原始音视频流,处理速度极快且不会降低画质。自动跳过时长不足4秒的视频文件,错误日志记录到 error.log (处理失败的文件路径),支持常见视频格式:MP4/AVI/MOV/FLV/MKV
将上方代码复制到txt文件,改好自己的东西后,修改txt后缀为bat,以管理员权限运行即可。
现在看的视频广告更鸡贼了,放在中间,防不胜防,下载回来的电影,剧情刚开始突然来一段新澳门葡京娱乐……
好看的同样可以用这个方法剪掉,不好看的大不了不看了。
挺好,大佬辛苦了
缙哥哥,有的视频上面会带一些额外的图标,那种东西能去除吗?不需要批量化,有的话麻烦您给指个路
你是想去掉版权水印嘛?
em,我下的一些电影上面会被植入一些多余的广告,我感觉和版权水印应该算是一类的东西吧?不知道你看见过没,就是xx娱乐城的logo啊啥的
换个渠道找资源,他们的那种都是会移动的,有点麻烦。
ts格式文件如何批量转mp4格式及合并
你要看哪里的下载的ts格式,一半都有相对应的合成工具。
我是用的医考帮为了规培毕业考试,缓存了里面的视频课程,后期课程时间截止看不了了;视频课程都是几百kb的.ts文件;所以缙哥哥有没有什么好的方法?
ts是视频切片,找到文件列表就可以合并。但是你这已经过期了怕是不好搞了。