有什么软件可以批量给视频文件去片头广告

凤凰天使翻译的电视剧,都有片头广告,我下的这套有100集的电视剧,手动太累了

无脑推荐ffmpeg
顺带,请给人家一条活路,弄完之后不要分享!

3 个赞

ffmpeg +1

2 个赞

我记得有的播放器可以设置跳过片头片尾呀,就是直接播放一个指定的时间点。

可以试试 Handbrake,是图形化界面,Windows 和 Linux 上都有客户端。

或者用脚本,批量处理同一文件夹下的所有视频,方便又快捷。

请注意:下列脚本会将去除片头广告的视频保存为一个新的视频文件,因此请确保您有足够的磁盘空间。

WIndows:

@echo off

for %%i in (*.mp4) do ffmpeg -loglevel quiet -ss 片头广告结束时间 -i "%%i" -to 最长视频结束时间 -avoid_negative_ts 1 -c copy 去广告-%%i
echo 操作结束
pause

先将 ffmpeg 程序的目录添加到系统环境变量的 “Path” 项目中,再将上述内容保存为 去广告.cmd,放到存放视频的文件夹下,双击运行即可。

UNIX,Linux:

#!/bin/sh

for FILE in *.mp4
do
    ffmpeg -loglevel quiet -ss 片头广告结束时间 -i "$FILE" -to 最长视频结束时间 -avoid_negative_ts 1 -c copy 去广告-"$FILE"
done

在存放视频的文件夹下执行上述脚本即可。

补充说明:

  1. 上述命令涉及的时间格式均是 hh:MM:ss,如20分30秒可写为 00:20:30。
  2. 上述 *.mp4 可根据视频的实际格式进行改写。如视频都是 flv 格式的,可写为 *.flv
  3. 上述脚本中使用了 -loglevel quiet 参数,这样运行 FFmpeg 时不会显示运行日志。如果处理过程中发生问题,可去掉这个参数,再重新运行脚本,查看日志内容。

参考资料:

  1. https://ruanyifeng.com/blog/2020/01/ffmpeg.html
  2. https://zhuanlan.zhihu.com/p/27366331
4 个赞

无脑ffmpeg其实是有问题的。

  1. 如果使用codec copy参数,处理速度大大加快,但是由于关键帧的问题,可能导致起止位置的问题: 时间不准确,音画不同步,画面冻结
  2. 如果不使用,重新编码速度慢,二次压缩画质有损耗

按网上的说法,如果对视频剪辑的起止时间不作十分精确的要求,可以加个 -avoid_negative_ts 1 参数,配合 -c copy 一起使用,让软件自动寻找关键帧,补全视频,这样就可以避免您提到的问题了。

刚刚我亲自测试了一下,不加 -avoid_negative_ts 1 得到的视频的确会音画不同步,加了这个参数就没问题了。

加 -avoid_negative_ts 1 得到的视频也会有音画不同步的,只能多试几次选个不冻结的时间。
这个小广告还有 1s 的声音附加在后面的画面上,现在我改成这样,给前1s静音了,但是编码 aac 的速度有点慢,这个命令可以优化吗?

for %%i in (*.mkv) do (
	ffmpeg -i "%%i" -ss 00:00:43.800 -vcodec copy -acodec copy "LS-%%i"
	ffmpeg -i "LS-%%i" -codec:a aac "%%i.aac"
	ffmpeg -i "%%i.aac" -af "volume=enable='between(t,0,1)':volume=0" "muted-%%i.aac"
	ffmpeg -i "LS-%%i" -i "muted-%%i.aac" -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 "去广告-%%i"
	DEL /S /F /Q "LS-%%i"
	DEL /S /F /Q "%%i.aac"
	DEL /S /F /Q "muted-%%i.aac"
)

说来也怪,之前剪视频,用 -c copy 不加 -avoid_negative_ts 1 就会出现音画不同步的问题;昨天系统升级后,剪的是同一个视频,不加 -avoid_negative_ts 1 却没有出现音画不同步的问题。要不您试试更新一下 ffmpeg 的版本吧。

我之前用的是 LinuxMint 21,现在用的是 LinuxMint 21.1。

哦还有,把 -i input.mp4 放在 -ss 开始时间 之后,就容易出现音画不同步的问题。


如果要求精确剪切视频,网上有好几种说法:

  1. -g 1 -keyint_min 2 参数,在剪切前调整视频关键帧的位置,再去剪切。
    参考资料:https://blog.csdn.net/yunxiaobaobei/article/details/106529585
  2. -avoid_negative_ts make_zero 参数。据称可 “精确到30fps剪辑的20分之一毫秒,但这将完全取决于您的视频的帧率”。
    参考资料:https://cloud.tencent.com/developer/ask/sof/1112587

上述方法我都作了尝试,没有出现音画不同步的现象。但我对视频处理方面的知识不甚了解,这些方法剪辑视频的精确度如何我不能判断。希望上述方法能给您带来帮助。

2 个赞

今天刚好要切视频,发现音画不同步的问题确实是 -ss 开始时间的问题。
最近在给视频截图时,也发现 -ss 开始时间的参数放在最前边,可以降低数十倍的耗时。

更新一下关于ffmpeg的切割视频的信息。
使用同文件运行如下命令,Windows 10+ ffmpeg-2023-02-16-git-aeceefa622-full_build-www.gyan.dev,得到了3个结果。

ffmpeg -ss 1:26:54.02 -to 1:27:5.6400000000003 -i "C:\prg\recorder\Record\【胡桃USA】玩点花的 2023年2月13日20点场.flv.mp4"  -acodec copy -vcodec copy  -g 1 -keyint_min 2  -y "C:\prg\recorder\Record\# 送龟霸吗-keyint_min.mp4"

ffmpeg -ss 1:26:54.02 -to 1:27:5.6400000000003 -i "C:\prg\recorder\Record\【胡桃USA】玩点花的 2023年2月13日20点场.flv.mp4"  -acodec copy -vcodec copy   -avoid_negative_ts make_zero   -y "C:\prg\recorder\Record\# 送龟霸吗-avoid_negative_ts.mp4"

ffmpeg -ss 1:26:54.02 -to 1:27:5.6400000000003 -i "C:\prg\recorder\Record\【胡桃USA】玩点花的 2023年2月13日20点场.flv.mp4"  -y "C:\prg\recorder\Record\# 送龟霸吗.mp4"

输入文件过大,就不上传了,提供输入文件的编码信息:

概览
完整名称                           : C:\prg\recorder\Record\【胡桃USA】玩点花的 2023年2月13日20点场.flv.mp4
格式                             : MPEG-4
格式配置 (Profile)                 : Base Media
编解码器 ID                        : isom (isom/iso2/avc1/mp41)
文件大小                           : 2.29 GiB
时长                             : 2 时 8 分
总体码率模式                         : 动态码率 (VBR)
总体码率                           : 2 542 kb/s
说明                             : Packed by Bilibili XCoder v2.0.2
编码程序                           : Lavf58.29.100

视频
ID                             : 1
格式                             : AVC
格式/信息                          : Advanced Video Codec
格式配置 (Profile)                 : High@L5
格式设置                           : CABAC / 6 Ref Frames
格式设置, CABAC                    : 是
格式设置, 参考帧                      : 6 帧
编解码器 ID                        : avc1
编解码器 ID/信息                     : Advanced Video Coding
时长                             : 2 时 8 分
码率                             : 2 426 kb/s
宽度                             : 1 920 像素
高度                             : 1 080 像素
画面比例                           : 16:9
帧率模式                           : 动态帧率 (VFR)
帧率                             : 30.000 FPS
最低帧率                           : 29.412 FPS
最高帧率                           : 30.303 FPS
色彩空间                           : YUV
色度抽样                           : 4:2:0
位深                             : 8 位
扫描类型                           : 逐行扫描 (连续)
数据密度 [码率/(像素*帧率)]              : 0.039
流大小                            : 2.18 GiB (95%)
色彩范围                           : Limited
色彩原色                           : BT.709
传输特性                           : BT.709
矩阵系数                           : BT.709
编码配置区块 (box)                   : avcC

音频
ID                             : 2
格式                             : AAC LC
格式/信息                          : Advanced Audio Codec Low Complexity
编解码器 ID                        : mp4a-40-2
时长                             : 2 时 8 分
码率模式                           : 动态码率 (VBR)
码率                             : 107 kb/s
声道数                            : 2 声道
声道布局                           : L R
采样率                            : 48.0 kHz
帧率                             : 46.875 FPS (1024 SPF)
压缩模式                           : 有损
流大小                            : 98.2 MiB (4%)
Default                        : 是
组别                             : 1


处理结果可以在这里找到:
https://cowtransfer.com/s/15c143a7d4ab44 点击链接查看 [ # 送龟霸吗-keyint_min.mp4 ] ,或访问奶牛快传 cowtransfer.com 输入传输口令 9q00nn 查看;

输出结果的部分编码对比:

概览 重编码 keyint_min avoid_negative_ts
格式 MPEG-4 MPEG-4 MPEG-4
格式配置 (Profile) Base Media Base Media Base Media
编解码器 ID isom (isom/iso2/avc1/mp41) isom (isom/iso2/avc1/mp41) isom (isom/iso2/avc1/mp41)
文件大小 4.47 MiB 4.32 MiB 4.32 MiB
时长 11 秒 634 毫秒 11 秒 814 毫秒 14 秒 175 毫秒
总体码率 3 222 kb/s 3 069 kb/s 2 558 kb/s
说明 Packed by Bilibili XCoder v2.0.2 Packed by Bilibili XCoder v2.0.2 Packed by Bilibili XCoder v2.0.2
编码程序 Lavf60.2.100 Lavf60.2.100 Lavf60.2.100
视频
格式 AVC AVC AVC
格式/信息 Advanced Video Codec Advanced Video Codec Advanced Video Codec
格式配置 (Profile) High@L4 High@L5 High@L5
格式设置 CABAC / 4 Ref Frames CABAC / 6 Ref Frames CABAC / 6 Ref Frames
格式设置, CABAC
格式设置, 参考帧 4 帧 6 帧 6 帧
编解码器 ID avc1 avc1 avc1
编解码器 ID/信息 Advanced Video Coding Advanced Video Coding Advanced Video Coding
时长 11 秒 634 毫秒 11 秒 814 毫秒 14 秒 175 毫秒
源, 时长 / 13 秒 999 毫秒 13 秒 999 毫秒
码率 3 083 kb/s 2 566 kb/s 2 464 kb/s
最大码率 / 2 464 kb/s /
宽度 1 920 像素 1 920 像素 1 920 像素
高度 1 080 像素 1 080 像素 1 080 像素
画面比例 16:09 16:09 16:09
帧率模式 恒定帧率 (CFR) 动态帧率 (VFR) 动态帧率 (VFR)
编码配置区块 (box) avcC
音频
格式 AAC LC AAC LC AAC LC
格式/信息 Advanced Audio Codec Low Complexity Advanced Audio Codec Low Complexity Advanced Audio Codec Low Complexity
编解码器 ID mp4a-40-2 mp4a-40-2 mp4a-40-2
时长 11 秒 620 毫秒 11 秒 634 毫秒 13 秒 995 毫秒
源, 时长 11 秒 641 毫秒 13 秒 995 毫秒
Source_Duration_LastFrame -7 毫秒
码率模式 恒定码率 (CBR) 恒定码率 (CBR) 恒定码率 (CBR)
码率 132 kb/s 115 kb/s 115 kb/s
声道数 2 声道 2 声道 2 声道
声道布局 L R L R L R
采样率 48.0 kHz 48.0 kHz 48.0 kHz
帧率 46.875 FPS (1024 SPF) 46.875 FPS (1024 SPF) 46.875 FPS (1024 SPF)
压缩模式 有损 有损 有损

细节我不是很清楚,但是显然视频和音频的时长是不同的。

其中:
重新编码的文件音画同步,与需求一致
avoid_negative_ts参数的文件,音画同步,但是开始的时间早于需求时间
keyint_min参数的文件开头部分画面流畅,无声音;有音频的部分为需求的部分

总结:
如果对音画同步有需求,时间不是必须非常准确,那么可以使用avoid_negative_ts参数。
如果对音频需求准确,那么可以使用avoid_negative_ts参数
如果同步和时间点的要求都很高,只能重编码

2 个赞

再次更新一下我的测试,avoid_negative_ts 支持4个值
https://ffmpeg.org/ffmpeg-all.html#Format-Options

使用了相同文件,如下命令增加4个输出结果:

ffmpeg -ss 1:26:54.02 -to 1:27:5.64 -i "C:\prg\recorder\Record\【胡桃USA】玩点花的 2023年2月13日20点场.flv.mp4"  -acodec copy -vcodec copy   -avoid_negative_ts 0   -y "C:\prg\recorder\Record\# 送龟霸吗-avoid_negative_ts_0.mp4"


ffmpeg -ss 1:26:54.02 -to 1:27:5.64 -i "C:\prg\recorder\Record\【胡桃USA】玩点花的 2023年2月13日20点场.flv.mp4"  -acodec copy -vcodec copy   -avoid_negative_ts 1   -y "C:\prg\recorder\Record\# 送龟霸吗-avoid_negative_ts_1.mp4"


ffmpeg -ss 1:26:54.02 -to 1:27:5.64 -i "C:\prg\recorder\Record\【胡桃USA】玩点花的 2023年2月13日20点场.flv.mp4"  -acodec copy -vcodec copy   -avoid_negative_ts 2   -y "C:\prg\recorder\Record\# 送龟霸吗-avoid_negative_ts_2.mp4"


ffmpeg -ss 1:26:54.02 -to 1:27:5.64 -i "C:\prg\recorder\Record\【胡桃USA】玩点花的 2023年2月13日20点场.flv.mp4"  -acodec copy -vcodec copy   -avoid_negative_ts -1   -y "C:\prg\recorder\Record\# 送龟霸吗-avoid_negative_ts_-1.mp4"

我使用mpc-be播放器循环播放,结果如下:

参数 画面开始时间 音频开始时间
avoid_negative_ts 1 提前 提前
avoid_negative_ts 2 提前 提前
avoid_negative_ts 0 提前 准确
avoid_negative_ts -1 提前 准确
keyint_min 2 提前 准确

使用wmp播放器播放文件

参数 画面开始时间 音频开始时间 其他问题
avoid_negative_ts 1 提前 提前
avoid_negative_ts 2 提前 提前
avoid_negative_ts 0 提前 提前 开始位置的画面会有抽搐
avoid_negative_ts -1 提前 提前 开始位置的画面会有抽搐
keyint_min 2 提前 提前 开始位置的画面会有抽搐

这是导入剪映后的对比(没有做裁剪,单纯根据音频波形图手动对齐时间轴),时长明显不同。可以得出和mpc-be播放器接近的但是不同的结论。使用前2个参数开始的时间大幅早于后3个参数,结束的时间略早于后3个参数,没有画面开始但是没有音频的情况。

这是另一款剪辑工具剪映,轨道排列顺序相同,没有显示文件名。结论和剪映相同,但是注意,后边3个参数的文件缩略图不正常。

总的来说还是有些兼容问题。从人能够感知的角度讲,在使用codec copy参数时,有两组选择:

  1. 让开始的时间提前,任何播放器都能正常播放: avoid_negative_ts 1或 2
  2. 用于视频剪辑软件,输出准确的时间:avoid_negative_ts -1或 0,或者 -g 1 -keyint_min 2