我想要讀取和編輯(寫入)mp4元數據。特別是我想在Android中讀取/寫入標籤元數據,如下圖所示。Android:讀寫.mp4元數據 - 標籤
我搜索這個互聯網上發現mp4Parser,但我認爲mp4Parser不寫標題關鍵字。
對於.jpg文件,我們使用代表標題的XPKeyword元數據。 如此相同的方式如何爲.mp4文件做同樣的事情。
我想要讀取和編輯(寫入)mp4元數據。特別是我想在Android中讀取/寫入標籤元數據,如下圖所示。Android:讀寫.mp4元數據 - 標籤
我搜索這個互聯網上發現mp4Parser,但我認爲mp4Parser不寫標題關鍵字。
對於.jpg文件,我們使用代表標題的XPKeyword元數據。 如此相同的方式如何爲.mp4文件做同樣的事情。
Android SDK中的類MediaMetadataRetriever檢索您的文件中的所有元數據值,你可以閱讀更多關於元數據值here。
public void readMetaData() {
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard,"/Android/data/myfile.mp4");
if (file.exists()) {
Log.i(TAG, ".mp4 file Exist");
//Added in API level 10
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(file.getAbsolutePath());
for (int i = 0; i < 1000; i++){
//only Metadata != null is printed!
if(retriever.extractMetadata(i)!=null) {
Log.i(TAG, "Metadata :: " + retriever.extractMetadata(i));
}
}
} catch (Exception e) {
Log.e(TAG, "Exception : " + e.getMessage());
}
} else {
Log.e(TAG, ".mp4 file doesn´t exist.");
}
}
編輯/寫的元數據,Android的SDK doesn't有什麼方法,可能是版權問題,但你可以使用選項,如:
https://github.com/sannies/mp4parser
我希望現在還不算太晚,但是如果你想添加/編輯/刪除MP4文件的元數據字段,你可以使用JCodec的元數據編輯類。
有一個由java API支持的CLI工具。 CLI位於org.jcodec.movtool.MetadataEditorMain,API位於org.jcodec.movtool.MetadataEditor。當你想添加一些你需要知道什麼鍵(一個或多個)它對應的元數據http://jcodec.org/docs/working_with_mp4_metadata.html
所以基本上:
瞭解更多關於它。找出一種方法是檢查已經有你需要的元數據的示例文件。爲此,您可以運行JCodec的CLI工具,將剛剛打印出所有的現有的元數據字段(值的鍵):
./metaedit <file.mp4>
然後,當你知道你想和你的工作既可以使用相同的CLI關鍵工具:
# Changes the author of the movie
./metaedit -f -si ©ART=New\ value file.mov
或通過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
從文件中刪除元數據字段:
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
將字符串轉換爲整數FOURCC您可以使用類似:
byte[] bytes = "©ART".getBytes("iso8859-1");
int fourcc =
ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt();
如果要編輯/刪除的Android元數據,您需要使用一套不同溫控功能的(因爲它的存儲不同於iTunes的元數據):
./metaedit -sk com.android.capture.fps,float=25.0 file.mp4
或可替代地通過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
我使用上面發佈的MediaMetadataRetriever代碼獲取IllegalArgumentException。 –
嗨,在哪一行? – Jorgesys
在這一行中:--retriever.setDataSource(file.getAbsolutePath()); –