2016-08-04 11 views
0

私は、特定のサイズを超えるすべてのビデオファイルを再帰的に検索してサイズを変更するpowershellスクリプトを作成しました。PowershellとFFMPEG - FFMPEGが実行されない

私のスクリプトはFFMPEGを実際には実行しないので、画面上で実行するコマンドが表示されるだけなので、ここで何かが分からないように感じます。私は解決策に直面するだろうと確信しています。私は、スクリプトを実行したときに

$SearchPath = "N:\baseball" 

$oldVideos = Get-ChildItem -Include @("*.mkv", "*.mov", "*.mpg", "*.wmv", "*.avi") -Path $SearchPath -Recurse | where-object {$_.length -gt 500MB}; 

Set-Location -Path 'C:\Program Files\ffmpeg\bin'; 

foreach ($OldVideo in $oldVideos) 
{ 
    $outputfolder = "O:\resized" 
    $oldname = Get-Item $oldvideo | Select-Object -ExpandProperty BaseName 
    $suffix = "_resized.mp4" 
    $newname = "$($oldname)_$($suffix)" 
    $ffmpeg = ".'C:\Program Files\ffmpeg\bin\ffmpeg.exe'" 
    $arguments = " -i `"$($OldVideo)`" -vf scale=720:trunc(ow/a/2)*2 -c:v libx264 -f mp4 `"$outputfolder\$newname`" -y" 
    $ffmpeg + $arguments} 

はここで画面に実際の出力です .'C:\プログラムファイル\のffmpegの\ビン\のffmpeg.exe」-i "N:\野球\ \ 067.MOVを打ちます" -vf scale = 720:trunc(ow/a/2)* 2 -c:v libx264 -f mp4 "O:¥resized¥067__resized.mp4" -y

このコマンドは実行する必要があります窓)。

+0

文字列変数を作成するだけです。あなたは実際にこれらの変数を実際に使用しません。 –

+0

最後に私は$ ffmpeg + $引数を使用しています –

+0

あなたはこのために 'invoke-expression'を使うことができます –

答えて

0

...私はカップルの他のスクリプトを見て、それらがどのように実行された...私は、これは非常に複雑作っように思えます。 EDIT:オリジナルを削除して元の場所に移動するためのログと追加の機能を追加しました。私はおそらく、ムービーの長さが同じかどうかを確認するためにエラー処理を追加する必要があります。注:ロギングは正しく機能しませんが、スクリプトの中核部分(500MBを超えるムービーを見つけたり、サイズを変更したり、元のフォルダに戻ったり、作品を削除したりします)。私はまた、ムービーファイルに2つのチェックを追加する必要があります。 1を使用して、サイズ変更されたムービーが実際に小さいかどうか、ムービーの期間が同じかどうかを確認します。

$env:Path += ";C:\Program Files\ffmpeg\bin\" 

function Write-Log 
    { 
     param 
     (
      [string]$strMessage 
     ) 

      $LogDir = 'L:\conlogs\' 
      $Logfile = "\Conversion-Log.txt" 
      $Path = $logdir + $logfile 
      [string]$strDate = get-date 
      add-content -path $Path -value ($strDate + "`t:`t"+ $strMessage) 
} 

$SearchPath = "N:\baseball" 

$oldVideos = Get-ChildItem -Include @("*.mkv", "*.mov", "*.mpg", "*.wmv", "*.avi","*.mp4") -Path $SearchPath -Recurse | where-object {$_.length -gt 500MB} | where-object {$_.Name -NotMatch "resized"}; 

foreach ($OldVideo in $oldVideos) 
{ $outputfolder = "O:\resized" 
    $oldname = Get-Item $oldvideo | Select-Object -ExpandProperty BaseName 
    $suffix = "resized.mp4" 
    $newname = "$($oldname)_$($suffix)" 
    ffmpeg.exe -i $oldvideo.FullName -vf "scale=720:trunc(ow/a/2)*2" -c:v libx264 -f mp4 -y "$outputfolder\$newname" 

    $OriginalSize = (Get-Item $OldVideo).length 
    $ConvertedSize = (Get-Item $outputfolder\$Newname).length 

    If($ConvertedSize -le $OriginalSize) 
    { 
     Write-Log "$($NewVideo) has been successfully resized" 
     Remove-Item $OldVideo 

     If (Test-Path $OldVideo) 
     { 
      write-log "Unable to remove $($OldVideo)" 
     } 

     Else 
     { 
      write-log "Successfully removed $($OldVideo)" 
     } 
     Elseif 
     { 
      write-log "You dun goofed!" 
     } 

     $oldvidpath = [System.IO.Path]::GetDirectoryName($oldvideo) 
     Move-Item "$outputfolder\$Newname" -Destination $oldvidpath 

     If (Test-Path "$oldvidpath\$newname") 
     { 
      write-log "Unable to move $($newname)" 
     } 

     Else 
     { 
      write-log "Successfully moved $($OldVideo)" 
     } 

     Elseif 
     { 
      write-log "You dun goofed!" 
     } 
    } 
} 
2

今は2つの文字列を結合しているだけなので、組み合わせた文字列を出力します。あなたが求めるものを正確にやっています。これにそれを変更してみてください:私は最終的にこの作業を得た

$SearchPath = "N:\baseball" 

$oldVideos = Get-ChildItem -Include @("*.mkv", "*.mov", "*.mpg", "*.wmv", "*.avi") -Path $SearchPath -Recurse | where-object {$_.length -gt 500MB}; 

Set-Location -Path 'C:\Program Files\ffmpeg\bin'; 

foreach ($OldVideo in $oldVideos) 
{ 
    $outputfolder = "O:\resized" 
    $oldname = Get-Item $oldvideo | Select-Object -ExpandProperty BaseName 
    $suffix = "_resized.mp4" 
    $newname = "$($oldname)_$($suffix)" 
    $ffmpeg = "'C:\Program Files\ffmpeg\bin\ffmpeg.exe'" 
    $arguments = " -i `"$($OldVideo)`" -vf scale=720:trunc(ow/a/2)*2 -c:v libx264 -f mp4 `"$outputfolder\$newname`" -y" 
    & $ffmpeg $arguments} 
+0

右折してください。ここで問題は、$ OldVideo出力が引用符で囲まれなくなるため、ファイル名またはディレクトリ名にスペースが含まれているとスクリプトが異常終了することです。 –

+0

それでも引用符を付ける必要があります。その部分はまったく変更しないでください。 – TheMadTechnician

関連する問題