Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/05/2012, à 17: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

Archlinux sur Xiaomi Air 13

Hors ligne

#2 Le 13/05/2012, à 15: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 14/05/2012, à 00: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, à 16:44)


Archlinux sur Xiaomi Air 13

Hors ligne

#4 Le 14/05/2012, à 07: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.


Archlinux sur Xiaomi Air 13

Hors ligne

#5 Le 14/05/2012, à 11:32

thom83

Re : [Script/Python] convertir des vidéos mp4 en mkv dès qu'elles arrivent

Merci. Je vais essayer.

Hors ligne