Mam nadzieję, że nie jest za późno, ale jeśli chcesz dodawać/edytować/usuwać pola metadanych w plikach MP4, możesz użyć klas edycji metadanych JCodec.
Istnieje narzędzie CLI wspierane przez interfejs API języka Java. CLI jest w org.jcodec.movtool.MetadataEditorMain, a API jest w org.jcodec.movtool.MetadataEditor.
Czytaj więcej na ten temat: http://jcodec.org/docs/working_with_mp4_metadata.html
Więc w zasadzie, jeśli chcesz dodać metadane trzeba wiedzieć jakiego klucza (y) odpowiadają. Jednym ze sposobów sprawdzenia jest sprawdzenie przykładowego pliku, który już posiada potrzebne metadane.W tym celu można uruchomić narzędzie CLI JCodec, że będzie po prostu wydrukować wszystkie istniejące pola metadanych (elementy o wartościach):
./metaedit <file.mp4>
wtedy, gdy wiesz, klawisz, który chcesz pracować z was może użyć tego samego interfejsu CLI narzędzie:
# Changes the author of the movie
./metaedit -f -si ©ART=New\ value file.mov
lub samo za pośrednictwem interfejsu API Java:
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
Aby usunąć pole metadanych z pliku:
MetadataEditor mediaMeta = MetadataEditor.createFrom(new
File("file.mp4"));
Map<Integer, MetaValue> meta = mediaMeta.getItunesMeta();
meta.remove(0xa9415254); // removes the '©ART'
mediaMeta.save(false); // fast mode is off
Aby przekonwertować ciąg do liczby całkowitej fourcc można użyć coś takiego:
byte[] bytes = "©ART".getBytes("iso8859-1");
int fourcc =
ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt();
Jeśli chcesz edytować/usunąć android metadane trzeba użyć innego zestawu fucntion (bo jest przechowywany inaczej niż metadanych iTunes)
./metaedit -sk com.android.capture.fps,float=25.0 file.mp4
lub alternatywnie samo przez 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
Otrzymuję IllegalArgumentException przy użyciu twojego MediaMetadataRetriever kodu zamieszczonego powyżej. –
cześć, w której linii? – Jorgesys
W tym wierszu: - retriever.setDataSource (file.getAbsolutePath()); –