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

时间:2010-06-14 13:30:52

标签: indexing ffmpeg h.264 avi mencoder

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

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

  1. 问题:视频接缝的索引已损坏/已损坏。我通过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)中描述的索引,但这并未修复我的视频 - 这意味着我测试过的大多数工具都无法在视频文件中搜索。

  2. 问题:我通过以下命令剪切部分视频: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。现在问题在于,一些视频在开始时已损坏。我认为这是因为我不一定会在关键帧上切割。

  3. 问题:

    1. 修复avi“内联”索引的最佳方法是什么,以便每个工具都可以按预期方式再次使用?

    2. 我如何在关键帧处拆分?这是否有mencoder-option?

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

    4. 或许还有其他一些方法来分割这部电影吗?手工做是不可取的,我要削减1000多个块......

    5. 非常感谢!

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

在尝试任何操作之前,我会尝试使用avidemux来修复文件。使用基于MP4的容器比AVI还可以获得更好的结果。

至于确保你的指定间隔是否在关键帧上,我建议使用带有-g 1选项的FFMPEG进行编码,然后再使用下面的分割来确保每个帧实际上都是一个关键帧。 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