Ich hoffe, es ist nicht zu spät, aber wenn Sie Metadatenfelder in MP4-Dateien hinzufügen/bearbeiten/löschen möchten, können Sie die Metadatenbearbeitungsklassen von JCodec verwenden.
Es gibt ein CLI-Tool, das von einer Java-API unterstützt wird. Die CLI ist in org.jcodec.movtool.MetadataEditorMain und die API ist in org.jcodec.movtool.MetadataEditor.
Lesen Sie mehr darüber: http://jcodec.org/docs/working_with_mp4_metadata.html
Also im Grunde, wenn Sie einige Metadaten, die Sie wissen müssen hinzufügen möchten, welche Taste (n) es entspricht. Eine Möglichkeit, dies herauszufinden, besteht darin, eine Beispieldatei zu prüfen, die bereits die benötigten Metadaten enthält.Hierfür können Sie die JCodec CLI-Tool ausführen, das nur alle vorhandenen Metadatenfelder wird ausdrucken (Schlüssel mit Werten):
./metaedit <file.mp4>
Dann, wenn Sie den Schlüssel kennen, mit Ihnen zu arbeiten, wollen entweder die gleiche CLI verwenden Werkzeug:
# Changes the author of the movie
./metaedit -f -si ©ART=New\ value file.mov
oder dasselbe über das Java API:
MetadataEditor mediaMeta = MetadataEditor.createFrom(new
File("file.mp4"));
Map<Integer, MetaValue> meta = mediaMeta.getItunesMeta();
meta.put(0xa9415254, MetaValue.createString("New value")); // fourcc for '©ART'
mediaMeta.save(false); // fast mode is off
Um ein Metadatenfeld aus einer Datei zu löschen:
Um Zeichenfolge zu konvertieren zu integer fourcc Sie so etwas wie verwenden:
byte[] bytes = "©ART".getBytes("iso8859-1");
int fourcc =
ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt();
Wenn Sie die Android-Metadaten bearbeiten möchten/Löschen Sie benötigen, um einen anderen Satz von fucntion zu verwenden (da es gespeichert ist anders als iTunes Metadaten):
./metaedit -sk com.android.capture.fps,float=25.0 file.mp4
oder alternativ können die gleichen durch die API:
MetadataEditor mediaMeta = MetadataEditor.createFrom(new
File("file.mp4"));
Map<String, MetaValue> meta = mediaMeta.getKeyedMeta();
meta.put("com.android.capture.fps", MetaValue.createFloat(25.));
mediaMeta.save(false); // fast mode is off
Ich erhalte IllegalArgumentException mit Ihrem oben angegebenen MediaMetadataRetriever-Code. –
Hallo, in welcher Zeile? – Jorgesys
In dieser Zeile: - retriever.setDataSource (file.getAbsolutePath()); –