3

優秀な Windows システム管理者として、ようやく PowerShell の学習に取り掛かりました。そうは言っても、私は自分が何をしているのかわかりません(驚き、驚き)。

実稼働環境から遠く離れた自宅で PowerShell をいじってみるのは、私にとって良い学習体験になると思いました。最近、FFMPEG を使用してすべての .mkv ファイルを .mp4 に変換し始めたので、Plex を介して PlayStation 3 の再生サポートを向上させることができ、これは良い学習体験になると考えました。

私が実行しているコマンドは次のとおりです。

ffmpeg -i OldVideoName.mkv -vcodec copy -acodec ac3 OldVideoName.mp4

私が欲しいのは、PowerShell スクリプトを 1 回実行し、.mkv ファイル (Get-ChildItem ".*.mkv") のフォルダーとすべてのサブフォルダーをスキャンし、上記のコマンドを使用してそれらを .mp4 にトランスコードし、配置することです。同じ命名スキームの .mkv と同じ場所にあります。

D:\Videos をターゲット ディレクトリとしてスクリプトを実行する例:

D:\Videos\home_dvr\movies\video1.mkv --> D:\Videos\home_dvr\video1.mp4 D:\Videos\home_dvr\tv\video2.mkv --> D:\Videos\home_dvr\tv\video2 .mp4

ご想像のとおり、私は一生それを理解することはできません。あきらめる前の最新の試みは次のとおりです。

    $oldvid = Get-ChildItem .\*.mkv -Recurse
    $newvid = $oldvid.Name.split(‘.’)[0]; ForEach-Object {
            .\ffmpeg.exe -i $oldvid -y -vcodec copy -acodec ac3 $newvid".mp4”
    }

どんな助けでも大歓迎です!

4

2 に答える 2

10

これを試して:

$oldvids = Get-ChildItem *.mkv -Recurse
foreach ($oldvid in $oldvids) {
    $newvid = [io.path]::ChangeExtension($oldvid.FullName, '.mp4')
    .\ffmpeg.exe -i $oldvid.FullName -y -vcodec copy -acodec ac3 $newvid
}

$oldvid は .NET FileInfo オブジェクトであり、文字列に変換する必要がある場合は、パス全体ではなくファイル名だけにすることができます。現在のディレクトリにないファイルでは機能しません。FullNameそのため、プロパティを使用して完全なパスを取得してください。

于 2013-08-20T05:28:58.703 に答える