Après quelques jours à poser cette question, j'ai trouvé MediaInfo qui fournit des dizaines d'informations techniques et d'étiquettes sur un fichier vidéo ou audio.
Il existe un wrapper JNI pour MediaInfo dans subs4mesource tree que je trouve très utile. Voici quelques extraits de code qui montrent comment extraire des informations à partir d'un fichier multimédia:
String fileName = "path/to/my/file";
File file = new File(fileName);
MediaInfo info = new MediaInfo();
info.open(file);
String format = info.get(MediaInfo.StreamKind.Video, i, "Format",
MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
int bitRate = info.get(MediaInfo.StreamKind.Video, i, "BitRate",
MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
float frameRate = info.get(MediaInfo.StreamKind.Video, i, "FrameRate",
MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
short width = info.get(MediaInfo.StreamKind.Video, i, "Width",
MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
int audioBitrate = info.get(MediaInfo.StreamKind.Audio, i, "BitRate",
MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
int audioChannels = info.get(MediaInfo.StreamKind.Audio, i, "Channels",
MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
S'il vous plaît noter que le code ci-dessus est un exemple de base et ne contient aucune vérification d'erreur (ce qui est une mauvaise habitude dans un vrai scénario). Notez également que les informations que vous pouvez extraire avec MediaInfo ne se limitent pas à celles mentionnées ci-dessus. Voir la sortie brute de MediaInfo pour connaître le type d'informations sur les médias que vous pouvez extraire ou lire MediaInfo C++ SDK.
De quels formats/encodages parlons-nous ici? Les gens ont différentes définitions de «commun» pour les formats de médias. – aperkins
Je veux dire les formats MPEG, DivX, XviD, Matroska, Real Video, Windows Media pour les vidéos; MP3 et AC3 pour audios. Il n'y a pas de formats spécifiques dont j'ai besoin, donc plus je supporte le format, mieux c'est. –
Subs4me est-il destiné à être utilisé uniquement pour la plate-forme Linux? quand j'ai essayé votre exemple, j'ai frappé l'exception à cause de cette ligne dans lib 'if (! (Platform.isLinux())) return;' – kitokid