70 lines
2.3 KiB
Java
70 lines
2.3 KiB
Java
|
|
package org.jcodec.movtool;
|
||
|
|
|
||
|
|
import java.io.File;
|
||
|
|
import java.util.Arrays;
|
||
|
|
import java.util.LinkedList;
|
||
|
|
import java.util.List;
|
||
|
|
import org.jcodec.containers.mp4.MP4Util;
|
||
|
|
|
||
|
|
public class QTRefEdit {
|
||
|
|
protected final QTEdit.EditFactory[] factories;
|
||
|
|
|
||
|
|
public QTRefEdit(QTEdit.EditFactory[] editFactories) {
|
||
|
|
this.factories = editFactories;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void execute(String[] args) throws Exception {
|
||
|
|
LinkedList<String> aa = new LinkedList<>(Arrays.asList(args));
|
||
|
|
List<MP4Edit> edits = new LinkedList<>();
|
||
|
|
while (aa.size() > 0) {
|
||
|
|
int i;
|
||
|
|
for (i = 0; i < this.factories.length; i++) {
|
||
|
|
if (aa.get(0).equals(this.factories[i].getName())) {
|
||
|
|
aa.remove(0);
|
||
|
|
try {
|
||
|
|
edits.add(this.factories[i].parseArgs(aa));
|
||
|
|
} catch (Exception e) {
|
||
|
|
System.err.println("ERROR: " + e.getMessage());
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (i == this.factories.length)
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
if (aa.size() == 0) {
|
||
|
|
System.err.println("ERROR: A movie file should be specified");
|
||
|
|
help();
|
||
|
|
}
|
||
|
|
if (edits.size() == 0) {
|
||
|
|
System.err.println("ERROR: At least one command should be specified");
|
||
|
|
help();
|
||
|
|
}
|
||
|
|
File input = new File((String)aa.remove(0));
|
||
|
|
if (aa.size() == 0) {
|
||
|
|
System.err.println("ERROR: A movie output file should be specified");
|
||
|
|
help();
|
||
|
|
}
|
||
|
|
File output = new File((String)aa.remove(0));
|
||
|
|
if (!input.exists()) {
|
||
|
|
System.err.println("ERROR: Input file '" + input.getAbsolutePath() + "' doesn't exist");
|
||
|
|
help();
|
||
|
|
}
|
||
|
|
if (output.exists())
|
||
|
|
System.err.println("WARNING: Output file '" + output.getAbsolutePath() + "' exist, overwritting");
|
||
|
|
MP4Util.Movie ref = MP4Util.createRefFullMovieFromFile(input);
|
||
|
|
new CompoundMP4Edit(edits).apply(ref.getMoov());
|
||
|
|
MP4Util.writeFullMovieToFile(output, ref);
|
||
|
|
System.out.println("INFO: Created reference file: " + output.getAbsolutePath());
|
||
|
|
}
|
||
|
|
|
||
|
|
protected void help() {
|
||
|
|
System.out.println("Quicktime movie editor");
|
||
|
|
System.out.println("Syntax: qtedit <command1> <options> ... <commandN> <options> <movie> <output>");
|
||
|
|
System.out.println("Where options:");
|
||
|
|
for (QTEdit.EditFactory commandFactory : this.factories)
|
||
|
|
System.out.println("\t" + commandFactory.getHelp());
|
||
|
|
System.exit(-1);
|
||
|
|
}
|
||
|
|
}
|