2016-04-30 88 views
6

mp4メタデータを読み込み、編集(書き込み)したいと思います。特に、下記の図のようにタグのメタデータをアンドロイドで読み書きしたいと思います。Android:読み込みと書き込み.mp4メタデータ - タグ

Mp4 Metadata Picture

私は、インターネット上で、この検索とmp4Parserを見つけましたが、私はmp4Parserタイトルのキーワードを書いていないと思います。

.jpgファイルの場合、タイトルを表すXPKeywordメタデータを使用します。 同じように、.mp4ファイルについても同じことを行う方法。

答えて

7

の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."); 
    } 
} 

enter image description here

のAndroid SDKがdoesn'tおそらく、著作権の問題により、任意の方法を持っていますが、あなたのようなオプションを使用することができ、/書き込みメタデータを編集するには、次の

https://github.com/sannies/mp4parser

http://multimedia.cx/eggs/supplying-ffmpeg-with-metadata/

https://github.com/bytedeco/javacv/blob/master/src/main/java/org/bytedeco/javacv/FFmpegFrameRecorder.java

+0

上記のMediaMetadataRetrieverコードを使用してIllegalArgumentExceptionを取得しています。 –

+0

こんにちは、どのラインですか? – Jorgesys

+0

この行には: - retriever.setDataSource(file.getAbsolutePath()); –

0

私はそれが遅すぎることはないが、MP4ファイルのメタデータフィールドを追加/編集/削除したい場合は、JCodecのメタデータ編集クラスを使用することができます。

Java APIに基づいたCLIツールがあります。 CLIはorg.jcodec.movtool.MetadataEditorMainにあり、APIはorg.jcodec.movtool.MetadataEditorにあります。

それについて続きを読む:あなたは、いくつかのメタデータを追加したいときhttp://jcodec.org/docs/working_with_mp4_metadata.html

だから基本的にはあなたはそれが何に該当するキー(複数可)を知る必要があります。見つけ出す1つの方法は、必要なメタデータをすでに持っているサンプルファイルを調べることです。あなたは同じCLIを使用するか、あなたと一緒に仕事をしたいキーを知っている次に

./metaedit <file.mp4> 

:このためには、単に既存のすべてのメタデータフィールド(値とキー)をプリントアウトすることをJCodecのCLIツールを実行することができますツール:ファイルからのメタデータフィールドを削除するには

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 

# Changes the author of the movie 
./metaedit -f -si ©ART=New\ value file.mov 

またはJava APIを経由して同じこと

あなたがのようなものを使用することができますFOURCC 0
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 

は、文字列を整数に変換するには:

byte[] bytes = "©ART".getBytes("iso8859-1"); 
int fourcc = 
    ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt(); 

編集したい場合は/あなたはそれが保存されているので(fucntionの異なるセットを使用する必要がありますアンドロイドのメタデータを削除します異なっ)iTunesのメタデータより:代わり

./metaedit -sk com.android.capture.fps,float=25.0 file.mp4 

OR 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 
関連する問題