#1 Le 11/05/2012, à 16:11
- k3c
[Script/Python] convertir des vidéos mp4 en mkv dès qu'elles arrivent
Bonjour
Je récupère des vidéos avec TVDownloader
http://forum.ubuntu-fr.org/viewtopic.php?id=409313&p=1
Je copie ensuite ces vidéos sur ma Dune
http://hdland.fr/lang-en/lecteurs-multi … 34012.html
qui lit tous les formats, sauf le mp4
Comme j'oublie régulièrement de convertir mes vidéos, j'ai écrit un petit script tout simple, qui utilise pyinotify pour surveiller le répertoire ~/TVDownloader
Quand je lance TVDownloader et qu'un fichier .mp4 y est complètement écrit (surveillance de l'évènement IN_CLOSE_WRITE), une commande de conversion
ffmpeg -i fichier.mp4 -y -vcodec copy -acodec copy fichier.mkv
est lancée
le -y sert à forcer la création du fichier .mkv si un fichier partiel existait déjà.
Remplacer dans le script /home/gg/TVdownloader par votre répertoire d'installation de TVDownloader (ou un autre répertoire que vous voulez surveiller)
Le fichier
/tmp/pyinotify.pid
contient le pid du process daemon
Le code
# Example: daemonize pyinotify's notifier.
# Requires Python >= 2.5
import functools
import sys
import pyinotify
import subprocess
class Counter(object):
"""
Simple counter.
"""
def __init__(self):
self.count = 0
def plusone(self):
self.count += 1
class EventHandler(pyinotify.ProcessEvent):
def process_IN_CLOSE_WRITE(self, event):
print "Close_write:", event.pathname
fichier = event.pathname
if fichier[-4:].lower() == '.mp4':
process = subprocess.call(['ffmpeg', '-i', fichier, '-y', '-vcodec', 'copy' , '-acodec', 'copy', fichier[:-4] + '.mkv'])
def on_loop(notifier, counter):
"""
Dummy function called after each event loop, this method only
ensures the child process eventually exits (after 5 iterations).
"""
sys.stdout.write("Loop %d\n" % counter.count)
counter.plusone()
handler = EventHandler()
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm, handler)
wm.add_watch('/home/gg/TVDownloader', pyinotify.IN_CLOSE_WRITE)
on_loop_func = functools.partial(on_loop, counter=Counter())
try:
notifier.loop(daemonize=True, callback=on_loop_func,
pid_file='/tmp/pyinotify.pid', stdout='/tmp/stdout.txt')
except pyinotify.NotifierError, err:
print >> sys.stderr, err
Debian 12 sur Thinkpad reconditionné
Hors ligne
#2 Le 13/05/2012, à 14:33
- thom83
Re : [Script/Python] convertir des vidéos mp4 en mkv dès qu'elles arrivent
Où met-on ce script, et à quel moment le lance-t-on, à moins qu'il se lance lui-même ?
Hors ligne
#3 Le 13/05/2012, à 23:53
- k3c
Re : [Script/Python] convertir des vidéos mp4 en mkv dès qu'elles arrivent
Tu le lances au démarrage de ta machine par exemple, via un bête
python daemon_pyinotify.py
Ca te rend la main de suite, c'est un daemon, il tourne dans son coin.
Il y a juste une chose à savoir dans ce script, la ligne
process = subprocess.call(['ffmpeg', '-i', fichier, '-y', '-vcodec', 'copy' , '-acodec', 'copy', fichier[:-4] + '.mkv'])
peut être remplacée par ce que tu veux, mais si tu veux exécuter par exemple la commande
cp fichier /home/abc/traitement
tu ne mets pas les blancs, tu écris juste
process = subprocess.call(['cp', fichier,'/home/gg/traitement'])
(et enlever le test sur .mp4 si tu veux faire un truc différent).
Dernière modification par k3c (Le 14/05/2012, à 15:44)
Debian 12 sur Thinkpad reconditionné
Hors ligne
#4 Le 14/05/2012, à 06:37
- k3c
Re : [Script/Python] convertir des vidéos mp4 en mkv dès qu'elles arrivent
En fait, si tu regardes la doc, tu verras que mon exemple est juste le code du daemon de la doc pyinotify
https://github.com/seb-m/pyinotify/blob … /daemon.py
auquel j'ai ajouté la class EventHandler, piquée à
https://github.com/seb-m/pyinotify/blob … otifier.py
Ensuite j'ajoute une action (ffmpeg sur le fichier reçu, ou ce qu'on veut, cp, mv...).
J'ai testé en copiant 3 fichiers d'un coup dans la directory, pas de problème.
Debian 12 sur Thinkpad reconditionné
Hors ligne
#5 Le 14/05/2012, à 10:32
- thom83
Re : [Script/Python] convertir des vidéos mp4 en mkv dès qu'elles arrivent
Merci. Je vais essayer.
Hors ligne