Como ler uma pasta de filmes e gerar informações a partir dela

3

Eu estou procurando uma ferramenta ou grupo de ferramentas que combinadas podem ler recursivamente a partir de uma pasta e gerar o nome da pasta, o nome do arquivo do filme, a resolução do filme e outras informações.

Por exemplo, uma saída seria:

(1997) Titanic, Titanicmovie, 1280x720, 720p  
(2001) Matrix 2, Matrix2, 1280x1080, 1080p  
(2012) Titan, Titanmovie, 1280x720, 720p
    
por Luis Alvarado 18.09.2012 / 23:22

2 respostas

5

awk & amp; grep + exiftool

link

deve ser capaz de obter tudo o que você precisa de informações sábias.

mp4:

$ exiftool big_buck_bunny_480p_surround-fix.avi 
ExifTool Version Number         : 9.02
File Name                       : big_buck_bunny_480p_surround-fix.avi
Directory                       : .
File Size                       : 210 MB
File Modification Date/Time     : 2012:09:19 09:43:12-04:00
File Access Date/Time           : 2012:09:19 09:43:22-04:00
File Permissions                : rw-rw-r--
File Type                       : AVI
MIME Type                       : video/x-msvideo
Frame Rate                      : 24
Max Data Rate                   : 0 kB/s
Frame Count                     : 14315
Stream Count                    : 2
Stream Type                     : Video
Video Codec                     : FMP4
Video Frame Rate                : 24
Video Frame Count               : 14315
Quality                         : 0
Sample Size                     : Variable
Image Width                     : 854
Image Height                    : 480
Planes                          : 1
Bit Depth                       : 24
Compression                     : FMP4
Image Length                    : 1229760
Pixels Per Meter X              : 0
Pixels Per Meter Y              : 0
Num Colors                      : Use BitDepth
Num Important Colors            : All
Audio Codec                     : 
Audio Sample Rate               : 56000
Audio Sample Count              : 33401088
Encoding                        : FAST Multimedia DVM
Num Channels                    : 6
Sample Rate                     : 48000
Avg Bytes Per Sec               : 56000
Bits Per Sample                 : 16
Duration                        : 0:09:56
Image Size                      : 854x480

mkv

   $ exiftool hddvd_demo_1080p.mkv 
ExifTool Version Number         : 9.02
File Name                       : hddvd_demo_1080p.mkv
Directory                       : .
File Size                       : 278 MB
File Modification Date/Time     : 2012:09:19 10:09:51-04:00
File Access Date/Time           : 2012:09:19 10:08:43-04:00
File Permissions                : rw-rw-r--
File Type                       : MKV
MIME Type                       : video/x-matroska
Doc Type                        : matroska
Doc Type Version                : 1
Doc Type Read Version           : 1
Timecode Scale                  : 1 ms
Muxing App                      : libebml v0.7.7 + libmatroska v0.8.1
Writing App                     : mkvmerge v2.0.2 ('You're My Flame') built on Feb 21 2007 23:40:55
Duration                        : 0:02:01
Date/Time Original              : 2007:04:07 03:28:47Z
Video Codec ID                  : V_MS/VFW/FOURCC
Image Width                     : 1920
Image Height                    : 1080
Video Scan Type                 : Progressive
Display Width                   : 1920
Display Height                  : 1080
Default Duration                : 32 ms
Track Number                    : 3
Track Type                      : Audio
Track Used                      : Yes
Track Default                   : No
Track Forced                    : No
Track Timecode Scale            : 1
Audio Codec ID                  : A_EAC3
Codec Decode All                : Yes
Track Language                  : eng
Track Name                      : Dolby Digital Plus 5.1 640kbps
Audio Sample Rate               : 48000
Audio Channels                  : 6
Image Size                      : 1920x1080

Então, o que você poderia fazer é algo nos moldes de

find . -name "*.ogg" -o -name "*.avi" -exec exiftool {} \;

adicionando

-o -name "*.videoFormat"

para cada formato de vídeo adicional. Além disso, esta é apenas uma base para você começar. Você também pode fazer

exiftool ~/Videos

e imprimirá uma folha gigante de informações para cada arquivo. Você vai querer despejá-lo em um arquivo e, em seguida, você pode grep e awk em conformidade. Espero que ajude.

    
por Nate 19.09.2012 / 03:36
1

Script de lista de filmes

UPDATE: Outra atualização para que, quando a variável de pasta alterar a quantidade de profundidade do diretório, os títulos do filme não se percam no processo ao usar o comando cut.

#!/bin/bash
####################################################################
# Movie List Creator Script by Luis Alvarado
# Creates File with Movie Name, Resolution, File Type & Quality
# CONFIG Variables

# FOLDER Variable is where all your movies are
# NOTE: The name of the movies is extracted from the movie's folder,
#       if the folder is called "..Movies/The Rabbit"
#   the name of the movie in that folder will be "The Rabbit".

folder="/media/cyrex/xtreme/Movies"

# FINAL Variable is the name of the file you wish to create with the
# Movie List.

final="moviefinal.txt"

####################################################################

here=$(pwd)

clear
echo "Processing Movies..."
echo ""
percent=$(ls $folder/|wc -l| while read pipe; do echo "scale=3; 100/$pipe"; done|bc)
movies=1
rm tempmovies 2> /dev/null
for dir in $folder/*
do
  (cd "$dir" && found=$(pwd) && echo ${found##/*/} |tr -s '\n' ', ' >> $here/tempmovies &&
  exiftool -ext .mkv -ext .m4v -ext .mp4 -ext .avi -ext .mpg * -t -s3 -ImageSize -FileType|tr -s '\t' ',' >> $here/tempmovies )
    base=$(echo "scale=3; $percent * $movies" | bc)
    echo -ne " Total: $base% Done / $movies Movies Added!"\r
    let movies=movies+1
done

echo " "
echo " Detecting Movie Quality..."
echo " "

rm $final 2> /dev/null
cat tempmovies | while read MovieName;
do
    echo "$MovieName" | cut -d ',' -f2 | cut -d 'x' -f2 | sort | uniq | while read MovieRes;
    do
        if (($MovieRes>=304 && $MovieRes<=370))
                then
                        echo "$MovieName,LOW-RES DVD"
        elif (($MovieRes>=241 && $MovieRes<=369))
        then
            echo "$MovieName,HI-RES DVD"
        elif (($MovieRes>=371 && $MovieRes<=479))
        then
            echo "$MovieName, EDTV 480p"
        elif (($MovieRes>=480 && $MovieRes<=760))
        then
            echo "$MovieName, HDTV 720p"
        elif (($MovieRes>=761 && $MovieRes<=1200))
        then
            echo "$MovieName, HDTV 1080p"
        else
            echo "$MovieName,VCD"
        fi >> $final
    done
done

echo " "
echo "Summary: "
echo "----------------"
cat $final | cut -d ',' -f4| sort | uniq -c
echo "----------------"
echo " "
rm tempmovies 2> /dev/null
echo "File $final Created!"

Para o script funcionar, primeiro precisamos instalar o exiftool encontrado no pacote libimage-exiftool-perl . Então, um rápido sudo apt-get install libimage-exiftool-perl serve.

O script precisa ser executado fora da pasta do filme que contém todos os filmes (se você deixá-lo como está). Ele reunirá todos os títulos do filme assumindo que o título é o nome da pasta, reunirá o formato e a resolução do vídeo, presumindo que você tenha apenas arquivos de vídeo dentro da pasta do filme (as legendas, por exemplo, não devem estar lá). Por último vai dar uma aproximação da qualidade, se o vídeo for 720p, 1080p, etc ...

Em outra nota, por algum motivo, os filmes feitos com freio de mão com formato M4V não são lidos corretamente e lançam o aviso "Suporte a Arquivos Grandes". Para superar isso, salve o arquivo como MKV. Se você já tem um M4V, então use o MKVMergeGUI que faz a mudança em menos tempo que o Handbrake. Depois disso, o exiftool deve conseguir ler os metadados corretamente.

    
por Luis Alvarado 19.09.2012 / 22:03

Tags