Я пытаюсь загрузить файл 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();
Мне не удалось найти примеры того, как изменить частоту кадров вывода.