URL: https://linuxfr.org/users/mac_is_mac/journaux/edition-simple-de-fichiers-ts-sous-linux
Title: Edition simple de fichiers TS sous Linux
Authors: mac_is_mac
Date: 2014年11月01日T11:32:11+01:00
License: CC By-SA
Tags: télévision, enregistrement, mplayer, tnt, dvb et publicité
Score: 12
Je présente ici des petits scripts très simples permettant de découper des fichiers d'enregistrement TV, par exemple pour enlever la publicité.
Il existe des outils complexes permettant de faire cela (avidemux,pitivi,openshot,dvbcut), mais ils ont des lourdeurs et des limitations.
Par exemple, dvbcut est limité aux flux SD, et ni lui ni avidemux ne savent gérer les sous-titres.
Ici, on va couper les fichiers à la hache, sans essayer de comprendre le contenu. Le fichier est divisé en bloc de 100000 octets; le principe est de couper les morceaux qui nous intéressent.
L'inconvénient est qu'on a des coupures pas très nettes, l'avantage est qu'on est sûr qu'on ne perd rien.
Commençons par deux scripts basiques: coupebout et regardebout.
Le premier permet d'extraire un morceau de vidéo, le second montre quelques secondes à une position donnée.
coupebout fichier_depart bloc_debut bloc_fin fichier_de_sortie
````bash
#!/bin/sh
# coupebout
entree=1ドル
taille=2ドル
fin=3ドル< sortie=4ドル c=$((fin - taille + 1)) echo $c dd if=$entree of=$sortie ibs=100000 skip=$taille count=$c ```` regardebout fichier_depart bloc_debut
regardebout fichier_depart bloc_debut nombre_de_blocs
Par défaut, on affiche 30 blocs.
````bash
#!/bin/sh
# regardebout
entree=1ドル
position=2ドル
if [ 3ドル -gt 0 ];
then
longueur=3ドル
else
longueur=30
fi
dd if=$entree ibs=100000 skip=$position count=$longueur | mplayer -
````
Le deuxième script nécessite d'avoir installé mplayer
Le dernier script, resume-film, est le plus complexe. Il fabrique un fichier avi formé d'images du film numérotées, prises à intervalles régulier.
Par défaut, l'intervalle est de 512 blocs. Par dichotomie, on peut alors trouver assez rapidement l'endroit de la coupure. On peut affiner avec regardebout.
resume-film fichier_depart
resume-film fichier_depart ecart
resume-film fichier_depart ecart bloc_depart bloc_fin
````bash
#!/bin/bash
# resume-film
nom=1ドル
if [ "2ドル" == "" ]; then
ecart=512
else
ecart=2ドル
fi
if [ "4ドル" == "" ]; then
taille=`stat -c "%s" $nom`
fin=$((taille / 100000 - ecart / 2 ))
debut=0
else
debut=3ドル
fin=4ドル
fi
#j'écris hors code une ligne qui apparaît sous une forme étrange quand elle est dans le code:
````
base=$(basename ${nom} .ts)
````bash
repertoire=`mktemp -d /tmp/$nom.XXXXXX`
longueur=${#fin}
for i in `seq $debut $ecart $fin`
do
dd if=$nom ibs=100000 skip=$i count=50 | mplayer -nosound -frames 1 -vo png:z=9:outdir=$repertoire -
longueurb=${#i}
ii=$i
for q in `seq $longueurb $longueur`
do
ii="0"$ii
done
convert $repertoire/00000001.png -pointsize 50 -fill red -draw "text 70,70 '$i'" -resize 600 $repertoire/thumb-$ii.png
done
mencoder mf://$repertoire/thumb-*.png -mf type=png:fps=4 -ovc lavc -lavcopts vcodec=mpeg4 -oac copy -o $base-resume-$debut-$ecart-$fin.avi
rm -f $repertoire/thumb-*.png
rm -f $repertoire/00000001.png
rmdir $repertoire
````
Pour que le script fonctionne, il faut avoir installé mplayer, mencoder et imagemagick.
A la fin, on peut simplement concaténer les fichiers avec
cat bout1.ts bout2.ts bout3.ts> film.ts