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 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 nText = info.getCount(MediaInfo_stream_t.MediaInfo_Stream_Text); 46 47 if (nText == 0 && nVideo == 0 && nAudio == 0) { 48 writeln("Found no media info on this file."); 49 return 0; 50 } 51 52 writefln("---%s---", info.get(MediaInfo_stream_t.MediaInfo_Stream_General, 0, "FileName")); 53 for (uint i = 0; i < nVideo; i++) 54 { 55 writefln("Video track %s:", i); 56 writefln(" Resolution: %s x %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, 57 "Width"), info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Height")); 58 writefln(" FPS: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "FrameRate")); 59 writefln(" Duration: %s", 60 info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Duration/String")); 61 string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "BitRate"); 62 if (brate != "") 63 writefln(" Bitrate: %s kbps", to!long(brate) / 1024); 64 writefln(" Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Video, i, "Format")); 65 } 66 67 for (uint i = 0; i < nAudio; i++) 68 { 69 writefln("Audio track %s:", i); 70 std.stdio.writef(" Channels: %s", 71 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Channel(s)")); 72 string cpos = info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "ChannelPositions"); 73 if (cpos != "") 74 writefln(" (%s)", cpos); 75 else 76 writeln(); 77 writefln(" Duration: %s", 78 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Duration/String")); 79 string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "BitRate"); 80 if (brate != "") 81 { 82 writefln(" Bitrate: %s kbps (%s)", to!long(brate) / 1024, 83 info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "BitRate_Mode")); 84 } 85 writefln(" Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Audio, i, "Format")); 86 } 87 88 for (uint i = 0; i < nText; i++) 89 { 90 writefln("Text track %s:", i); 91 writefln(" Language: %s", 92 info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Language")); 93 writefln(" FPS: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "FrameRate")); 94 writefln(" Duration: %s", 95 info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Duration/String")); 96 string brate = info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "BitRate"); 97 if (brate != "") 98 writefln(" Bitrate: %s kbps", to!long(brate) / 1024); 99 writefln(" Format: %s", info.get(MediaInfo_stream_t.MediaInfo_Stream_Text, i, "Format")); 100 } 101 return 0; 102 }