Soy nuevo en FFmpeg y estoy tratando de resolver esto. encontré esto paraProcesamiento por lotesy esta respuesta pararotación de vídeopero necesito juntarlos.
¿Alguien podría explicar cómo crear un script para esta acción en Windows?
Respuesta1
Básicamente, solo necesita buscar los archivos (almacenarlos en una variable) y luego introducir esos archivos buscados en FFmpeg.
Por supuesto,El lenguaje Batch de Windows sería suficiente para eso.. Pero como no tengo ningún conocimiento sobre eso, aquí hay un script de PowerShell:
# 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))
}
Este script ejecutará FFmpeg con elcódigo que proporcionaste(No lo verifiqué, pero puedes reemplazarlo fácilmente de todos modos) y guarda el archivo resultante en la misma carpeta con el sufijo de nombre "_ROTATE", de modo que "MyMovie2017.mov" se convertirá en "MyMovie2017_ROTATE.mov". (Si desea renderizarlos en una carpeta completamente nueva, reemplácela $($FilesToRotate[$i].ParentPath)
con la ruta que desee).
Notas: las cosas entre paréntesis dobles (( ))
son opcionales:
-Filter
sólo abordará (un) tipo específico de archivos, por ejemplo, *.mp4 sólo encontrará archivos MP4. Si tiene más de un tipo de archivo, pero muchos archivos no necesita convertir (como archivos de texto), puede convertir-Exclude
todos los formatos que no desea convertir o-Include
solo aquellos que deben convertirse (-Include
es como-Filter
: es más lento, pero puede incluir más de un formato).-Recurse
También buscará en las subcarpetas. También puedes usarlo-Depth
con PowerShell v 5+.-Wait
abrirá una instancia de ffmpeg a la vez; sin ella, todas las instancias se abrirán en paralelo.-NoNewWindow
mostrará el resultado de su instancia de ffmpeg en la consola PowerShell, mientras que sin ella, cada instancia de ffmpeg se abrirá en una nueva ventana de la consola. Tiene sentido sólo con-Wait
.
Tendrás que eliminar todos los paréntesis duplicados (y su contenido si no lo deseas) antes de iniciar el script.
Además, es necesario adaptar estas cosas:
C:\PATH_TO_FILES
Ruta a tus archivos, obviamente.C:\PATH_TO_FFMPEG\ffmpeg.exe
Ruta a su ffmpeg.exe, obviamente.rotate=<x>
- necesitas reemplazar el<x>
con90
,180
o270
. (Como se explica en la fuente del código)
Si algo necesita más explicación, estaré encantado de poder ayudar.
Respuesta2
Solución de una línea
npx rotate-video --source=source_path --destination=destination_path --extension=MP4 --angel=270
Nota:FFMPEG
Primero necesitas instalar CLIinstalar