在关键帧上分割视频(avi / h264)

你好 .

我有一个很大的视频文件 . ffmpegtcprobe 和其他工具说,它是AVI容器中的h264流 .

现在我想从视频中删除小块 .

  • 问题:视频接缝的索引已损坏/已损坏 . 我通过 mplayer -forceidx -saveidx <IndexFile> <BigVideoFile> 解决了这个问题 . 这里的问题是,我现在坚持使用mplayer / mencoder,它可以通过 -loadidx <IndexFile> 使用这个索引文件 . 我已经尝试纠正索引,如 man aviindexmplayer -frames 0 -saveidx mpidx broken.avi ; aviindex -i mpidx -o tcindex ; avimerge -x tcindex -i broken.avi -o fixed.avi )中描述的那样,但是这个测试无法在视频文件中搜索 .

  • 问题:我通过以下命令剪切部分视频: mencoder -loadidx in.idx -ss 8578 -endpos 20 -oac faac -ovc x264 -sws 9 -lavfopts format=mp4 -x264encopts <LotsOfOpts> -of lavf -vf scale=800:-10,harddup in.avi -o out.mp4 . 现在问题在于,一些视频在开始时已损坏 . 我认为这是因为事实上,我不一定会在关键帧上削减 .

问题:

  • 修复avi“内联”索引的最佳方法是什么,以便每个工具可以再次按预期工作?

  • 如何在关键帧上拆分?是否有针对此的mencoder选项?

  • 关键帧是否会出现频率?如何找出这个频率? (因此,通过一些数学计算,应该可以计算下一个关键帧并在那里切割)

  • 或许还有其他一些完全分开这部电影的方法吗?手工做是没有选择的,我要削减1000块...

非常感谢!

回答(2)

2 years ago

在做任何事情之前,我会尝试使用avidemux来修复文件 . 使用基于MP4的容器而不是AVI,您可能也会获得更好的结果 .

至于确保你的指定间隔在关键帧上是正确的,我建议用FFMPEG编码: -g 1 选项,然后使用下面的分割来确保每个帧实际上都是一个关键帧 . FFMPEG将关键帧称为GOP或图片组 .

ffmpeg -i input.avi -g 1 -vcodec copy -acodec copy out.avi

然后多次拆分(使用FFMPEG):

ffmpeg -i input.avi -ss 00:00:10 -t 00:00:30 out1.avi -ss 00:00:35 -t 00:00:30 out2.avi

还有一些选择:

x264 Mapping FFMPEG encoding in linux