FFmpeg 可以将视频文件按照固定大小分割么?

2021-05-11 11:06:13 +08:00
 Geekerstar

比如一个 5G 的视频文件,分割为 5 个 1G 的文件,跪求大佬解答

3018 次点击
所在节点    FFmpeg
13 条回复
yougoUp
2021-05-11 11:17:10 +08:00
FFmpeg 使用命令我没尝试过,我是用 C++的 API 做个类似功能。
累计每一帧大小,达到临界值( 1G )时,先不做处理,继续处理,当处理到临界值的下一 I 帧时合并视频,并且从当前 I 帧开始处理下一个视频。
AoEiuV020
2021-05-11 11:22:54 +08:00
直接按时长估算?误差很小的,
efaun
2021-05-11 11:24:12 +08:00
FFmpeg -h

FFmpeg -fs
CallMeReznov
2021-05-11 11:24:38 +08:00
-fs
also24
2021-05-11 11:25:35 +08:00
@efaun
你确定 -fs 符合楼主的需求嘛?

https://ffmpeg.org/ffmpeg.html#Video-Options
-fs limit_size (output)
Set the file size limit, expressed in bytes. No further chunk of bytes is written after the limit is exceeded. The size of the output file is slightly more than the requested file size.
cheng6563
2021-05-11 11:45:16 +08:00
按时长和码率估算就行了
fgodt
2021-05-11 11:51:45 +08:00
最简单的是按时常来估算
GalaDOS
2021-05-11 12:05:13 +08:00
恒定码率的视频,2L 的方法一般就可以了
非恒定码率的视频(比如用-crf 编的),或者希望精度高一点(再高也会受关键帧限制),可以自己修改 segment.c,加个 segment_size 选项
imn1
2021-05-11 12:33:45 +08:00
分割后能播和不能播是两码事,后者跟 ffmpeg 无关
RedisMasterNode
2021-05-11 12:37:35 +08:00
@AoEiuV020 这个实际用起来误差还挺大的...取决于不同场景(比如运动和静止、噪点多少、画面风格)的分布,而且也得看你说的误差是接受多少范围内,比如说 10MiB 范围内算误差的话,那应该超出会挺多,如果说 100M 的误差,视频原本就小的话可能还是可以满足,如果是蓝光(例如 20-30G/120min )的话,基本没希望
no1xsyzy
2021-05-11 21:33:04 +08:00
精确等分是不可能的。

1.
时间 -> 尺寸 的函数是一个局部线性函数
局部线性函数可以迭代求反,参考火星坐标系解密算法,或者更快速地,使用牛顿迭代法。

2.
-fs 再设小一点,拿到前一个视频结束的时间点补下一个(但如果你是等分的话,可能 -fs 反而要设大一点,避免最后尾部多出来几 MiB 的尾巴)。
视频网站都是定时长的,不是有过 5 分钟诅咒之类的事儿嘛
wdssmq
2021-05-12 18:27:20 +08:00
MKVToolNix 可以按时间,,忘记能不能按大小了。。
balloonreddit
2021-06-19 16:11:42 +08:00
能不能按场景分割

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

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

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

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

© 2021 V2EX