Script de shell para detectar solo archivos de audio usando ffprobe de ffmpeg con yt-dlp y moverlos a un directorio separado

4 min

language: ja bn en es hi pt ru zh-cn zh-tw

ffprobe.png

Hola, soy Incompetente.

He archivado completamente mis videos favoritos de YouTube con yt-dlp.

Sin embargo, al guardar, no incluí una verificación para music.youtube.com, por lo que todo está en el mismo directorio.
Esto hace que la música y otros contenidos se mezclen, lo que lo hace muy difícil de ver, así que se me ocurrió una forma de separar las carpetas.


Por lo tanto, no se puede distinguir si es un archivo de video normal o un archivo de música si tienen la misma extensión .mp4.
Incluso si intento determinarlo por el tamaño del archivo o la duración, la precisión es demasiado baja.

Entonces, me di cuenta de que podría determinarlo por la relación de aspecto.
Sorprendentemente, ffmpeg puede determinar la relación de aspecto, así que lo verificaré con el siguiente comando.

ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 “archivo_de_musica.mp4”

> 1080x1080

Así que, parece ser un cuadrado de 1080.

En otras palabras, solo necesito mover los archivos que arrojan este valor a un directorio separado.
¡Vaya, ffmpeg es realmente lo mejor! Pensar que también tiene esta función... Es asombroso.

Así que, escribí el script de shell de la siguiente manera.

vi mvfile.sh

#!/bin/bash

# Establecer las rutas de los directorios
input_dir="/media/aaa"
output_dir="/media/bbb"

# Crear el directorio de salida si no existe
mkdir -p "$output_dir"

# Procesar cada archivo
for file in "$input_dir"/*.mp4; do
# Obtener la relación de aspecto del video usando ffprobe
    ratio=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "$file")

    # Si la relación de aspecto es 1080x1080, mover el archivo al directorio de salida
    if [ "$ratio" == "1080x1080" ]; then
        mv "$file" "$output_dir"
        echo "Moved $file to $output_dir"
    fi
done

Luego, concedemos permisos de ejecución.

chmod +x mvfile.sh

Y, ejecutar

./mvfile.sh

Con esto, si aparece la salida que muestra el movimiento, es un éxito.
Especialmente, podría ser una buena idea asignar el script anterior como un trabajo cron para el directorio utilizado para guardar archivos de video.

Eso es todo.

Espero contar con su continuo apoyo.

※ Al parecer, como hay muchas miniaturas que están ligeramente desfasadas, cambié la detección de miniaturas a lo siguiente.

if [[ "$ratio" == @(10[78][0-9]x10[78][0-9]|7[12][0-9]x7[12][0-9]) ]]; then

Related Posts