有一个视频文件,要进行以下处理,[0, 13, 2 倍速] 表示从 0 到 13 帧做 2 倍速处理,按照以下列表,依次对整个视频中各个片段做不同的倍速处理后,以 H264 压制写到输入文件。希望整个过程都使用 FFmpeg 进行处理。
[0, 13, 2倍速]
[13, 20, 1倍速]
[20, 25, 2倍速]
[25, 135, 1倍速]
[135, 164, 2倍速]
[164, 250, 1倍速]
[250, 254, 2倍速]
[254, 309, 1倍速]
[309, 354, 2倍速]
[354, 438, 1倍速]
[438, 465, 2倍速]
[465, 540, 1倍速]
[540, 625, 2倍速]
目前我实现了两种方法,但都不完美:
- 使用 FFmpeg 将输入视频的所有帧提取成 jpeg,依次放到一个文件夹 1,根据区间和倍速信息,将需要的帧图片移动到文件夹 2,最后将文件夹 2 的图片用 FFmpeg H264 编码合成为一个视频。缺点是:将视频的所有帧提取出来,会占用大量空间,一个 500MB 的视频提取出来后,可能会占用 30G 的硬盘空间,而且都是零散的图片文件,除了费时间,有损硬盘。
- 使用 openCV 将输入视频逐帧读取,根据区间和倍速信息,决定是否将这一帧写入到输出视频。缺点是:这个操作是单线程的,速度比 FFmpeg 提取照片还慢,而且写出的输出视频是未压缩的数据,还需要使用 FFmpeg 再 H264 压制一遍,这样下来,整体还是比 FFmpeg 提取图片筛选后再压制方法一慢一些。
所以寻求可以直接使用 FFmpeg 读取输入文件的同时按上述区间和倍速信息列表用 H264 编码写到输出文件的方法。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于