Tengo aproximadamente 3000 videoclips cortos, cada uno de unos 3 segundos de duración. Necesito rotar cada uno de ellos 90 grados. ¿Cuál es la mejor manera de hacer esto? Tengo una suscripción a Adobe Creative Cloud, así como acceso a máquinas Windows y Mac. Buscando la solución más fácil para automatizar / procesar por lotes la rotación de tantos videos.
Si se estaba preguntando, los videos son parte de un curso de aprendizaje electrónico sobre madera. El alumno ve cada video seleccionado al azar, que es solo un breve clip de una pieza de madera que gira. Los videos fueron grabados para que la madera (2x4, etc.) fuera horizontal. Pero ahora el cliente quiere que la madera sea vertical en los clips.
Respuestas:
Utilice
ffmpeg
y el filtro de "transposición" como "pobre" sugerido . Por ejemplo, si sus archivos son mp4 y están en el directorio actual:El valor de transposición puede ser "1" o "reloj" para rotación en sentido horario, "2" o "cclock" para rotación en sentido antihorario. Hay otros valores que también aplicarán un flip.
El audio se copiará en secuencia para evitar una nueva codificación innecesaria.
Los metadatos de rotación de transmisión de video se borran en este ejemplo. De
ffmpeg
lo contrario, lo copiará de la entrada a la salida, lo que dará como resultado una rotación incorrecta para los jugadores que prestan atención a estos metadatos (algunos lo hacen y otros no).Otro ejemplo, más detallado y flexible, y que mantiene el archivo girado en el mismo directorio con un nuevo nombre:
fuente
Ha especificado que está interesado en trabajar en una gran cantidad de videos, si tiene una máquina multinúcleo y utilizará un
for
bucle normal proporcionado por su shell, tendrá uno de sus núcleos funcionando en caliente, mientras que otros no están haciendo absolutamente nada . Esto no es lo ideal.Lo que debe hacer para tal trabajo es usar
parallel
una herramienta que le permite iniciar varios trabajos a la vez, y puede hacer todo lo que puede hacer un bucle for, pero mejor.No escribiré sobre todas las características de esta herramienta, pero me concentraré en su tarea específica.
Una forma de comenzar todos estos trabajos sería:
Aquí
{}
reemplaza cada nombre de archivo, y{.}
reemplaza el nombre de archivo sin una extensión.Sugeriré que comience tantos trabajos como tenga núcleos, quítese uno. La razón de esto es que su sistema operativo seguirá siendo utilizable, y esto también le ahorrará en caso de que esté utilizando el cifrado de disco duro (que utilizará la potencia de procesamiento para leer / escribir datos). Para hacer esto, simplemente agregue
--jobs -1
a su línea de comando y limitará el número de trabajos.Tenga en cuenta que no se dará salida hasta que se complete cada codificación. Por lo tanto, no verá cuánto de cada video se hace.
fuente
Según esta respuesta , puede usar ffmpeg con los siguientes comandos para rotar un video:
Para procesar por lotes una carpeta de películas, puede usar un lenguaje de programación de su elección e iterar a través de los archivos. He usado Linux con Python 2.7+ aquí. Solo tiene que editar la
folder_movies
rutapath_to_ffmpeg
y configurar su películaextension
:Luego, su carpeta de películas debería verse así:
La ventaja de usar Python es que el código corre multiplataforma . Lo único que debe tener en cuenta son las rutas al directorio y el ejecutable ffmpeg. Para ejecutar esto en una máquina Windows solo tiene que reemplazar las rutas a algo como:
Nota: no soy un experto en ffmpeg, tal vez haya una forma de procesar por lotes directamente con él.
fuente
mkdir -p rotated; for f in *.mp4; do ffmpeg -i "$f" -vf transpose=2 rotated/"$f"; done
(suponiendo que sus archivos de video sean .mp4 en este ejemplo).