doctordeploylogo
[ Prev ] [ Next ] | [ Home ] [ Sitemap ] .. -... .. -.- .-. .- ... ...

Export Audio-/Video-Collection to CSV

11/2016

Die Youngster streamen Mediainhalte ja nur noch, aber die meisten Veteranen haben die Dateien gerne lokal (dann ist auch ein Internetausfall oder Störung mal nicht so tragisch :D) Nur, wie die Übersicht über die Tausende von Files bewahren?

Eine streng hierarchische Verzeichnisstruktur hilft schon mal, aber noch besser wäre es, wenn man auch die Metatags der Audio- und Videodateien auslesen und sammeln könnte...

Hier kommt MediaInfo ins Spiel: Das Tool gibt's für alle Betriebssysteme, für Windows auch portable, und liest eben jene Meta Elements aus.

Zuerst müssen wir angeben, welche Tags auszulesen sind. Das geht über Parameter oder sinnvoller über eine Config-Datei/Template:

mitpl_audio.txt

1 
2 General;%Title%|%Performer%|%Album%|%Format%|%FileSize/String%|%Duration/String%|%Genre%|%FileName%.%FileExtension%|%FolderName%|%Recorded_Date%|%File_Created_Date%|
3 Audio;%Codec%|%BitRate/String%|%BitRateMode/String%|%Channel(s)/String%|%SamplingRate%|%Writing_Library%

mitpl_video.txt

1 
2 General;%Movie%|%Format%|%FileSize/String%|%Duration/String%|%Recorded_Date%|%Director%|%Performer%|%Audio_Language_List%|%FileName%.%FileExtension%|%FolderName%|%Description%|
3 Video;%Width%|%Height%|%BitRate/String%|%DisplayAspectRatio%|%Encoded_Date%

Hinweis: Die erste Zeile muss eine Leerzeile sein.

Beim Auslesen von großen Datenmengen gibt's zur Commandline keine Alternative, der Aufruf (für Videos) ist folgendermassen:

1 .\MediaInfo.exe --output=file://mitpl_video.txt \\srv1\media\videos\movies\*.m4v >.\mymovies.csv

Da man für Audiodateien ein anderes Template als bei Videos verwendet, bietet sich eine einfache Logik an:

mi_audiovideo.ps1

1 cd C:\apps\mediainfo
2 if (-not $args[0]) { write "please call script with argument ([a]=audio, [m]=movies, [t]=tvshows)"; exit }
3 if ($args[0] -eq "a") {
4     "Title|Performer|Album|Format|FileSize|Duration|Genre|FileName|FolderName|Recorded_Date|File_Created_Date|Codec|BitRate|BitRateMode|Channels|SamplingRate|Writing_Library" | out-file .\mymusic.csv
5     gci "\\srv1\media\music\mp3" -r -file -filter *.mp3 | % { write-host $_.fullname; .\MediaInfo.exe --output=file://mitpl_audio.txt $_.fullname | out-file .\mymusic.csv -append }
6     }
7 if ($args[0] -eq "m") {
8    "MovieName|Format|FileSize|Duration|RecordedDate|Director|Performer|AudioLanguageList|FileName|FolderName|Description|Width|Height|BitRate|DisplayAspectRatio|Encoded_Date" | out-file .\myvideo.csv -encoding ascii
9    gci "\\srv1\media\videos\movies" -r -file -filter *.m4v | % { write-host $_.fullname; .\MediaInfo.exe --output=file://mitpl_video.txt $_.fullname | out-file .\myvideo.csv -append -encoding ascii}
10    }
11 if ($args[0] -eq "t") {
12    "MovieName|Format|FileSize|Duration|RecordedDate|Director|Performer|AudioLanguageList|FileName|FolderName|Description|Width|Height|BitRate|DisplayAspectRatio|Encoded_Date" | out-file .\mytvshows.csv -encoding ascii
13    gci "\\srv1\media\videos\tv-shows" -r -file -filter *.m4v | % { write-host $_.fullname; .\MediaInfo.exe --output=file://mitpl_video.txt $_.fullname | out-file .\mytvshows.csv -append -encoding ascii}
14    }

Je nach übergebenem Parameter werden dann Musik, Filme oder TV Shows ausgelesen und in CSV Dateien gespeichert. Mit Powershell kann man sich auch einen schnellen Überblick verschaffen:

1 ipcsv .\mymovies.csv -delimiter "|"

Die Daten können auch in eine echte Datenbank (SQLServer, MySQL, SQLite) importiert werden und man kann sich z.B. eine View über alle Mediendateien basteln:

1 CREATE VIEW "allmedia" as select * from tblMusic union select * from tblMovies union select * from tblTVShows

Performanceoptimierung als Bastelaufgabe für Zuhause:

Feststellen wann die CSV zuletzt geschrieben wurde und nur neuere Mediendateien auslesen und am Ende der CSV hinzufügen.