程序 FFmpeg 准确切割视频问题,请大神指教?

2021-11-30 09:58:49 +08:00
 qin20

如题,我在项目开发过程中,使用 FFmpeg 来批量处理视频,但是发现 FFmpeg 剪切的视频并不能按照传参的开始时间和结束时间去切割视频,原因是关键帧的问题,比如我需要切割 5 到 7 秒的视频片段

ffmpeg -i a.mp4 -ss 00:00:05 -to 00:00:07 -c copy -o out.mp4

FFmpeg 会自动寻找5秒和7秒附近的关键帧,并从关键帧的位置去切割,导致视频最终的时间可能是00:00:04 ~ 00:00:06这种,导致切出来的视频有时候声音被切了一半

我知道在切割的时候使用重新编码可以准确切割,但是重新编码遇到几个 G 的视频文件时,切割两秒的视频,就需要处理好几分钟,在批量切割的需求下(几百个视频片段),完全达不到性能要求

我想知道这几个问题:

  1. 有没有一款软件可以替代 FFmpeg 实现准确切割的功能
  2. 如果使用 FFmpeg ,能不能拿到 FFmpeg 它实际切割的关键帧的时间,这样方便我快速重新编码调整切割的误差
9428 次点击
所在节点    FFmpeg
67 条回复
coderluan
2021-11-30 10:13:14 +08:00
https://github.com/mifi/lossless-cut

如果能用 GUI ,这个是神器,准确而且不用重新编码,应该是自己插了些 PPS 信息帧。
yedra
2021-11-30 10:17:12 +08:00
我也遇到一样的情况,最终说服了产品同意不精确的切割
qin20
2021-11-30 10:21:27 +08:00
@coderluan 我研究研究
qin20
2021-11-30 10:22:06 +08:00
@yedra 哈哈我是产品也是程序
qin20
2021-11-30 10:24:33 +08:00
@coderluan 我的程序就是 gui 的,不能再使用 gui 啦,有没有命令行?
coderluan
2021-11-30 10:32:41 +08:00
@qin20 温馨提示:这个是开源的。
tushankaka
2021-11-30 10:46:45 +08:00
-c copy 去掉,重新编码
anzu
2021-11-30 10:53:24 +08:00
7 楼正解,不过重新编码速度比较慢,尤其是如果你需要从几小时的视频中截取末尾的几分钟时
anzu
2021-11-30 10:58:06 +08:00
啊没仔细看,要求性能的话,大概只能-c 宽切后再细切重新编码了吧,比如前后+10 秒之类的。
wszgrcy
2021-11-30 10:58:16 +08:00
我记得有个解决方案时先按关键帧来,再切前几秒?但是不知道是怎么算出来前几秒是怎么的出来的
JerryV2
2021-11-30 10:58:29 +08:00
先用 -c copy ,时间范围设置大些,再用重新编码精确切割
zouri
2021-11-30 10:58:32 +08:00
OpenCV 应该可以
JerryV2
2021-11-30 11:01:11 +08:00
@JerryV2
请忽略。。。
楼主已想到此方法,关键不知道首次切割后,再次切割时的时间起始和终止

应该可以读取关键帧的具体时间吧,这样这个思路还是可行的
questionyu
2021-11-30 11:21:17 +08:00
`ffmpeg -i a.mp4 -ss 00:00:05 -to 00:00:07 -c copy -copyts -o out.mp4`

我之前在网上找的这个命令去完成比较精准的切割的,也不知道这样做是个什么原理
muchengxue
2021-11-30 11:30:54 +08:00
提供一种思路,先截取一定范围,然后把视频搞成帧图,然后再按照原视频的帧率和帧图合成新视频
cairnechen
2021-11-30 11:41:47 +08:00
楼主试试把-ss 参数放在-i 参数前面看看?
vanton
2021-11-30 11:45:04 +08:00
为什么不切两次?
先粗切,前后+10s 。
然后在编码细切。
3dwelcome
2021-11-30 11:45:46 +08:00
楼主没搞懂无损剪切原理。

所谓关键帧,就是后面几秒的视频,都是根据这个关键帧推导出图像的。

不编码直接硬切,就意味着丢失关键帧,那解压出来的视频,就都是马赛克了。
ksword
2021-11-30 12:03:37 +08:00
copy 模式是没办法了,只能重编码或试下按关键帧切,而不是时间
xylophone21
2021-11-30 12:05:11 +08:00
copy 模式下,开头不是关键帧怎么播放呢?

切两次呗

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

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

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

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

© 2021 V2EX