比如一个 5G 的视频文件,分割为 5 个 1G 的文件,跪求大佬解答
1
yougoUp 2021-05-11 11:17:10 +08:00
FFmpeg 使用命令我没尝试过,我是用 C++的 API 做个类似功能。
累计每一帧大小,达到临界值( 1G )时,先不做处理,继续处理,当处理到临界值的下一 I 帧时合并视频,并且从当前 I 帧开始处理下一个视频。 |
2
AoEiuV020 2021-05-11 11:22:54 +08:00
直接按时长估算?误差很小的,
|
3
efaun 2021-05-11 11:24:12 +08:00
FFmpeg -h
FFmpeg -fs |
4
CallMeReznov 2021-05-11 11:24:38 +08:00
-fs
|
5
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. |
6
cheng6563 2021-05-11 11:45:16 +08:00
按时长和码率估算就行了
|
7
fgodt 2021-05-11 11:51:45 +08:00
最简单的是按时常来估算
|
8
GalaDOS 2021-05-11 12:05:13 +08:00
恒定码率的视频,2L 的方法一般就可以了
非恒定码率的视频(比如用-crf 编的),或者希望精度高一点(再高也会受关键帧限制),可以自己修改 segment.c,加个 segment_size 选项 |
9
imn1 2021-05-11 12:33:45 +08:00
分割后能播和不能播是两码事,后者跟 ffmpeg 无关
|
10
RedisMasterNode 2021-05-11 12:37:35 +08:00
@AoEiuV020 这个实际用起来误差还挺大的...取决于不同场景(比如运动和静止、噪点多少、画面风格)的分布,而且也得看你说的误差是接受多少范围内,比如说 10MiB 范围内算误差的话,那应该超出会挺多,如果说 100M 的误差,视频原本就小的话可能还是可以满足,如果是蓝光(例如 20-30G/120min )的话,基本没希望
|
11
no1xsyzy 2021-05-11 21:33:04 +08:00
精确等分是不可能的。
1. 时间 -> 尺寸 的函数是一个局部线性函数 局部线性函数可以迭代求反,参考火星坐标系解密算法,或者更快速地,使用牛顿迭代法。 2. -fs 再设小一点,拿到前一个视频结束的时间点补下一个(但如果你是等分的话,可能 -fs 反而要设大一点,避免最后尾部多出来几 MiB 的尾巴)。 视频网站都是定时长的,不是有过 5 分钟诅咒之类的事儿嘛 |
12
wdssmq 2021-05-12 18:27:20 +08:00
MKVToolNix 可以按时间,,忘记能不能按大小了。。
|
13
balloonreddit 2021-06-19 16:11:42 +08:00
能不能按场景分割
|