Ffmpeg 远程视频文件的精确剪切

Ffmpeg 远程视频文件的精确剪切,ffmpeg,Ffmpeg,我在服务器上有几个小时长的视频文件,我需要能够准确快速地剪切其中的片段 我试过: ffmpeg -ss 10:00 -i http://server/input.mp4 -t 5:00 -vcodec copy -acodec copy out.mp4 这是可行的,而且速度很快,但它并不精确,因为ffmpeg在找到关键帧之前会向后搜索。生成的视频文件以负开始时间结束,这在浏览器中不起作用 我知道我可以对视频进行重新编码以进行精确搜索,但这会很慢,并且会降低质量 我想到了以下想法: 例如,假设我

我在服务器上有几个小时长的视频文件,我需要能够准确快速地剪切其中的片段

我试过:

ffmpeg -ss 10:00 -i http://server/input.mp4 -t 5:00 -vcodec copy -acodec copy out.mp4
这是可行的,而且速度很快,但它并不精确,因为ffmpeg在找到关键帧之前会向后搜索。生成的视频文件以负开始时间结束,这在浏览器中不起作用

我知道我可以对视频进行重新编码以进行精确搜索,但这会很慢,并且会降低质量

我想到了以下想法:

例如,假设我们有一个20秒的视频,每5秒有一个关键帧,在0,5,10,15,20

如果我想要从第2节到第17节的段,我会从第2节到第5节重新编码,从第5节到第15节重新复制,从第15节到第17节重新编码,并对三个文件进行压缩

这是一般问题和我的想法,现在的要求是:

必须通过HTTP访问源文件 必须没有或很少有质量损失 它必须很快,在2小时的视频中缩短10分钟大约需要1-2秒 它必须是准确的 它必须适用于webm和mp4 它不必是ffmpeg命令,我很确定我必须围绕libav编写一个C包装器

源文件可以通过任何必要的方式进行预处理以使其正常工作


更新:在获得更多信息后,似乎我用流复制的中间部分粘合重新编码的肢体部分的想法不会起作用,因为编码设置不同。但是我可以提取一个较长的部分关键帧->关键帧,并提取可以添加到HTTP头中的时间码,比如时间范围:0.25,15.14,这意味着从0.25秒到15.14秒播放,并丢弃其余部分。

将关键帧以足够高的密度嵌入源中,以解决精度问题,对您有用吗?例如,如果您对所有视频进行预处理,使其每秒都有一个关键帧,然后只让人们剪切到秒,那么您的问题似乎基本上解决了。负开始时间?什么版本的ffmpeg?你解决过这个问题吗?