0 votos

¿Cómo puedo automatizar a través de la línea de comandos un proceso para preparar archivos de video cuando se inicia mi Mac?

Esta es una mejora de lo discutido anteriormente: Constantly check folder for specific file type and run terminal command with new filename as an argument

Solía amar Automator para tales tareas, pero encontré que en esta tarea pasar argumentos con nombres de archivo en los pasos de Automator fallaba para mí. También estoy abierto a buenos scripts.

Tengo una Mac Intel y una M2, la antigua es portátil y encontré que la M2 graba (a una resolución más baja y recortada) el vídeo más rápido que la Intel, incluso al enviar los resultados por WiFi. Me estoy sorprendiendo a mí mismo con lo siguiente

  1. Compartir Samba en M2 accesible a través de WiFi

  2. Edita (si se vació en el paso 4) o crea un nuevo archivo queue.txt con un enlace de YouTube. La carpeta MMi es necesaria en el paso 4 para que funcione correctamente

  3. Un par de programas llamados entr y yt-dlp que revisan las actualizaciones en queue.txt y, si hay una nueva, descargan un vídeo .webm de 720p como ejemplo https://www.youtube.com/watch?v=WO2b03Zdu4Q

    ls queue.txt | entr yt-dlp -q -f "best[height<=720]" --batch-file queue.txt
  4. yt-dlp convenientemente agrega .part al archivo en progreso de descarga para no interferir con los siguientes pasos, una vez completado, un script (gracias a @nohillside) recoge la codificación:

    while :; do
      ls . | find . -depth 1 -type f -iname "*.webm" -exec sh -c '
        f="$1"
        mv -- "$f" MMi/
        handbrakecli --encoder x264 --width 800 --format av_mp4 --optimize --non-anamorphic --rate 30 -i "MMi/$f" -o "MMi/${f%.webm}.mp4" 
        rm "MMi/$f"
        cat /dev/null > yt.txt
        ' _ {} \;
    done
  5. Una vez finalizado, necesitas rsync para devolverlo a la Mac Intel a través de WiFi (las claves ssh ya están intercambiadas)

    rsync MMi/*.mp4 user@intel_mac/MMi

¿Hay alguna forma de combinar todo en un solo script, además de mantener tres "daemon", tal vez launchctl en un .plist o un programa de python?

¿Hay guías o plantillas para hacer funcionar este script como un daemon en macOS?

1voto

Pavel Pervoy Puntos 11

Después de investigar y probar, encontré la siguiente solución.

Creé en mi carpeta de red un archivo com.ppervoy.yt-dlp.plist con el siguiente contenido:

  Label
  com.ppervoy.yt-dlp

  WorkingDirectory
  /Volumes/HDD/

  ProgramArguments

    /usr/local/bin/yt-dlp
    --format
    22
    --batch-file
    /Volumes/HDD/_queue.txt

  KeepAlive

  RunAtLoad

  StandardErrorPath
  /Volumes/HDD/yt-dlp.err

  StandardOutPath
  /Volumes/HDD/yt-dlp.out

Es importante tener WorkingDirectory. Cada palabra de tus ProgramArguments en tu línea de comando debe estar en separados. Se necesita la ruta de yt-dlp - prueba which yt-dlp para encontrar la tuya. Es útil tener StandardError y StandardOut mientras configuras, más tarde puedes cambiar a /dev/null.

Usa sudo launchctl load com.ppervoy.yt-dlp.plist (puede requerir chown root:wheel) ¡y estarás listo para añadir enlaces de youtube al archivo _queue.txt!

BONO: puedes reproducir un video directamente desde YouTube con ffplay: yt-dlp "https://www.youtube.com/watch?v=rOKSMcLtY1A" -o - 2>/dev/null | ffplay - &>/dev/null ¡Esto funciona también para transmisiones en vivo!

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