private MovieBox createMovieBox(Movie movie) {
    MovieBox movieBox = new MovieBox();
    MovieHeaderBox mvhd = new MovieHeaderBox();
    mvhd.setVersion(1);
    mvhd.setCreationTime(DateHelper.convert(new Date()));
    mvhd.setModificationTime(DateHelper.convert(new Date()));

    long movieTimeScale = getTimescale(movie);
    long duration = 0;

    for (Track track : movie.getTracks()) {
      long tracksDuration =
          getDuration(track) * movieTimeScale / track.getTrackMetaData().getTimescale();
      if (tracksDuration > duration) {
        duration = tracksDuration;
      }
    }

    mvhd.setDuration(duration);
    mvhd.setTimescale(movieTimeScale);
    // find the next available trackId
    long nextTrackId = 0;
    for (Track track : movie.getTracks()) {
      nextTrackId =
          nextTrackId < track.getTrackMetaData().getTrackId()
              ? track.getTrackMetaData().getTrackId()
              : nextTrackId;
    }
    mvhd.setNextTrackId(++nextTrackId);
    movieBox.addBox(mvhd);
    for (Track track : movie.getTracks()) {
      movieBox.addBox(createTrackBox(track, movie));
    }
    // metadata here
    Box udta = createUdta(movie);
    if (udta != null) {
      movieBox.addBox(udta);
    }
    return movieBox;
  }