scoorpyn
Goto Top

Nochmal Filmliste leider

Hallo ich habe leider jetzt gerade das Problem bei meiner Filmliste, dass ich die Bildhöhe und Bildbreite nicht anzeigen lassen kann, weil das Format der Filme Apple Quicktime Format ist und diese nicht in den Eigenschaften Details angezeigt werden. Die Filmliste soll den Namen des Filmes, den relativen Pfad (falls vorhanden) sowie die Bildhöhe und Breite des Films in eine .TXT Datei eintragen.
Vielen Dank an colinardo das er mir so gut geholfen hat :D

Nun habe ich diese Details mit dem Programm MediaInfo ausgelesen, mir immer von einem Film anzeigen lassen, wie kann ich den Code:
 function Add-ExtendedFileProperties{
  <#
      .SYNOPSIS
         Fügt erweiterte Eigenschaften von Dateien an das Objekt in der Pipline hinzu
      .DESCRIPTION
         Extrahiert erweiterte Eigenschaften von Dateien wie z.B. Exif-Daten, Musik- bzw. Filmdetails
      .EXAMPLE 
             Get-ChildItem "C:\Temp" | Add-ExtendedFileProperties -PropertyExtended  
 "Bildhöhe","Bildbreite","Bitrate" | ft Name,Bildhöhe,Bildbreite,Bitrate  
             Fügt alle nur die Eigenschaften "Bildhöhe","Bildbreite","Bitrate" als  
 zusätzliche Spalten dem Objekt in der Pipline hinzu
      .EXAMPLE
             Get-ChildItem "C:\Temp" | Add-ExtendedFileProperties | fl *  
             Fügt alle verfügbaren erweiterten Eigenschaften dem Objekt in der Pipline hinzu
      .PARAMETER PropertyExtended
         Mit diesem Parameter geben sie eine Komma-Separierte Liste von Eigenschaften an welche sie erhalten möchten.
             -PropertyExtended "Bildhöhe","Bildbreite","Bitrate"  
 #>
     param(
         [Parameter(Mandatory=$true,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
         $fileItem,
         [String[]] $PropertyExtended = "ALL"  
     )
     begin
     {
         $shellObject = New-Object -Com Shell.Application
         $itemProperties = $null
     }
 
     process
     {
         if($fileItem.PsIsContainer)
         {
             $fileItem
             return
         }
         $directoryName = $fileItem.DirectoryName
         $filename = $fileItem.Name
 
         $folderObject = $shellObject.NameSpace($directoryName)
         $item = $folderObject.ParseName($filename)
 
         if(-not $itemProperties)
         {
             $itemProperties = @{}
             $counter = 0
             $columnName = ""  
             if ($PropertyExtended -eq "ALL"){  
                  #get all properties
                 do {
                     $columnName = $folderObject.GetDetailsOf($folderObject.Items, $counter)
                     if($columnName) { $itemProperties[$counter] = $columnName }
                     $counter++
                 }while($columnName)
             }else{
                 #get user defined properties
                 do {
                     $columnName = $folderObject.GetDetailsOf($folderObject.Items, $counter)
                     foreach($name in $PropertyExtended){
                         if ($columnName.toLower() -eq $name.toLower()){
                             $itemProperties[$counter] = $columnName
                         }
                     }
                     $counter++
                 }while($columnName)
             }
         }
 
         foreach($itemProperty in $itemProperties.Keys)
         {
             $fileItem | Add-Member NoteProperty $itemProperties[$itemProperty] `
                 $folderObject.GetDetailsOf($item, $itemProperty) -ErrorAction `
                 SilentlyContinue
         }
         $fileItem
     }
 }
 
 $startDir = "\\Server\Freigabe"  
 $filmliste = "C:\filmliste.txt"  
 Get-ChildItem $startDir -Recurse | ?{$_.PSIsContainer -eq $false} | Add-ExtendedFileProperties -PropertyExtended
 "Bildhöhe","Bildbreite" | select Name,@{Name="Relativer Pfad";e={$relDir =  
 $_.DirectoryName.Replace($startDir,""); if ($relDir -ne ""){echo  
 ".$relDir"}}},Bildhöhe,Bildbreite | out-file $filmliste -Encoding UTF8  

So umändern, dass das die werte von Bildhöhe und Bildbreite mit MediaInfo ausliest und diese dann mit in die Filmliste einträgt?

Content-Key: 224044

Url: https://administrator.de/contentid/224044

Printed on: April 19, 2024 at 10:04 o'clock

Member: colinardo
colinardo Dec 09, 2013 updated at 10:16:44 (UTC)
Goto Top
Hello again scoorpyn,
habe mir mal die MediaInfo-Ausgabe angesehen und ein paar Zeilen dazu geschrieben.
Zuerst lädst du dir die CommandLine-Version von MediaInfo hier herunter:http://mediaarea.net/download/binary/mediainfo/0.7.65/MediaInfo_CLI_0.7 ...
Dann musst du in Zeile 83 des folgenden Scripts den Pfad zur heruntergeladenen "MediaInfo.exe" eintragen, und deine Pfad natürlich anpassen.
function Add-ExtendedFileProperties{
 <#
     .SYNOPSIS
        Fügt erweiterte Eigenschaften von Dateien an das Objekt in der Pipline hinzu
     .DESCRIPTION
        Extrahiert erweiterte Eigenschaften von Dateien wie z.B. Exif-Daten, Musik- bzw. Filmdetails
     .EXAMPLE 
            Get-ChildItem "C:\Temp" | Add-ExtendedFileProperties -PropertyExtended "Bildhöhe","Bildbreite","Bitrate" | ft Name,Bildhöhe,Bildbreite,Bitrate  
            Fügt alle nur die Eigenschaften "Bildhöhe","Bildbreite","Bitrate" als zusätzliche Spalten dem Objekt in der Pipline hinzu  
     .EXAMPLE
            Get-ChildItem "C:\Temp" | Add-ExtendedFileProperties | fl *  
            Fügt alle verfügbaren erweiterten Eigenschaften dem Objekt in der Pipline hinzu
     .PARAMETER PropertyExtended
        Mit diesem Parameter geben sie eine Komma-Separierte Liste von Eigenschaften an welche sie erhalten möchten.
            -PropertyExtended "Bildhöhe","Bildbreite","Bitrate"  
#>
    param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
        $fileItem,
        [String[]] $PropertyExtended = "ALL"  
    )
    begin
    {
        $shellObject = New-Object -Com Shell.Application
        $itemProperties = $null
    }

    process
    {
        if($fileItem.PsIsContainer)
        {
            $fileItem
            return
        }
        $directoryName = $fileItem.DirectoryName
        $filename = $fileItem.Name

        $folderObject = $shellObject.NameSpace($directoryName)
        $item = $folderObject.ParseName($filename)

        if(-not $itemProperties)
        {
            $itemProperties = @{}
            $counter = 0
            $columnName = ""  
            if ($PropertyExtended -eq "ALL"){  
                 #get all properties
                do {
                    $columnName = $folderObject.GetDetailsOf($folderObject.Items, $counter)
                    if($columnName) { $itemProperties[$counter] = $columnName }
                    $counter++
                }while($columnName)
            }else{
                #get user defined properties
                do {
                    $columnName = $folderObject.GetDetailsOf($folderObject.Items, $counter)
                    foreach($name in $PropertyExtended){
                        if ($columnName.toLower() -eq $name.toLower()){
                            $itemProperties[$counter] = $columnName
                        }
                    }
                    $counter++
                }while($columnName)
            }
        }

        foreach($itemProperty in $itemProperties.Keys)
        {
            $fileItem | Add-Member NoteProperty $itemProperties[$itemProperty] `
                $folderObject.GetDetailsOf($item, $itemProperty) -ErrorAction `
                SilentlyContinue
        }
        $fileItem
    }
}

Function getMediaInfo($strPath){
    $info = & $mediaInfoPath $strPath | ?{$_ -match "(Width|Height)"} | select -First 2 | %{$_.Split(":")[1].trim().Split(" ")}  
    $obj = New-Object PSObject -Property @{"Bildbreite"=$info;"Bildhöhe"=$info[1]} -ErrorAction SilentlyContinue  
    $obj
}

$mediaInfoPath = "C:\Program Files (x86)\K-Lite Codec Pack\Tools\cmd\mediainfo.exe"  
$startDir = "\\Server\Freigabe"  
$filmliste = "C:\filmliste.txt"  
$list = Get-ChildItem $startDir -Recurse | ?{$_.PSIsContainer -eq $false} | Add-ExtendedFileProperties -PropertyExtended "Bildhöhe","Bildbreite" | select Name,Fullname,@{Name="Relativer Pfad";e={$relDir = $_.DirectoryName.Replace($startDir,""); if ($relDir -ne ""){echo ".$relDir"}}},Bildhöhe,Bildbreite  
$list | %{if($_.Bildbreite -eq ""){$objInfo = getMediaInfo $_.FullName;$_.Bildbreite = $objInfo.Bildbreite;$_.Bildhöhe = $objInfo.Bildhöhe};$_} | select "Name","Relativer Pfad","Bildhöhe","Bildbreite" | ft -AutoSize | out-file $filmliste -Encoding UTF8  
probiers mal aus...

Grüße Uwe
Member: Endoro
Endoro Dec 09, 2013 at 12:44:13 (UTC)
Goto Top
Hey, nur der Vollständigkeit halber- es geht auch als einfache Batch:
@ECHO OFF &SETLOCAL
cd videofolder
for %%a in (*) do (
	set "fname=%%~a"  
	for /f "delims=" %%b in ('mediainfo "--inform=General;%%Movie%%" "%%~a"') do set "title=%%b"  
	for /f "delims=" %%b in ('mediainfo "--inform=Video;%%Width%%x%%Height%%" "%%~a"') do set "resolution=%%b"  
	SETLOCAL ENABLEDELAYEDEXPANSION
	echo("!fname!","%cd%","!resolution!","!title!"  
	endlocal
)
lg.