ffmpeg 精准切割视频优化相关的问题

2021-10-15 18:52:46 +08:00
 zzfer

要非常精准,且不会出现帧数丢失,是否只能转码切割?执行的命令如下

ffmpeg -ss -start -accurate_seek -i -videoPath -preset ultrafast -t -3600 -c:v libx264 -c:a aac -strict experimental -resultPath -y

查了好多这种是唯一符合要求的切割方法,但是速度很慢,想问问有没有大佬可以优化的地方

4970 次点击
所在节点    FFmpeg
17 条回复
flyhaozi
2021-10-15 18:56:18 +08:00
可以先无损粗切,然后再转码精准切割,应该能省点时间?
rosu
2021-10-15 19:24:06 +08:00
最精确查找是要逐帧解码的,ss 也应该应用到输出文件(-i 参数值之后)。
又要快又要准,可以先 ss 在输入前指定位置,再 ss 指定输入后的位置…

参考官方文档: https://trac.ffmpeg.org/wiki/Seeking
mxT52CRuqR6o5
2021-10-15 19:47:10 +08:00
把丢失的那几帧进行转码切割然后拼起来,有没有可行性?
ch2
2021-10-15 19:53:04 +08:00
粗剪就行了吧
ffmpeg -ss START -to END -i YOUR_FILE_NAME.mp4 -codec copy -avoid_negative_ts 1 OUTPUT.mp4
msg7086
2021-10-15 21:24:04 +08:00
> 是否只能转码切割?

是的。每个 GOP 是一个整体,没办法直接无损切开。
wszgrcy
2021-10-15 22:06:33 +08:00
是的,我记得去年我也问过,参数加前面才能正常切,但是速度降下来了,再后面的是会找最近的关键帧好像是
AX5N
2021-10-15 23:54:47 +08:00
是的,必须转码
LeeReamond
2021-10-16 04:46:49 +08:00
@msg7086 这么说的话特定情况下能否实现无损?原编码每个 GOP 独立且恰好切割 GOP 帧数
msg7086
2021-10-16 08:26:41 +08:00
@LeeReamond 如果正好切在 GOP 上的话当然没问题。
实际上,非精准切割就是切在 GOP 边界上。

PS: 音频其实也有自己的「 GOP 」,只不过音频的帧比较小,所以切割的时候不会距离太远。
比如 AAC 在 48khz 下一个帧长 21.3ms ,这 21.3ms 也是没法切开的。
LeeReamond
2021-10-17 00:19:12 +08:00
@msg7086 所以按大佬所说 ffmpeg 的处理方式是,如果遇到非封闭 gop 就编码,而后续如果 gop 是完整的话就直接复制?我比较好奇因为我印象中用 ffmpeg 切割视频是没有转码时间的,基本一个复制文件的时间就结束了
msg7086
2021-10-17 03:32:13 +08:00
@LeeReamond ffmpeg 切割既可以重编码也可以复制流,看你怎么写参数。
复制流就只能切 GOP 边界,重编码则是精确切割但是全部重编码。
如果你 ss to 写在输入前面,然后编码用 copy,就是复制流。
如果你 ss to 写在输出前面,然后编码用 x264,那就是重编码成 x264 。
(应该没有记错吧。)

GOP 是很难去凑参数单独重编码的,除非你知道原始编码器用的参数,然后用一样的参数去重编码不完整的 GOP,否则后续 GOP 可能会因为参数不同而花屏。
ameccc
2021-10-17 22:03:09 +08:00
之前用过的方法是先多提前一点 copy,然后在新的文件里找到第一个关键帧,再剪到第一帧。不过有的时候会留下一些不需要的内容。
zzfer
2021-10-18 10:31:37 +08:00
@flyhaozi 你是说先无损粗切出来一个视频,然后再完整的将这个视频再执行转码切割吗?


@mxT52CRuqR6o5 尝试过分段切割再拼接起来,但拼接部分会有一秒左右的卡顿


@ch2 这个试过,速度确实很快,但切割的开始时间恰好是关键帧还没啥问题,如果不是,开头会出现黑屏或者空白屏
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
zzfer
2022-04-13 17:41:25 +08:00
@linhui9018 感谢回复,但这个试过了,如果开头或者结尾是关键帧,那么是好用的,不然开头或结尾会有黑屏或者空白屏。
zzfer
2022-04-13 17:43:33 +08:00
@linhui9018 现在回想起来,除了转码精准切割,还可以在你说的方法将开始时间和结束时间扩大 30 秒后切割,之后再转码精准切割,可能快一点
ko1haha
169 天前
先精确后粗略,这个方法太麻烦了。

我选择没有需求的时候就粗略切割合并。( 确实拼接的部分,片源不好的话会卡顿 1 秒。

有精确切割需求的话,直接用一个长指令,让他一条龙生成多个片段。这样速度会快许多,缺点是指令有最大长度的限制。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/808095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX