0 votos

scriptordenar los vídeos MP4 (y otros) por orientación a las carpetas vertical y horizontal >>> ¿Imposible?

He estado luchando con una biblioteca de video de más de 14TB durante los últimos meses tratando de desduplicar y ordenar todo en una estructura de carpetas lista para la producción.

Por mi parte no he podido encontrar (he pasado 3 días enteros sin dormir) un script que ordene una carpeta de archivos de vídeo, usando sus dimensiones, en carpetas Vertical y Horizontal.

Lo más parecido que he encontrado es esto -

#!/bin/bash
shopt -s nullglob

for f in *.{mp4,MP4,mov,MOV,m4v,M4V}
    do 
        height=`mdls -raw -name  kMDItemPixelHeight "$f"`
        width=`mdls -raw -name  kMDItemPixelWidth "$f"`
        mkdir -p "${height}x${width}"
        mv "$f" "${height}x${width}"/

        printf "File: $f\n"     
        printf "> Dimensions: $height x $width \n\n"
    done

printf "All done! \n"

Lo que me acerca a clasificarlos en carpetas en función de las dimensiones, pero no es lo que intento conseguir.

Alternativamente encontré este script para imágenes usando Imagemagick, (que instalé a través de Homebrew) sí lee los archivos, aunque los mueve TODOS al directorio de retratos. ¿Supongo que las variables pueden ser diferentes para extraer la altura y la anchura de un archivo de vídeo?

#/bin/zsh
mkdir -p portraits
mkdir -p landscapes
for f in ./*.mp4
do
  r=$(identify -format '%[fx:(h/w)]' "$f")
  if [[ r < 1.0 ]] 
  then
      echo "Portrait detected."
  mv "$f" ./portraits/
  elif  [[ r > 1.0 ]]
  then
  echo "Landscape detected."
      mv "$f" ./landscapes/
  fi
done

Si CUALQUIERA QUE ESTÉ AHÍ FUERA puede ayudarme con esto, para mí vale un PayPal. Sé que es un trabajo rápido para la mente correcta.

Lo mismo, si alguien tiene otra solución usando acciones de carpeta o automator o CUALQUIER otra cosa. Estoy corriendo Mac OS con terminal.

Se agradece mucho.

jason@speedheathens.com

0voto

Joy Jin Puntos 11

Puede utilizar el test función proporcionada por fish para comparar las dos dimensiones:

#!/usr/local/bin/fish
for i in *.{mp4,MP4,mov,MOV,m4v,M4V}
  if test (mdls -raw -name kMDItemPixelHeight $i) -gt (mdls -raw -name kMDItemPixelWidth $i)
     mv $i portrait/
  else
     mv $i landscape/
  end
end

bash probablemente proporciona la misma funcionalidad, pero estoy más familiarizado con los peces.

0 votos

OH DIOS MIO. ¡ALEGRÍA! Ha funcionado. Muchas gracias. ¿Cómo puedo modificar esto para que sea recursivo a todos los sub-directorios pero que traiga los archivos al directorio principal poniéndolos TODOS en las carpetas portrait y landscape? No tengo ningún problema en usar FISH, pero si alguien puede dar una idea de cómo convertir esto en BASH, me gustaría saberlo sólo porque he estado tratando de resolver esto durante meses.

0 votos

Utilice for i in **.{mp4,MP4,mov,MOV,m4v,M4V}

0 votos

Convertiré esto a bash cuando tenga tiempo de aprender sobre la sintaxis de bash.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X