1 module main; 2 3 import std.conv; 4 import std.stdio; 5 6 import mediainfodll; 7 import mediainfo; 8 9 int main(string[] args) 10 { 11 string fileName; 12 assert(args.length >= 2, "Pass a filename to scan to the program."); 13 fileName = args[1]; 14 15 //~ auto rc0 = MediaInfoDLL_Load(); 16 //~ writeln("Loader result: ", rc0); 17 //~ auto rc1 = MediaInfoDLL_IsLoaded(); 18 //~ writeln("IsLoaded result:", rc1); 19 //~ MediaInfoDLL_UnLoad(); 20 21 auto info = MediaInfo(); 22 23 string vstring = info.option("Info_Version", "0.7.38.0;DTest;0.1"); 24 writefln("Found version %s", vstring); 25 if (vstring == "") 26 throw new Exception("Incompatible mediainfo version"); 27 28 //~ string infoParams = info.option("Info_Parameters"); 29 //~ writeln(infoParams); 30 //~ string infoCodecs = info.option("Info_Codecs"); 31 //~ writeln(infoCodecs); 32 const string infoInternet = info.option("Internet", "No"); 33 //~ writeln(infoInternet); 34 35 info.open(fileName); 36 scope (exit) 37 { 38 info.close(); 39 } 40 //~ string inform = info.inform(); 41 //~ writefln("Got inform: %s", inform); 42 43 const ulong nVideo = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Video); 44 const ulong nAudio = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Audio); 45 const ulong nImage = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Image); 46 const ulong nText = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Text); 47 48 if (nText == 0 && nVideo == 0 && nImage == 0 && nAudio == 0) { 49 writeln("Found no media info on this file."); 50 return 0; 51 } 52 53 writefln("---%s---", info.get(MediaInfo_stream_t.MediaInfo_Stream_General, 0, "FileName")); 54 for (uint i = 0; i < nVideo; i++) 55 { 56 writefln("Video track %s:", i); 57 writefln(" Resolution: %s x %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, 58 "Width"), info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Height")); 59 writefln(" FPS: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "FrameRate")); 60 writefln(" Duration: %s", 61 info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Duration/String")); 62 string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "BitRate"); 63 if (brate != "") 64 writefln(" Bitrate: %s kbps", to!long(brate) / 1024); 65 writefln(" Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Format")); 66 } 67 68 for (uint i = 0; i < nAudio; i++) 69 { 70 writefln("Audio track %s:", i); 71 writef(" Channels: %s", 72 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Channel(s)")); 73 string cpos = info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "ChannelPositions"); 74 if (cpos != "") 75 writefln(" (%s)", cpos); 76 else 77 writeln(); 78 writefln(" Duration: %s", 79 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Duration/String")); 80 string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "BitRate"); 81 if (brate != "") 82 { 83 writefln(" Bitrate: %s kbps (%s)", to!long(brate) / 1024, 84 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "BitRate_Mode")); 85 } 86 writefln(" Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Format")); 87 } 88 89 for (uint i = 0; i < nImage; i++) 90 { 91 writefln("Image info %s:", i); 92 writefln(" Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Image, i, "Format")); 93 writefln(" Width: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Image, i, "Width")); 94 writefln(" Height: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Image, i, "Height")); 95 writefln(" Inform:\n %s", info.inform()); 96 } 97 98 for (uint i = 0; i < nText; i++) 99 { 100 writefln("Text track %s:", i); 101 writefln(" Language: %s", 102 info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Language")); 103 writefln(" FPS: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "FrameRate")); 104 writefln(" Duration: %s", 105 info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Duration/String")); 106 string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "BitRate"); 107 if (brate != "") 108 writefln(" Bitrate: %s kbps", to!long(brate) / 1024); 109 writefln(" Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Format")); 110 } 111 return 0; 112 }