boolean acceptEdit = true; for (Edit edit : alignTo.getEdits()) { if (edit.getMediaTime() == -1 && !acceptDwell) { throw new RuntimeException("Cannot accept edit list for processing (1)"); if (edit.getMediaTime() >= 0 && !acceptEdit) { throw new RuntimeException("Cannot accept edit list for processing (2)"); if (edit.getMediaTime() == -1) { earliestTrackPresentationTime += edit.getSegmentDuration(); } else /* if edit.getMediaTime() >= 0 */ { earliestTrackPresentationTime -= (double) edit.getMediaTime() / edit.getTimeScale(); acceptEdit = false; acceptDwell = false; getEdits().add(new Edit((long) (-earliestTrackPresentationTime * getTrackMetaData().getTimescale()), getTrackMetaData().getTimescale(), 1.0, (double) getDuration() / getTrackMetaData().getTimescale())); } else if (earliestTrackPresentationTime > 0) { getEdits().add(new Edit(-1, getTrackMetaData().getTimescale(), 1.0, earliestTrackPresentationTime)); getEdits().add(new Edit(0, getTrackMetaData().getTimescale(), 1.0, (double) getDuration() / getTrackMetaData().getTimescale()));
protected ParsableBox createEdts(Track track, Movie movie) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(1); List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * movie.getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }
public static double getEarliestTrackPresentationTime(List<Edit> edits) { double earliestTrackPresentationTime = 0; boolean acceptEdit = true; boolean acceptDwell = true; for (Edit edit : edits) { if (edit.getMediaTime() == -1 && !acceptDwell) { throw new RuntimeException("Cannot accept edit list for processing (1)"); } if (edit.getMediaTime() >= 0 && !acceptEdit) { throw new RuntimeException("Cannot accept edit list for processing (2)"); } if (edit.getMediaTime() == -1) { earliestTrackPresentationTime += edit.getSegmentDuration(); } else /* if edit.getMediaTime() >= 0 */ { earliestTrackPresentationTime -= (double) edit.getMediaTime() / edit.getTimeScale(); acceptEdit = false; acceptDwell = false; } } return earliestTrackPresentationTime; }
protected Box createTkhd(Track track) { TrackHeaderBox tkhd = new TrackHeaderBox(); tkhd.setVersion(1); tkhd.setFlags(7); // enabled, in movie, in previe, in poster tkhd.setAlternateGroup(track.getTrackMetaData().getGroup()); tkhd.setCreationTime(track.getTrackMetaData().getCreationTime()); // We need to take edit list box into account in trackheader duration // but as long as I don't support edit list boxes it is sufficient to // just translate media duration to movie timescale if (track.getEdits().isEmpty()) { tkhd.setDuration(track.getDuration()); } else { long dur = 0; for (Edit edit : track.getEdits()) { dur += edit.getMediaTime() != -1 ? edit.getSegmentDuration() * track.getTrackMetaData().getTimescale() : 0; } tkhd.setDuration(dur); } tkhd.setHeight(track.getTrackMetaData().getHeight()); tkhd.setWidth(track.getTrackMetaData().getWidth()); tkhd.setLayer(track.getTrackMetaData().getLayer()); tkhd.setModificationTime(getDate()); tkhd.setTrackId(track.getTrackMetaData().getTrackId()); tkhd.setVolume(track.getTrackMetaData().getVolume()); return tkhd; }
double d = 0; for (Edit edit : track.getEdits()) { d += (long) edit.getSegmentDuration();
public static void main(String[] args) throws IOException { Movie m = MovieCreator.build("C:\\dev\\mp4parser\\examples\\src\\main\\resources\\1365070453555.mp4"); for (Track track : m.getTracks()) { track.getEdits().clear();; track.getEdits().add(new Edit(0, 1, 1, 2.0)); } new DefaultMp4Builder().build(m).writeContainer(new FileOutputStream("output.mp4").getChannel()); } }
long d = 0; for (Edit edit : track.getEdits()) { d += (long) edit.getSegmentDuration();
assert mvhd != null; for (EditListBox.Entry e : elst.getEntries()) { edits.add(new Edit(e.getMediaTime(), mdhd.getTimescale(), e.getMediaRate(), (double) e.getSegmentDuration() / mvhd.getTimescale()));
protected ParsableBox createEdts(Track track, Movie movie) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(0); // quicktime won't play file when version = 1 List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * movie.getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }
boolean acceptEdit = true; for (Edit edit : alignTo.getEdits()) { if (edit.getMediaTime() == -1 && !acceptDwell) { throw new RuntimeException("Cannot accept edit list for processing (1)"); if (edit.getMediaTime() >= 0 && !acceptEdit) { throw new RuntimeException("Cannot accept edit list for processing (2)"); if (edit.getMediaTime() == -1) { earliestTrackPresentationTime += edit.getSegmentDuration(); } else /* if edit.getMediaTime() >= 0 */ { earliestTrackPresentationTime -= (double) edit.getMediaTime() / edit.getTimeScale(); acceptEdit = false; acceptDwell = false; getEdits().add(new Edit((long) (-earliestTrackPresentationTime * getTrackMetaData().getTimescale()), getTrackMetaData().getTimescale(), 1.0, (double) getDuration() / getTrackMetaData().getTimescale())); } else if (earliestTrackPresentationTime > 0) { getEdits().add(new Edit(-1, getTrackMetaData().getTimescale(), 1.0, earliestTrackPresentationTime)); getEdits().add(new Edit(0, getTrackMetaData().getTimescale(), 1.0, (double) getDuration() / getTrackMetaData().getTimescale()));
double d = 0; for (Edit edit : track.getEdits()) { d += (long) edit.getSegmentDuration();
assert mvhd != null; for (EditListBox.Entry e : elst.getEntries()) { edits.add(new Edit(e.getMediaTime(), mdhd.getTimescale(), e.getMediaRate(), (double) e.getSegmentDuration() / mvhd.getTimescale()));
protected ParsableBox createEdts(Track track, Movie movie) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(0); // quicktime won't play file when version = 1 List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * movie.getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }
long d = 0; for (Edit edit : track.getEdits()) { d += (long) edit.getSegmentDuration();
protected ParsableBox createEdts(Track track, Movie movie) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(1); List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * movie.getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }
protected Box createEdts(Track track) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(1); List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * track.getTrackMetaData().getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }