python/视频-无需重新编码即可删除帧

python/视频-无需重新编码即可删除帧,python,video,ffmpeg,moviepy,Python,Video,Ffmpeg,Moviepy,我知道这可能是一个微不足道的问题,但到目前为止,我还没有找到我尝试过的各种解决方案,我相信一定有一种方便的方法来实现这一点 如何从视频文件中删除帧/毫秒而不进行切片、合并和重新编码? 我找到的所有解决方案都涉及将不同时间导出到不同格式,我希望没有必要这样做 使用ffmpeg/avconv时,需要将临时流转换为.ts,然后连接,最后以原始格式重新编码 Python库MoviePy似乎完全符合我的需要,但: cutout函数返回一个无法导出的文件,因为write\u videofile函数尝试获取

我知道这可能是一个微不足道的问题,但到目前为止,我还没有找到我尝试过的各种解决方案,我相信一定有一种方便的方法来实现这一点

如何从视频文件中删除帧/毫秒而不进行切片、合并和重新编码?
我找到的所有解决方案都涉及将不同时间导出到不同格式,我希望没有必要这样做

使用
ffmpeg
/
avconv
时,需要将临时流转换为
.ts
,然后连接,最后以原始格式重新编码

Python库
MoviePy
似乎完全符合我的需要,但:

  • cutout
    函数返回一个无法导出的文件,因为
    write\u videofile
    函数尝试获取删除的帧,但失败
  • 如果我将原始文件切成不同的片段,然后将它们与
    concatenate\u videoclips
    合并,则导出不会失败,但会占用视频长度的两倍。由此产生的视频具有更快的帧速率,只有连接视频的提示点被及时放置,音频以正常速度播放。还值得注意的是,尽管输出文件的持续时间缩短了5-7%,但其大小约为15%
有没有其他我不知道的图书馆可以查一下 我试图想象的是一个抽象层,它提供了对最常见视频格式的轻松访问,使我能够弹出不需要的帧并更新文件头,而无需深入研究每种格式的细节

为什么不使用

#import os
start = '00:00:08.345' # HH:MM:SS[.xxx] format
duration = '00:00:10'

os.system('ffmpeg -i path/to/input.mp4 -vcodec copy -acodec copy -ss ' + start + ' -t ' + end + ' path/to/file.mp4')`

这将占用input.mp4并从8.345秒开始减少10秒,而无需重新编码文件。您可能想使用很多FFMPEG python包装器,但这是我能想到的最简单的方法。

由于现代视频编码标准使用帧间预测,因此不存在在不重新编码的情况下删除帧的通用解决方案。(删除参考图片会中断帧间预测,因此只能删除非参考图片。)