Ho questa necessità: Registrare su penna USB un programma televisivo, tramite un Decoder Digitale Dicra (RICEVITORE DVB-T STB PVR), e convertirlo in modo che il risultato sia leggibile collegando la medesima penna USB ad un televisore che supporta la riproduzione di files multimediali (in genere AVI e MPG sono formati supportati); il tutto su MAC OS X (iMac).
Il DVB in questione, quando registra da DT (Digitale Terrestre), salva in formato MPG, tuttavia (non so bene per quale ragione, anche se un po’ la immagino, ma ci sarà …), suddivide il filmato in files da 700Mb circa che, maledettamente, non sono leggibili da nessun dispositivo (se non il primo file, quello di testa).
Per sistemare la cosa il trucco consiste nel concatenare, nell’ordine giusto (e qui non ci si può sbagliare perché, diligentemente, il DVB salva con un nome numerico progressivo, da 000.MPG, 001.MPG e così via), i file presenti nella cartella (per ogni videoregistrazione crea una cartella, sotto il ramo “ALIDVR”, con un nome parlante) in un unico file MPG.
Nel mio caso, oltre a questa operazione, ho anche la necessità di tagliare il video risultante; infatti, il DVB in questione, quando avvia la registrazione, procede a registrare per 2 ore, quindi, interrompe autonomamente. Ecco che, da queste due ore di registrazione, io voglio estrapolare solo la parte che mi interessa.
Per realizzare in modo semplice tutto questo mi sono realizzato uno Script Bash (in grado di funzionare su iMac ma che ritengo sia perfettamente compatibile anche su Linux, nonostante non lo abbia testato anche lì) che esegue in automatico l’operazione di concatenazione e, se necessario, successivamente consente di eseguire il taglio.
Lo riporto, in modo che chiunque possa utilizzarlo o prendere spunto per altre cose:
#!/bin/bash
# UDA'Software 2013
# $Date: 2013/01/29 19:42:39 $
# $Revision: 1.2 $
# Questo script serve per convertire i dati di videoregistrazione
# ALIDVR in un unico file mpg.
###############################################################################
#______________________________________________________________________________
list_MPG="$(ls *.MPG)"
###############################################################################
#______________________________________________________________________________
function hms() {
s=${1}
h=$((${s} / 3600));
s=$((${s} - $((${h} * 3600))));
m=$((${s} / 60));
s=$((${s} - $((${m} * 60))));
printf '%d:%02d:%02d\n' ${h} ${m} ${s}
}
###############################################################################
#______________________________________________________________________________
if [ "${list_MPG}" == "" ]; then
printf 'ERRORE: Nella cartella corrente non sono presenti file MPG.\n'
else
output_mpg_filename="$(pwd | sed 's@.*/@@' | sed 's@[^a-zA-Z0-9]@_@g').mpg"
if [ -f "full_${output_mpg_filename}" ]; then
start_time="${1}"
end_time="${2}"
if [ ${start_time:-0} != 0 ] && [ {$end_time:-0} != 0 ]; then
start_time_seconds=$((${start_time:0:1} * 3600 + ${start_time:2:2} * 60 + ${start_time:5:2}))
end_time_seconds=$((${end_time:0:1} * 3600 + ${end_time:2:2} * 60 + ${end_time:5:2}))
duration_time_seconds=$((${end_time_seconds} - ${start_time_seconds}))
duration_time=$(hms ${duration_time_seconds})
if [ "$(which ffmpeg)" != "" ]; then
ffmpeg -sameq -ss ${start_time} -t ${duration_time} -i "full_${output_mpg_filename}" "cut_${output_mpg_filename/full_}"
rm "full_${output_mpg_filename}"
printf '* CONVERSIONE TERMINATA *\n'
printf 'Taglio iniziato a %s per una durata di %s .\n' ${start_time} ${duration_time}
else
printf 'ERRORE: Il software di conversione video ffmpeg non risulta installato nel sistema o comunque non risulta possibile eseguirlo; verificare che sia correttamente installato e disponibile nella PATH (%s)\n' "${PATH}"
fi
else
printf 'ERRORE: Devi specificare la posizione di inizio (h:mm:ss) e di durata (h:mm:ss).\n'
printf 'SINTASSI: %s h:mm:ss h:mm:ss\n' "${0}"
fi
else
cat ${list_MPG} > "cat_${output_mpg_filename}"
ffmpeg -sameq -i "cat_${output_mpg_filename}" "full_${output_mpg_filename/full_}"
rm "cat_${output_mpg_filename}"
cat<<EOF
Il file mpg visualizzabile con un visualizzatore standard e' stato
creato.
Puoi visualizzarlo aprendo il file "full_${output_mpg_filename}"; se desideri anche tagliarlo, puoi utilizzare questa sintassi:
${0} <start_time> <end_time>
dove "start_time" e "end_time" sono rispettivamente il tempo dove deve finire il taglio (partendo dall'inizio del filmato) e "end_time" il tempo dove deve iniziare il successivo (ovvero: viene tagliato il resto del filmato), i quali, vanno forniti nella forma h:mm:ss . Esempio:
${0} 0:30:00 1:30:00
Viene tagliata la prima mezzora di filmato e ne viene conservata la successiva ora.
EOF
fi
fi
###############################################################################
#______________________________________________________________________________
Ok, ma come lo si installa su iMac e, soprattutto, lo uso ?
Mi rendo conto che, chi è poco avvezzo a creare script e utilizzarli, potrebbe avere difficoltà con quanto scritto sopra: non sa come utilizzare lo script !
Bisogna operare in due modi:
- Installare lo Script dandogli come nome del file “UDA_ConvertiALIDVR_in_mpg”; questo articolo spiega come, sul proprio iMac, è possibile crearsi una cartella dove custodire i propri script e renderli disponibili facilmente da terminale.
- Utilizzare lo script da terminale in questo modo:
- Si apre una cartella nel Finder e, nella barra dei PREFERITI, si va su Filmati e qui si crea una cartella Videoregistratore .
- Si collega la chiavetta USB all’iMac, si apre il contenuto nel Finder e si sposta le cartelle delle videoregistrazioni che si desidera convertire (si trovano sotto la cartella ALIDVR) nella cartella precedentemente creata.
- Si apre un Terminale; per farlo, nel Finder, basta andare in Applicazioni->Utility->Terminale .
- Nel terminale si scrive (senza premere INVIO) il seguente comando:
cd
facendo attenzione a mantenere lo spazio finale, quindi, dal Finder si prende la cartella contenente il filmato che si desidera convertire, la si trascina nella finestra del terminale, si clicca su quest’ultima per renderla attiva e si preme INVIO (questo passaggio è un trucco per rendere “corrente” la cartella su cui si desidera operare, in modo facile e sicuro).
- Ora, sempre da terminale, si da il seguente comando:
UDA_ConvertiALIDVR_in_mpg
Tutto qui, il resto avviene da se; lo script, dopo aver concatenato i files presenti, fornisce delle istruzioni per eseguire il taglio. Le scrivo anche qui per completezza:
-
- Con un buon visualizzatore video (VLC, ad esempio) si apre il filmato e si cerca la posizione dove inizia la parte di filmato interessata e quella dove finisce; ad esempio, se inizia dopo mezzora e finisce dopo dopo un’ora, avremo che i tempi relativi saranno rispettivamente 0:30:00 e 1:30:00 .
- A terminale si esegue il seguente comando:
UDA_ConvertiALIDVR_in_mpg 0:30:00 1:30:00
I file prodotti in output dallo script possono poi essere spostati sulla chiavetta, in modo da poterli vedere con un visualizzatore di file MPG (alcuni televisori supportano questa possibilità).