凤凰天使翻译的电视剧,都有片头广告,我下的这套有100集的电视剧,手动太累了
无脑推荐ffmpeg
顺带,请给人家一条活路,弄完之后不要分享!
ffmpeg +1
我记得有的播放器可以设置跳过片头片尾呀,就是直接播放一个指定的时间点。
可以试试 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
在存放视频的文件夹下执行上述脚本即可。
补充说明:
- 上述命令涉及的时间格式均是
hh:MM:ss
,如20分30秒可写为 00:20:30。 - 上述
*.mp4
可根据视频的实际格式进行改写。如视频都是 flv 格式的,可写为*.flv
。 - 上述脚本中使用了
-loglevel quiet
参数,这样运行 FFmpeg 时不会显示运行日志。如果处理过程中发生问题,可去掉这个参数,再重新运行脚本,查看日志内容。
参考资料:
无脑ffmpeg其实是有问题的。
- 如果使用codec copy参数,处理速度大大加快,但是由于关键帧的问题,可能导致起止位置的问题: 时间不准确,音画不同步,画面冻结
- 如果不使用,重新编码速度慢,二次压缩画质有损耗
按网上的说法,如果对视频剪辑的起止时间不作十分精确的要求,可以加个 -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 开始时间
之后,就容易出现音画不同步的问题。
如果要求精确剪切视频,网上有好几种说法:
- 加
-g 1 -keyint_min 2
参数,在剪切前调整视频关键帧的位置,再去剪切。
参考资料:https://blog.csdn.net/yunxiaobaobei/article/details/106529585 - 加
-avoid_negative_ts make_zero
参数。据称可 “精确到30fps剪辑的20分之一毫秒,但这将完全取决于您的视频的帧率”。
参考资料:https://cloud.tencent.com/developer/ask/sof/1112587
上述方法我都作了尝试,没有出现音画不同步的现象。但我对视频处理方面的知识不甚了解,这些方法剪辑视频的精确度如何我不能判断。希望上述方法能给您带来帮助。
今天刚好要切视频,发现音画不同步的问题确实是 -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参数
如果同步和时间点的要求都很高,只能重编码
再次更新一下我的测试,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参数时,有两组选择:
- 让开始的时间提前,任何播放器都能正常播放: avoid_negative_ts 1或 2
- 用于视频剪辑软件,输出准确的时间:avoid_negative_ts -1或 0,或者 -g 1 -keyint_min 2