这并不是一个特别新的问题领域,但我已经尝试过那里建议的内容,但运气不佳。那么,我的故事:
我有一大段 15 秒的直接来自camera.mov 视频,我想从中提取特定的块,我可以通过开始时间和停止时间(以秒为单位)来识别该块。我首先尝试执行我称之为“复制提取”的操作:获取第 9 秒到第 12 秒,
ffmpeg -i test.mov -vcodec copy -acodec copy -ss 9 -to 12 test-copy.mov
这是一个不错的开始,但剪辑的开头和结尾有一些黑帧,这是我不能拥有的——它必须是对原始内容的干净编辑。因此,我尝试将原始片段重新编码为经过修剪的新片段:
ffmpeg -i test.mov -ss 00:00:09 -t 00:00:03 test-out.mov
这更好,但不完全是:剪辑开头不再有任何黑帧,但它们在结尾处仍然存在。
经过更多浏览和阅读后,我怀疑问题是 ffmpeg 由于原始视频中缺少关键帧而无法找到正确的点。因此,我以几种不同的方式重新编码了原始视频(大概)添加关键帧。由于我希望能够在一秒的边界(“从 9 秒到 12 秒”)挑选视频,因此我尝试复制网络上的各种建议,
ffmpeg -i test.mov -force_key_frames "expr:gte(t, n_forced)" test-forced.mp4
and
ffmpeg -i test.mov -g 1 test-g-inserted.mp4
(我根据一些关于需要 mp4 容器来支持关键帧搜索的评论将它们构建为 mp4,但老实说,我只是在这里进行黑客攻击。)然后我像以前一样尝试提取,但在这些可能现在具有关键帧的新视频上在他们中。不幸的是——两者似乎都差不多;开始还好,但最后还是有黑框。 (FWIW,test-forced.mp4 和 test-g-inserted.mp4 也有尾随黑帧。)
所以:我仍然被困住了,并且不想被困住。关于我做错了什么有什么见解吗?我觉得我已经很接近了,但我真的需要摆脱那些拖尾的黑框......