要非常精准,且不会出现帧数丢失,是否只能转码切割?执行的命令如下
ffmpeg -ss -start -accurate_seek -i -videoPath -preset ultrafast -t -3600 -c:v libx264 -c:a aac -strict experimental -resultPath -y
查了好多这种是唯一符合要求的切割方法,但是速度很慢,想问问有没有大佬可以优化的地方
1
flyhaozi 2021-10-15 18:56:18 +08:00
可以先无损粗切,然后再转码精准切割,应该能省点时间?
|
2
rosu 2021-10-15 19:24:06 +08:00 via iPhone 1
最精确查找是要逐帧解码的,ss 也应该应用到输出文件(-i 参数值之后)。
又要快又要准,可以先 ss 在输入前指定位置,再 ss 指定输入后的位置… 参考官方文档: https://trac.ffmpeg.org/wiki/Seeking |
3
mxT52CRuqR6o5 2021-10-15 19:47:10 +08:00 via Android
把丢失的那几帧进行转码切割然后拼起来,有没有可行性?
|
4
ch2 2021-10-15 19:53:04 +08:00 1
粗剪就行了吧
ffmpeg -ss START -to END -i YOUR_FILE_NAME.mp4 -codec copy -avoid_negative_ts 1 OUTPUT.mp4 |
5
msg7086 2021-10-15 21:24:04 +08:00
> 是否只能转码切割?
是的。每个 GOP 是一个整体,没办法直接无损切开。 |
6
wszgrcy 2021-10-15 22:06:33 +08:00
是的,我记得去年我也问过,参数加前面才能正常切,但是速度降下来了,再后面的是会找最近的关键帧好像是
|
7
AX5N 2021-10-15 23:54:47 +08:00
是的,必须转码
|
8
LeeReamond 2021-10-16 04:46:49 +08:00
@msg7086 这么说的话特定情况下能否实现无损?原编码每个 GOP 独立且恰好切割 GOP 帧数
|
9
msg7086 2021-10-16 08:26:41 +08:00
@LeeReamond 如果正好切在 GOP 上的话当然没问题。
实际上,非精准切割就是切在 GOP 边界上。 PS: 音频其实也有自己的「 GOP 」,只不过音频的帧比较小,所以切割的时候不会距离太远。 比如 AAC 在 48khz 下一个帧长 21.3ms ,这 21.3ms 也是没法切开的。 |
10
LeeReamond 2021-10-17 00:19:12 +08:00
@msg7086 所以按大佬所说 ffmpeg 的处理方式是,如果遇到非封闭 gop 就编码,而后续如果 gop 是完整的话就直接复制?我比较好奇因为我印象中用 ffmpeg 切割视频是没有转码时间的,基本一个复制文件的时间就结束了
|
11
msg7086 2021-10-17 03:32:13 +08:00 1
@LeeReamond ffmpeg 切割既可以重编码也可以复制流,看你怎么写参数。
复制流就只能切 GOP 边界,重编码则是精确切割但是全部重编码。 如果你 ss to 写在输入前面,然后编码用 copy,就是复制流。 如果你 ss to 写在输出前面,然后编码用 x264,那就是重编码成 x264 。 (应该没有记错吧。) GOP 是很难去凑参数单独重编码的,除非你知道原始编码器用的参数,然后用一样的参数去重编码不完整的 GOP,否则后续 GOP 可能会因为参数不同而花屏。 |
12
ameccc 2021-10-17 22:03:09 +08:00
之前用过的方法是先多提前一点 copy,然后在新的文件里找到第一个关键帧,再剪到第一帧。不过有的时候会留下一些不需要的内容。
|
13
zzfer OP @flyhaozi 你是说先无损粗切出来一个视频,然后再完整的将这个视频再执行转码切割吗?
@mxT52CRuqR6o5 尝试过分段切割再拼接起来,但拼接部分会有一秒左右的卡顿 @ch2 这个试过,速度确实很快,但切割的开始时间恰好是关键帧还没啥问题,如果不是,开头会出现黑屏或者空白屏 |
14
linhui9018 2022-04-13 15:23:53 +08:00
https://trac.ffmpeg.org/wiki/Concatenate
ffmpeg -ss 00:03:00 -i video.mp4 -t 60 -c copy -avoid_negative_ts 1 cut.mp4 |
15
zzfer OP @linhui9018 感谢回复,但这个试过了,如果开头或者结尾是关键帧,那么是好用的,不然开头或结尾会有黑屏或者空白屏。
|
16
zzfer OP @linhui9018 现在回想起来,除了转码精准切割,还可以在你说的方法将开始时间和结束时间扩大 30 秒后切割,之后再转码精准切割,可能快一点
|
17
ko1haha 126 天前
先精确后粗略,这个方法太麻烦了。
我选择没有需求的时候就粗略切割合并。( 确实拼接的部分,片源不好的话会卡顿 1 秒。 有精确切割需求的话,直接用一个长指令,让他一条龙生成多个片段。这样速度会快许多,缺点是指令有最大长度的限制。。 |