sabato 20 giugno 2015

Comprimere un file video proveniente da un PVR


Ho acquistato un decoder digitale terrestre che può anche registrare su porta USB.

Una registrazione di un film da 2 ore occupa trai 3,5 e i 4,7 gigabyte, suddivisi in una serie di file .mts da 512 mega ciascuno.
Tipicamente un film videoregistrato lo vedo magari dopo qualche mese (per poi cancellarlo), e tenere occupato tutto quello spazio per così tanto tempo è uno spreco, per cui ho la necessità di comprimere il file video.

Il tempo di compressione vorrei che fosse accettabile (magari non 3 ore, un quarto d'ora già andrebbe bene), la qualità visiva deve essere buona (niente quadrettoni), e il file compresso va bene anche da 1 giga e mezzo (il doppio dei divx che si trovano scaricando film in rete (700)). Parlando senza sapere, probabilmente le mie richieste sono impossibili da soddisfare, per cui bisogna fare un po' di analisi.

Cercando su internet, la maggior parte delle soluzioni proposte funzionano sotto windows, mentre per linux ci sono utility da riga di comando che offrono una gamma di opzioni impressionante, per cui bisogna armarsi di santa pazienza e verificare qual'è la riga di comando e le opzioni più adatte per quello che voglio fare.

Dopo una lunga serie di tentativi, nei quali  problema maggiore è stata una perdita di sincronismo tra audio e video, ho raggiunto questo risultato: eseguendo il seguente comando:

avconv -i "concat:Iris-09032014-2107.mts|Iris-09032014-2107.mts1|Iris-09032014-2107.mts2|Iris-09032014-2107.mts3|Iris-09032014-2107.mts4|Iris-09032014-2107.mts5|Iris-09032014-2107.mts6|Iris-09032014-2107.mts7|Iris-09032014-2107.mts8" -c:v libx264 -strict experimental outputfile.mp4

il tempo impiegato per la codifica è un po' più che un quarto d'ora, diciamo due ore e mezza, e la dimensione del file ottenuto è di circa 2 giga. Il risultato non è proprio il massimo, ma per adesso mi accontento.

Ho anche impostato uno script che prepara automaticamente il comando a partire dai file mts* presenti nella directory e lo esegue:

#/bin/sh

outputFile='outputfile.mp4'

rm -f $outputFile

command='avconv -i "concat:'

for file in $(ls -1X *.mts*); do
 command=${command}$file"|"
done

command=${command}"|"

command=${command/||/\"}

command=${command}" -c:v libx264 -strict experimental "$outputFile

eval $command 
 

La quartultima riga dello script aggiunge un altro carattere 'pipe'(|) alla stringa generata, mentre la terzultima trasforma due caratteri 'pipe' consecutivi in un doppio apice(").

mercoledì 3 giugno 2015

Rallentare la velocità del mouse


Ho un simpatico mouse ROCCAT Kone+, che linux mi riconosce tranquillamente.


Il comando lsusb ad esempio fornisce la seguente riga:
Bus 002 Device 005: ID 1e7d:2d51 ROCCAT Kone+ Mouse
Non ho installato nessun driver particolare, come ad esempio suggerito in questa pagina che contiene il driver ufficiale per linux. La pagina indica come attivare la gestione delle macro e delle funzioni avanzate con questo mouse, ma per adesso non ho intenzione di usarle.

L'unico problema con il driver di default è che la velocità del mouse risulta troppo elevata, rendendo il puntatore difficile da controllare quando si vogliono selezionare aree dello schermo o controlli grafici troppo piccoli.

Per poter ottenere una velocità adeguata, ho dovuto seguire la guida indicata in questa pagina, che suggerisce di effettuare dei tentativi di soglie di sensibilità con i comandi:
  • xinput list: per trovare l'id del mouse da usare nei comandi successivi
  • xinput list-props mouseId: per trovare l'elenco dei parametri del mouse configurabili 
  • xinput set-prop mouseId paramId valore: per attivare il valore di un parametro
Una volta trovato il valore corretto, è possibile renderlo attivo per ogni avvio del pc, andando ad aggiungere una sezione nel file /etc/X11/xorg.conf, nel mio caso  per rallentare il puntatore del mouse ho dovuto aggiungere in coda le seguenti righe:

Section "InputClass"
    Identifier "Roccat"
    MatchProduct "ROCCAT ROCCAT Kone[+]" # Product name from xinput list.
    Option "ConstantDeceleration" "3" # The same value as xinput.
EndSection