我有几个小时的视频文件存在于服务器上,我需要能够以准确,快速的方式在其中剪切片段。
我试过了:
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章,并连接这三个文件。
这是一般问题和我的想法,现在的要求是:
它不一定是一个ffmpeg命令,我非常确定我必须在libav周围写一个C包装器。
源文件可以任何必要的方式进行预处理,以使其有效。
更新:获得更多信息后,似乎是我的想法"胶合重新编码的肢体部分与流复制的中间部分因为不同的编码设置而无法工作。但是我可以提取一个longuer部分(关键帧 - >关键帧)并提取我可以在HTTP标头中添加的时间码,例如Time-Range: 0.25,15.14
,这意味着"从sec 0.25到15.14播放并丢弃其余部分&#34 ;