mp4parse timelapse帧率

Kir*_*kov 14 java mp4parser

我正在尝试摄取mp4文件并使其成为游戏中时光倒流.它适用于下面的代码.但是,输出文件的帧速率为16*originalFrameRate.由于我不打算将其作为slow motion视频播放,我宁愿丢弃这些冗余帧以使输出文件更小.

Movie inputMovie = MovieCreator.build(fileUri);

List<Track> videoTracks = new LinkedList<>();

for (Track track : inputMovie.getTracks()) {
    if (track.getHandler().equals("vide")) {
        videoTracks.add(track);
    }
}

final int speedByFactorOf = 16;

Movie outputMovie = new Movie();

AppendTrack appendedTracks = new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()]));
outputMovie.addTrack(new WrappingTrack(appendedTracks) {
    @Override
    public long[] getSampleDurations() {
        long[] l = super.getSampleDurations();
        for (int i = 0; i < l.length; i++) {
            l[i] /= speedByFactorOf;
        }
        return l;
    }
});

BasicContainer out = (BasicContainer) new DefaultMp4Builder().build(outputMovie);

FileChannel fc = new RandomAccessFile("timelapse.mp4", "rw").getChannel();
out.writeContainer(fc);
fc.close();
out.close();
Run Code Online (Sandbox Code Playgroud)

我无法找到任何更改输出帧速率的示例.

Ano*_*non 0

正如 @tarun-lalwani 所说,如果您引用的项目是https://github.com/sannies/mp4parser那么它只能编辑 MP4 容器,而不能编辑 MP4 容器中保存的视频/音频/媒体等。容器。即使您可以使用元数据将 FPS 加速十六倍,文件大小也不会变得更小,因为所有帧仍然在文件内(只是显示较短的持续时间)。您需要使用 FFmpeg 之类的东西(例如通过https://github.com/bramp/ffmpeg-cli-wrapper)或其他一些编程视频编辑器来完成您所描述的操作,因此只保留视频的每第十六帧,以便视频文件实际上变小了。

太长了;mp4parser 不是编辑视频的正确项目(与元数据相反),并且您想要实现的目标听起来超出了摆弄容器的范围。