
Metadata adalah merupakan gabungan dari dua kata, yaitu “meta” yang berarti deskripsi atau definisi mendasar, dan tentu saja “data”, yaitu sekumpulan informasi. Pengertian metadata berisi ringkasan detail mendasar tentang suatu data. Metadata bisa membuat pencarian dan pengolahan data lebih mudah dan cepat. Hal ini sering ditemukan untuk spreadsheet, video, foto atau gambar, dan bahkan laman web.
Saat ini banyak sekali jenis format file yang ditandai dengan dengan beragam extension nya, sebagai contoh untuk dokumen saja ada *.txt, *.docx, *.odt. Untuk file music seperti .*wav; *.mp3; * semuanya dibuat berbeda2 sesuai dengan encode-decode. Tentu dengan membaca metadatanya akan mempermudah kita dalam melakukan pengelompokannya. Library yang mampu membaca beragam jenis file yang berbeda-beda yang akan kita gunakan berbasis opensource yaitu Apache Tika.
Apache Tika
Toolkit Apache Tika™ mendeteksi dan mengekstrak metadata dan teks dari lebih dari seribu jenis file yang berbeda (seperti PPT, XLS, dan PDF). Semua jenis file ini dapat diuraikan melalui satu antarmuka, menjadikan Tika berguna untuk pengindeksan mesin pencari, analisis konten, terjemahan, dan banyak lagi. Kalian bisa download di https://tika.apache.org/download.html
Kekurangannya menggunakan Apache Tika cuman satu saja! yaitu ukuran library yang sangat besar yaitu 90 Mb hal ini wajar saja sih! karena mampu melakukan pembaca metadata dengan beragam jenisnya!
Parser dan Detector Metadata
Apache TIka menggunakan Parser dan Detector sebagai interface nya. Ketika saya sedang mencari library untuk memutar file mp3 http://jacomp3player.sourceforge.net/guide.html yang simple namun untuk mengetahui detail informasi metadatanya kita butuh library yang lain juga. Membaca Metadata pada file digunakan untuk memberikan informasi ke pengguna secara cepat. Yuk kita apache Tika dengan kode berikut, saya ambil file mp3 dari youtube
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser; import org.apache.tika.parser.mp3.Mp3Parser; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class NewMain { /** * @param args the command line arguments */ public static void main(String[] args) throws InterruptedException { // TODO code application logic here NewMain.demo(); } public static void demo(){ String fileLocation = "D:/y2mate.com - Wings Sejati 1990 YouTube.mp3"; try { InputStream input = new FileInputStream(new File(fileLocation)); ContentHandler handler = (ContentHandler) new DefaultHandler(); Metadata metadata = new Metadata(); Parser parser = new Mp3Parser(); ParseContext parseCtx = new ParseContext(); parser.parse(input, handler, metadata, parseCtx); input.close(); // List all metadata String[] metadataNames = metadata.names(); for(String name : metadataNames){ System.out.println(name + ": " + metadata.get(name)); } // Retrieve the necessary info from metadata // Names - title, xmpDM:artist etc. - mentioned below may differ based System.out.println("----------------------------------------------"); System.out.println("Title: " + metadata.get("title")); System.out.println("Artists: " + metadata.get("xmpDM:artist")); System.out.println("Composer : "+metadata.get("xmpDM:composer")); System.out.println("Genre : "+metadata.get("xmpDM:genre")); System.out.println("Album : "+metadata.get("xmpDM:album")); } catch (FileNotFoundException e) { } catch (IOException | SAXException | TikaException e) { } } }
hasilnya
xmpDM:audioSampleRate: 44100 channels: 2 xmpDM:audioCompressor: MP3 xmpDM:audioChannelType: Stereo version: MPEG 3 Layer III Version 1 xmpDM:duration: 307.6924133300781 Content-Type: audio/mpeg samplerate: 44100 ---------------------------------------------- Title: null Artists: null Composer : null Genre : null Album : null
Membaca metadata file gambar
Sesuai dengan penjelasannya diatas, interface nya Apache Tika menggunakan parser, maka kita bisa mengubah jenis parser yang digunakan. Misalkan saja untuk Membaca Metadata file jpeg, maka ubah saja Parser parser = new Mp3Parser();
menjadi Parser parser = new JpegParser();
Hasilnya sangat lengkap sekali bahkan kita tahu
- asal device untuk memotretnya
- tanggal berapa diambil gambarnya
Exif SubIFD:ISO Speed Ratings: 100 Number of Tables: 4 Huffman tables Compression Type: Baseline Exif SubIFD:Interoperability Version: Number of Components: 3 Component 2: Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert Component 1: Y component: Quantization table 0, Sampling factors 2 horiz/2 vert Exif SubIFD:Exif Image Width: 0 pixels Exif IFD0:X Resolution: 72 dots per inch tiff:ResolutionUnit: Inch Exif SubIFD:Scene Type: Unknown (0) Exif SubIFD:Exposure Mode: Auto exposure X Resolution: 1 dot tiff:Make: OPPO Exif SubIFD:User Comment: oppo_0 Component 3: Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert Version: 1.1 Exif SubIFD:Components Configuration: YCbCr Exif SubIFD:Exposure Bias Value: 0 EV Exif SubIFD:Metering Mode: Unknown Exif SubIFD:White Balance Mode: Auto white balance tiff:BitsPerSample: 8 Exif SubIFD:Sub-Sec Time Original: 980000 exif:FNumber: 1.8 Exif IFD0:YCbCr Positioning: Center of pixel array Exif SubIFD:Shutter Speed Value: 1 sec Exif IFD0:Orientation: Top, left side (Horizontal / normal) tiff:Orientation: 1 Exif SubIFD:F-Number: f/1.8 exif:FocalLength: 4.05 Exif IFD0:Date/Time: 2021:09:03 16:39:07 tiff:YResolution: 72.0 Y Resolution: 1 dot Exif SubIFD:Interoperability Index: Unknown () Data Precision: 8 bits Exif SubIFD:Flash: Flash did not fire tiff:ImageLength: 0 Thumbnail Height Pixels: 0 Exif IFD0:Model: OPPO A9 2020 dcterms:created: 2021-09-03T23:39:07 dcterms:modified: 2021-09-03T23:39:07 Exif SubIFD:Sub-Sec Time: 980000 exif:Flash: false exif:ExposureTime: 0.002645 Exif SubIFD:Color Space: Undefined Exif SubIFD:Focal Length 35: Unknown Exif IFD0:Image Height: 3000 pixels File Size: 3935372 bytes Exif SubIFD:Exposure Time: 529/200000 sec Exif SubIFD:Exif Version: 2.10 Exif IFD0:Image Width: 4000 pixels Exif SubIFD:Focal Length: 4 mm File Name: apache-tika-9823396331204732870.tmp Exif IFD0:Resolution Unit: Inch Exif SubIFD:Date/Time Original: 2021:09:03 16:39:07 Exif SubIFD:Sub-Sec Time Digitized: 980000 Resolution Units: none Exif SubIFD:Max Aperture Value: f/1.0 Exif SubIFD:Makernote: File Modified Date: Sat Feb 12 06:05:54 +07:00 2022 tiff:XResolution: 72.0 Exif SubIFD:Sensing Method: Unknown (0) exif:DateTimeOriginal: 2021-09-03T23:39:07 Image Height: 3000 pixels Thumbnail Width Pixels: 0 Exif SubIFD:FlashPix Version: 1.00 Exif SubIFD:Exif Image Height: 0 pixels Image Width: 4000 pixels tiff:Model: OPPO A9 2020 Exif SubIFD:Brightness Value: 0.0 exif:IsoSpeedRatings: 100 Exif SubIFD:Exposure Program: Unknown (0) Exif IFD0:Make: OPPO Exif SubIFD:Aperture Value: f/1.5 Exif SubIFD:Date/Time Digitized: 2021:09:03 16:39:07 tiff:ImageWidth: 0 Exif IFD0:Y Resolution: 72 dots per inch
Lebih lengkapnya kalian bisa menggunakan parser berikut sesuai keperluan
Parser | Package | Description |
---|---|---|
AppleSingleFileParser | org.apache.tika.parser.apple | It is used to parse apple file. |
ClassParser | org.apache.tika.parser.asm | It is used to parse class file. |
AudioParser | org.apache.tika.parser.audio | It is used to parse audio file. |
MidiParser | org.apache.tika.parser.audio | It is used to parse midi file. |
Pkcs7Parser | org.apache.tika.parser.crypto | It is used to parse pkcs7. |
TSDParser | org.apache.tika.parser.crypto | It is used to parse tsd. |
DWGParser | org.apache.tika.parser.dwg | It is used to parse dwg. |
EnviHeaderParser | org.apache.tika.parser.envi | It is used to parse envi. |
EpubParser | org.apache.tika.parser.epub | It is used to parse epub. |
ExecutableParser | org.apache.tika.parser.executable | It is used to parse executable. |
HtmlParser | org.apache.tika.parser.html | It is used to parse html file. |
ImageParser | org.apache.tika.parser.image | It is used to parse image file. |
WebPParser | org.apache.tika.parser.image | It is used to parse webp. |
IptcAnpaParser | org.apache.tika.parser.iptc | It is used to parse iptcanpa. |
JpegParser | org.apache.tika.parser.jpeg | It is used to parse jpeg. |
DBFParser | org.apache.tika.parser.dbf | It is used to parse dbf file. |
Mp3Parser | org.apache.tika.parser.mp3 | It is used to parse mp3. |
MP4Parser | org.apache.tika.parser.mp4 | It is used to parse mp4. |
PDFParser | org.apache.tika.parser.pdf | It is used to parse pdf file. |
ref:
https://stackoverflow.com/questions/1645803/how-to-read-mp3-file-tags