Script para ler vídeos e informações de saída

2

Estou trabalhando em um script que lê todas as pastas dentro de uma pasta do Filme e gera as informações de cada vídeo em um arquivo.

O atual que tenho é o seguinte:

movies=0
rm movielist
for dir in Movies/*
do
  (cd "$dir" && pwd|cut -d \/ -f5|tr -s '\n' ', ' >> ../../movielist &&
  >> ../../movielist )
echo "Movie $movies - $dir ADDED!"
let movies=movies+1
done

rm moviefinal
cat movielist | while read MovieName;
do 
    echo "$MovieName" | cut -d ',' -f2 | cut -d 'x' -f2 | sort | uniq | while read MovieRes;
    do
        case $MovieRes in
        [461-660]*)
            echo "$MovieName,480p" >> moviefinal
        ;;
        [661-890]*)
            echo "$MovieName,720p" >> moviefinal
        ;;
        [891-1200]*)
            echo "$MovieName,1080p" >> moviefinal
        ;;
        *)
            echo "$MovieName,DVD" >> moviefinal
        ;;
        esac
    done    
done

Que lê da pasta Movies cada filme (por exemplo: Movies / The Matrix / Matrix.mkv) e envia para um arquivo chamado moviex dentro da pasta Movies. A informação dentro do arquivo é algo assim:

The Matrix, 1920x1080, MKV
The Matrix 2, 1280x720, AVI
....

O que eu quero adicionar agora é uma maneira de ler a altura e largura (que são o SourceImageHeight e SourceImageWidth com exiftool) e fazer um caso ou se, onde a altura é X e largura é Z, em seguida, adicionar à saída arquivo outra variável que é a qualidade (ou seja: 720p, 1080p, DVD ...). O acima seria algo como isto:

The Matrix, 1920x1080, MKV, 1080p
The Matrix 2, 1280x720, AVI, 720p

UPDATE - O script agora está mostrando a qualidade (720p, 1080p), mas a parte do CASE está errada. Às vezes, por exemplo, pega um vídeo 720 e dá-lhe uma qualidade de DVD, quando, na verdade, no script eu disse explicitamente 720.

    
por Luis Alvarado 25.09.2012 / 20:14

1 resposta

1

Bem, o script finalizado é este, se alguém no futuro quiser fazer o mesmo:

movies=0
rm movielist
for dir in Movies/*
do
  (cd "$dir" && pwd|cut -d \/ -f5|tr -s '\n' ', ' >> ../../movielist &&
    exiftool * -t -s3 -ImageSize -FileType|tr -s '\t' ',' >> ../../movielist )
echo "Movie $movies - $dir ADDED!"
let movies=movies+1
done

rm moviefinal
cat movielist | while read MovieName;
do 
    echo "$MovieName" | cut -d ',' -f2 | cut -d 'x' -f2 | sort | uniq | while read MovieRes;
    do
        if (($MovieRes>=461 && $MovieRes<=660))
        then
            echo "$MovieName,480p" 
        elif (($MovieRes>=661 && $MovieRes<=890))
        then
            echo "$MovieName,720p" 
        elif (($MovieRes>=891 && $MovieRes<=1200))
        then
            echo "$MovieName,1080p"
        else
            echo "$MovieName,DVD" 
        fi >> moviefinal
    done    
done
    
por 27.09.2012 / 19:09