Einzeilige Lösung

Einzeilige Lösung

Ich bin neu bei FFmpeg und versuche, das herauszufinden. Ich habe das hier gefunden fürStapelverarbeitungund diese Antwort fürRotation des Videosaber ich muss sie zusammenfügen.

Könnte mir bitte jemand erklären, wie man unter Windows ein Skript für diese Aktion erstellt?

Antwort1

Im Grunde müssen Sie nur die Dateien nachschlagen (sie in einer Variablen speichern) und die gesuchten Dateien dann in FFmpeg einspeisen.

Natürlich,Die Batch-Sprache von Windows würde dafür ausreichen. Da ich damit aber überhaupt keine Erfahrung habe, hier ein PowerShell-Skript:

# Searching for files with the Get-ChildItem cmdlet and saving their relevant properties in an array:
# NOTE: -File will only work with PowerShell-versions >= 3.
[array]$FilesToRotate = Get-ChildItem -Path "C:\PATH_TO_FILES" ((-Filter *.mp4)) ((-Recurse)) -File | ForEach-Object {
    # NOTE: This part is a bit tricky - I just added it so I'm able to save the parent-path of each file in an object.
    # NOTE: One could also omit the whole ForEach-Object and use the Split-Path cmdlet inside the output-file's specification in FFmpeg's code.
    [PSCustomObject]@{
        InFullName = $_.FullName
        # Will put the output-file in the same folder as the input-file and add "_ROTATION" as suffix in its name.
        OutFullName = "$(Split-Path -Parent -Path $($_.FullName))\$($_.BaseName)_ROTATE$($_.Extension)"
    }
}

# Processing the files with FFmpeg using PowerShell's Start-Process cmdlet:
for($i=0; $i -lt $FilesToRotate.Length; $i++){
    Start-Process -FilePath "C:\PATH_TO_FFMPEG\ffmpeg.exe" -Argumentlist " -i `"$($FilesToRotate[$i].InFullName)`" -c copy -metadata:s:v:0 rotate=<x> `"$($FilesToRotate[$i].OutFullName )`" " ((-Wait)) ((-NoNewWindow))
}

Dieses Skript führt FFmpeg mit demden von Ihnen angegebenen Code(Ich habe es nicht überprüft, aber Sie können es trotzdem problemlos ersetzen) und speichern Sie die resultierende Datei im selben Ordner mit dem Namenssuffix „_ROTATE“ – so wird „MyMovie2017.mov“ zu „MyMovie2017_ROTATE.mov“. (Wenn Sie sie in einem ganz neuen Ordner rendern möchten, ersetzen Sie sie $($FilesToRotate[$i].ParentPath)durch den gewünschten Pfad.)

Hinweise: Angaben in doppelten Klammern (( ))sind optional:

  • -Filteradressiert nur (einen) bestimmten Dateityp, z. B. findet *.mp4 nur MP4-Dateien. Wenn Sie mehr als einen Dateityp haben, aber viele Dateien, die Sie nicht konvertieren müssen (wie Textdateien), können Sie entweder -Excludealle Formate auswählen, die Sie nicht konvertieren möchten, oder -Includenur diejenigen, die konvertiert werden sollen ( -Includeist wie -Filter- es ist langsamer, kann aber mehr als ein Format umfassen.)
  • -Recursedurchsucht auch Unterordner. Sie können es auch -Depthmit PowerShell v 5+ verwenden.
  • -Waitöffnet immer nur eine ffmpeg-Instanz auf einmal – ohne diese Option werden alle Instanzen parallel geöffnet.
  • -NoNewWindowzeigt die Ausgabe Ihrer ffmpeg-Instanz in der PowerShell-Konsole an, während ohne diese Option jede Instanz von ffmpeg in einem neuen Konsolenfenster geöffnet wird. Macht nur mit Sinn -Wait.

Sie müssen alle doppelten Klammern (und deren Inhalt, wenn Sie ihn nicht möchten) löschen, bevor Sie das Skript starten.

Außerdem müssen diese Dinge angepasst werden:

  • C:\PATH_TO_FILESNatürlich der Pfad zu Ihren Dateien.
  • C:\PATH_TO_FFMPEG\ffmpeg.exeNatürlich der Pfad zu Ihrer ffmpeg.exe.
  • rotate=<x>- Sie müssen das <x>durch entweder 90, 180, oder ersetzen 270. (Wie in der Codequelle erklärt)

Wenn etwas weiterer Erklärung bedarf, helfe ich gerne.

Antwort2

Einzeilige Lösung

npx rotate-video --source=source_path --destination=destination_path --extension=MP4 --angel=270

Notiz:Sie müssen FFMPEGzuerst CLI installierenInstallieren

verwandte Informationen