Pense bête pour l’installation d’un tuner USB-TNT sur linux pour enregistrer la TV
Tuner chinois de dealextreme http://dx.com/p/wandtv-usb-dvb-t-tv-tuner-with-remote-8325 à $16
1 2 3 4 5 6 7 |
sudo su apt-get install unzip wget https://raw.github.com/torvalds/linux/master/Documentation/dvb/get_dvb_firmware perl get_dvb_firmware it9135 cp dvb-usb-it9135-0* /lib/firmware/ reboot |
Utilisation avec vdr, visualisation sur le réseau avec minidlna
Remise à jour des chaines
Attention : long (à faire dans un screen si depuis ssh)
1 2 3 4 5 6 7 8 |
sudo service vdr stop #-c CH = Suisse, -R 0 = pas de radio, -E 0 = pas de TV payante # sudo w_scan -c CH -R 0 -E 0 > /var/lib/vdr/channels.conf sudo w_scan -c CH -F -t 3 > /var/lib/vdr/channels.conf # Eventuellement trier à la main le ficher channels.conf pour avoir les favoris en premier sudo service vdr start |
Découper les enregistrements TS avec avconv
1 |
python decoupe.py -i monfilm.ts -s 00:01:10 00:40:20 00:47:10 01:05:20 |
Découpe le fichier monfilm.ts en partant de 1mn10 jusqu’à 1h5m20s, en sautant la période 40mn20 à 47mn10
Résultat dans monfilm.new.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
#!/usr/bin/env python # -*- coding: utf-8 -*- # decoupe.py import subprocess import argparse import os,sys import datetime def decoupe(fichier, index, tmp, output): ''' Découpage d'un fichier ts à partir d'un fichier d'index. Les d'index sont construit par 2 au format HH:MM:SS (début et fin de segment) La video finale sera un assemblage de la source : idx1 idx2 idx3 idx4 | | | | ------+++++++++++--------++++++++++++--------- ''' # Test d'existance du fichier if not(os.path.exists(fichier)): raise IOError("Fichier '%s' introuvable" % fichier) # Découpe du fichier original assemblage=[] zero = datetime.datetime(2000,1,1,0,0,0) duree_totale = zero print "\nDécoupe du fichier :" for i in idx: if i: (i1,i2) = i.split() debut=datetime.datetime.strptime(i1,"%H:%M:%S") fin=datetime.datetime.strptime(i2,"%H:%M:%S") duree = zero + (fin-debut) duree_totale += (fin-debut) duree_s=(fin-debut).seconds debut = debut.strftime("%H:%M:%S") duree = duree.strftime("%H:%M:%S") assemblage.append([debut, duree, os.path.join(tmp,"decoupe_%s_%s.ts" % (debut.replace(":",""),duree.replace(":",""))),duree_s]) args_exe = ["avconv", "-loglevel","quiet","-vcodec","copy","-acodec","copy", "-ac", "2"] output = output+"_["+duree_totale.strftime("%Hh%M")+"].ts" if len(assemblage)==1: # Un seul segment, pas de fichier temporaire ! print "Découpe du segment depuis %s pendant %s (%s s)" % (debut, duree, duree_s) args = args_exe + ["-ss",debut,"-t",duree,output] subprocess.call(args) else: # Sinon, découpe en un fichier par segment for (debut, duree, f, duree_s) in assemblage: print "Segment depuis %s pendant %s (%s s)" % (debut, duree, duree_s) args = args_exe + ["-ss",debut,"-t",duree,f] subprocess.call(args) # Ré-assemblage en un seul fichier ts print "\nRé-assemblage du fichier final" fichiers=[f for (debut, fin, f, duree_s) in assemblage] args = ["/usr/bin/avconv","-i","concat:%s" % ("|".join(fichiers)),"-loglevel","warning","-vcodec","copy","-acodec","copy",output] for f in fichiers: print "Effacement du fichier temporaire",f os.remove(f) print "\nFichier",output,"créé." if __name__=="__main__": t=datetime.datetime.now() parser = argparse.ArgumentParser(description='''Découpe d'un fichier video .ts avec avconv''' , epilog='''La durée du vichier vidéo sera ajoutée au nom sous la forme 'nom_fichier_HH-MM.ts''') parser.add_argument('-i','--fichier', help='Fichier vidéo .ts à traiter', required=True) parser.add_argument('-s','--segments', nargs='*', help='Segments de découpe. Par paire HH:MM:SS (debut et fin de segment)', required=True) parser.add_argument('-t','--tmp', help='Emplacement du dossier temporaire (defaut=%(default)s)', default="/tmp", metavar="DOSSIER") parser.add_argument('-o','--output', help='''Nom du fichier vidéo final découpé (sans extension). Par défaut nom du fichier source avec ajout de l'extension .new.ts''', metavar="FICHIER") args = parser.parse_args() if args.output is None: # Pas de nom de fichier de sortie, on met celui par défaut (f, e) = os.path.splitext(args.fichier) args.output = f+".new" # Index passés dans la ligne de commande idx=[] try: for n in range(0,len(args.segments),2): idx.append("%s %s" % (args.segments[n],args.segments[n+1])) except IndexError as e: print "Mauvais nombre d'index de segment passés dans --segment" sys.exit(1) decoupe(fichier=args.fichier, index=idx, tmp=args.tmp, output=args.output) if args.conversion: conversion(args.output, args.conversion) tf=(datetime.datetime.now()-t).seconds print "Durée du traitement : %02dm%02ds\n" % (tf/60, tf % 60) |
Création d’une planche contact à partir d’une vidéo avec mplayer
1 |
planche.sh monfilm.ts |
Planche de contact avec une image par minute créé dans monfilm.ts.jpg
1 2 3 4 5 |
#! /bin/sh # planche.sh # création d'une planche contact à partir d'une vidéo en prenant une image par minute mplayer -benchmark -nosound -quiet -zoom -vf scale=320:-3 -vo jpeg:outdir=/tmp -sstep 60 "$1" montage -label '%f' -geometry '+6+6>' -pointsize 24 -tile 5x /tmp/0*.jpg "$1.jpg" |