Rinominare e tenere organizzate le serie TV automagicamente

Rispondo ora ad una domanda di Stardast che parte dalla lettura di un articolo pubblicato qualche tempo fa, ovvero: Controllare, ottenere, sottotitolare, organizzare e guardare serie TV sul Mac (automaticamente).

Se l’avete letto sapete che si tratta di roba forte per veri drogati di serie TV. Se pensate che lì si sia raggiunto l’apice della malsana ossessione, vi siete sbagliati. Oggi si passa al livello successivo: una volta ottenuto il file dell’episodio, lo si rinomina, lo si sposta nella cartella giusta, magari insieme al file del sottotitolo corrispondente.

Il tutto automagicamente, senza intervento umano.

Ovviamente quello che propongo non è l’unico modo possibile di svolgere quelle funzioni, però ha il vantaggio di essere rapidissimo e completamente automatizzato, una volta data l’impostazione iniziale. Inoltre è, udite udite, multipiattaforma e completamente aggratisse.

Siete pronti? Si parte con la ricetta!

INGREDIENTI (dosi per una persona)

  • TVnamer (di cui esiste anche una inutilissima GUI per OSX): questo serve a rinominare i file secondo un database online (vedi articolo Come ottenere ecc…). In particolare serve l’ultimissima versione, la 2.0. Fate click su download source oppure qui.
  • launchd: per lanciare il vostro applescript ogni tot minuti/giorni/ecc… comunque, c’è già
  • python: questo c’è già, ma se proprio vi piace potete installare l’ultimissima versione
  • un editor di testo, io consiglio Fraise
  • una connessione internet che funzioni

PRESUPPOSTI

Vi siete lavati le mani?  a parte questo, sappiate che questa guida parte dai seguenti presupposti:

  1. che siate dei drogati di serie TV almeno quanto me
  2. che abbiate un Mac, ma non necessariamente
  3. che usiate Mac OS X 10.6.x e che abbiate già installato python (di solito è così)
  4. che abbiate letto per filo e per segno l’articolo Come ottenere, sottotitolare ecc..
  5. che il vostro nome utente sia Jeby e che i file dei sottotitoli li scaricate in ~/Download e invece i video in ~/Download/Torrent, o viceversa, o tutti mischiati. Se così non è, dovete cambiare lo script che vi posterò di conseguenza.
  6. che abbiate ben in mente cosa significa ~
  7. che abbiate installato tvnamer 2.0 come vi spiego io 
  8. che abbiate una certa confidenza con il terminale
  9. che abbiate del tempo da perdere

PREPARAZIONE

Fase 1: installare tvnamer

Allora, è molto facile se lo sapete fare. Innanzitutto scaricate i file sorgente, come vi ho scritto negli ingredienti. Otterrete un file compresso da scomprimere nella cartella che più vi piace, ad esempio ~/Downloads. In questo modo avrete una cartella contenente i file sorgenti, che ha un nome del tipo dbr-tvnamer-726b76e. Copiate il nome di questa cartella.

Ora aprite il Terminale, e digitate

cd ~/Downloads

 a questo punto digitate

sudo easy_install dbr-tvnamer-726b76e

dove dovrete cambiare dbr-tvnamer-726b76e coerentemente col nome della cartella che avete scaricato voi… mi sono spiegato, vero?

Inserite la password di amministratore (anche se non compare nulla quando scrivete la password, state effettivamente scrivendo) e date invio. Il programma ci pensa un po’ e alla fine installa quello che deve installare. Per essere sicuri che abbia fatto tutto, alla fine del processo provate a digitare

tvnamer -h

e vedere cosa vi dice. Se tutto è installato nel modo corretto, otterrete l’help di tvnamer.

Fase 2: cambiare le configurazioni

Il bello del tvnamer 2.0 è che è possibile cambiare le preferenze e salvarle in un file di testo. In teoria sarebbe anche possibile caricare di volta in volta il file specificato ma, almeno nel mio caso, non funziona. Quindi andremo a modificare il file di preferenze default.

ATTENZIONE: provate a svolgere la procedura sotto indicata usando un altro nome per i file delle preferenze (tipo .tvnamer2.json) e vedere se caricandolo secondo la procedura riportata nell’help di tvnamer a voi funziona. In questo caso può esser utile cambiare la procedura qui indicata di conseguenza, anche nella compilazione ddel file bash (Fase 3)

Per prima cosa bisogna scrivere le configurazioni di default in un file, e chiamare questo file con il nome standard che tvnamer usa di default. Per farlo basta digitare nel terminale:

cd ~
tvnamer --save=.tvnamer.json

mi raccomando, non sbagliate nome. ok, ora si può aprire il file con un editor di testo qualunque e modificarlo. Io ad esempio uso Fraise e ho installato il tool da riga di comando, quindi mi basta digitare

fraise .tvnamer.json

per aprire il documento e cominciare a modificarlo. Altri editor hanno altri comandi, e in ogni caso è possibile aprire il file con l’applicazione giudicata “standard” per quel tipo di file, digitando

open .tvnamer.json

nel mio caso si apre dashcode…. vabbé, diciamo che avete aperto il file .tvnamer.json

Ora, modificarlo non è essenziale: in realtà è possibile passare a tvnamer tutta una serie di parametri (come spiegato nell’help di tvnamer) volta per volta, senza necessità di cambiare il file di configurazione. Con il file di configurazione però è tutto più elegante e, quando funzionerà, permetterà di costruire diverse configurazioni a seconda delle esigenze. Inoltre mettere mano a file di configurazione è un esercizio propedeutico.

Quindi aprite il benedetto file, e guardate un po’. È possibile ad esempio modificare le espressioni regolari con cui vengono rinominati i file. Ad esempio da 

"%(seriesname)s - [%(seasonno)02dx%(episode)s] - %(episodename)s%(ext)s"

si può passare a 

"[%(seasonno)02dx%(episode)s] - %(seriesname)s - %(episodename)s%(ext)s"

nel primo caso si avrà un output del tipo

How I Met Your Mother - [S05E01] - Definitions.avi

mentre nel secondo

[S05E01] - How I Met Your Mother - Definitions.avi

Le modifiche possibili sono molteplici, e dovrete agire secondo le vostre preferenze. Se non capite cosa vogliono dire le varie stringhe, lasciate perdere. E create un file di backup. Noi ci concentreremo su poche modifiche, in particolare

"batch": false

da cambiare in 

"batch": true

ovvero: effettua le modifiche senza chiedere conferma e, in caso di conflitto, sceglie il primo risultato disponibile. Questo può essere pericoloso, nel senso che potrebbe rinominare in modo errato i file, in caso esistano più serie con lo stesso nome (mi capita ad esempio con FlashForward).

Poi, se volete spostare i file nelle cartelle corrispondenti alle serie, qui c’è una funzione bellissima da abilitare. Scorrete il file fino a trovare

"move_files_confirmation": false, 
"move_files_destination": ".", 
"move_files_enable": false, 

ora, mettiamo che voi vogliate mettere i file di Lost in ~/Movies/SerieTV/Lost e quelli di Fringe in ~/Movies/SerieTV/Fringe, ovvero ogni file in una sottocartella avente come nome il nome della serie TV. Dovrete modificare il testo così:

"move_files_confirmation": false, 
"move_files_destination": "~/Movies/SerieTV/%(seriesname)s/", 
"move_files_enable": true, 

dove %(seriesname)s/ indica appunto che state creando una cartella col nome della serie TV. Volendo si può nidificare ulteriormente inserendo il numero di serie.

Ovviamente dovrete modificare i percorsi secondo le vostre esigenze. Inoltre io al posto di ~ ho usato il percorso assoluto, così, per sfizio.

La cosa bella è che se la cartella non esiste, viene automaticamente creata.

Ok, salvate tutto e chiudete.

Fase 3: script bash

Questo è il cuore di tutto: due righe di codice che lanciano tvnamer.

Aprite un file di testo e scriveteci dentro:

#!/bin/bash
/usr/local/bin/tvnamer ~/Downloads/
/usr/local/bin/tvnamer ~/Downloads/Torrent/

che semplicemente non fa altro che chiamare tvnamer e passargli tutti i file presenti in Downloads e Torrent. Chiaramente, a tvnamer potete passare anche parametri extra, come ad esempio caricare un altro file di configurazione (se a voi funziona). Per la lista di parametri e la spiegazione su come usarli, rivolgetevi all’help di tvnamer (tvnamer -h).

In alternativa, se come nel mio caso le due cartelle sono una dentro l’altra, potete chiamare tvnamer con l’opzione di ricorsione. Consiglio però di associare una lista chiusa di estensioni (definibile nel file di configurazione), onde evitare che tvnamer vada a toccare file che non deve toccare.

Potete poi aggiungere altri comandi, io ad esempio faccio compilare un file con la lista di tutte le serie TV ed episodi presenti sul mio hard disk.

Salvate il file con un nome qualunque, tipo tvrnm.sh, e salvatelo dove volete, ad esempio in ~/Applications.

Ora aprite il terminale e digitate

chmod 755 percorso/di/tvrnm.sh

ad esempio, utilizzando i nomi che ho dato io,

chmod 755 ~/Applications/tvrnm.sh

questa operazione serve a rendere eseguibile il file tvrnm.sh

Fase 4: configurare launchd

Questa fase è necessaria per automatizzare l’esecuzione del file tvrnm.sh che avete appena creato. Ad esempio, facciamo finta che volete fare in modo che il file venga eseguito ogni 15 minuti o quando viene inserito un file nella cartella ~/Downloads.

Per fare questo bisogna creare un “launch agent”, utilizzando anche un semplicissimo editor di testo. Ad esempio il mio launch agent è fatto così:

 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>KeepAlive</key>
 <false/>
 <key>Label</key>
 <string>com.JEBY.tvnamer</string>
 <key>ProgramArguments</key>
 <array>
 <string>/Users/Jeby/Applications/tvrnm.sh</string>
 </array>
 <key>QueueDirectories</key>
 <array>
 <string>/Users/Jeby/Downloads</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
 <key>StartInterval</key>
 <integer>900</integer>
 <key>StartOnMount</key>
 <false/>
</dict>
</plist>

Allora, come potete vedere c’è un “label” che altro non è che il nome che volete dare al launch agent (uno qualunque va bene, di solito è com.nomeutente.nome_agente).

Poi c’è un “ProgramArgument”, e nelle righe successive una “string” in cui inserire il path (assoluto) in cui è presente il vostro equivalente del file tvnmr.sh

La “QueueDirectories” serve ad indicare una cartella tale per cui l’agente viene eseguito nel caso siano inseriti dei file in quella specifica cartella.

Lo “StartInterval” invece definisce l’intervallo di tempo, in secondi, in cui viene eseguito l’agente. In particolare 900 secondi, ovvero 15 minuti.

Ora salvate il tutto con un nome del tipo com.vostronome.tvnamer.plist e mettetelo nella cartella ~/Library/LaunchAgents.

Quindi aprite il terminale e digitate

launchctl load -w ~/Library/LaunchAgents/com.vostronome.tvnamer.plist

c’è da dire che la creazione di un launch agent può essere di molto facilitata usando Lingon.

A questo punto il “demone di sistema” launchd eseguirà lo script tvnmr.sh ogni 15 minuti o ogni qualvolta verrà inserito un file in ~/Downloads. Bello no? È possibile che dobbiate fare un logout/login per far partire il tutto la prima volta

D’ora in poi non dovrete più fare nulla, perché launchd unito a tvnamer penserà a tutto: rinominare e spostare a dovere.
Ovviamente la procedura è identica anche per i file dei sottotitoli, così in un colpo solo avrete tutto organizzato in modo maniacale.

Fase 5: poltrona

ok, la ricetta è finita, non resta che gustarsi il tutto. Io in particolar modo uso il software RemoteBuddy, unito ad un WiiMote per lanciare i video. Come player sono passato definitivamente a QuickTimeX, è più rapido e rende meglio di VLC (in attesa di una versione ottimizzata per OSX) e con Perian non ho problemi di codec.
Quindi, riassumendo:

  1. TVshows + Transmission per il download delle puntate automatizzato
  2. TVnamer + bash + launchd per rinominare tali puntate e metterle al posto giusto automagicamente (eventualmente anche con i sottotitoli)
  3. Poltrona + telecomando

ok, e questo è tutto… più o meno!

‘nuff said