PowerShell-Skript ffmpeg
Als der gute Windows-Systeme-Administrator, das bin ich, ich bin endlich um zu lernen PowerShell. Mit diesem wird gesagt, ich habe keine Ahnung, was ich Tue (überraschung, überraschung).
Dachte ich, es wäre eine gute Erfahrung für mich zu spielen, um mit PowerShell zu Hause, weit Weg von meiner Produktionsumgebung. Vor kurzem habe ich begonnen mit FFMPEG zu konvertieren alle meine .mkv-Dateien auf .mp4 ist, so konnte ich bessere Wiedergabe Unterstützung für meine PlayStation 3 über Plex, und dachte, dies wäre eine gute Erfahrung.
Den Befehl hab ich ausgeführt wie folgt:
ffmpeg -i OldVideoName.mkv -vcodec copy -acodec ac3 OldVideoName.mp4
Was ich will, ist ein PowerShell-Skript wird einmal ausgeführt, Scannen eines Ordner und alle Unterordner .mkv-Dateien (Get-ChildItem ".*.mkv"), transkodieren .mp4 über den oben genannten Befehl ein, und legen Sie Sie in der gleichen Lage wie die .mkv mit dem gleichen Namensschema.
Beispiel für das ausführen des Skripts mit D:\Videos als Ziel-Verzeichnis:
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
Als Sie sich vorstellen können, kann ich nicht herausfinden, für das Leben von mir. Hier ist der Letzte Versuch vor dem aufgeben.
$oldvid = Get-ChildItem .\*.mkv -Recurse
$newvid = $oldvid.Name.split(‘.’)[0]; ForEach-Object {
.\ffmpeg.exe -i $oldvid -y -vcodec copy -acodec ac3 $newvid".mp4”
}
Jede mögliche Hilfe würde geschätzt!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
$oldvid ist .NET FileInfo-Objekt und, wenn es sein muss, in einen string umgewandelt, es werden nur die Dateinamen und nicht den gesamten Pfad. Das funktioniert nicht für Dateien, die nicht im aktuellen Verzeichnis. So einfach nutzen Sie die
FullName
- Eigenschaft, um den vollständigen Pfad.Es scheint, als ob mit der aktuellen version der powershell das Verhalten etwas geändert hat. Die Antwort vorgeschlagen, die von Keith Hill nicht mehr arbeiten zu können, müssen die
.FullName
entfernt wurde, um die Arbeit mit PS 5.1 (Build 14393).Also der jetzige Antwort wäre:
Auch
-c:v -c:a
sind jetzt bevorzugt über-vcodec
und-acodec
.Wenn Sie wollen, um alle Ihre Spuren, statt nur eine audio-und eine Videospur die
-map 0
- flag ist erforderlich.