Contenu | Rechercher | Menus

Annonce

Le forum rencontre en ce moment quelques soucis de charge, il est possible qu'une erreur soit affichée quand vous postez un message, ne rechargez pas la page au risque de poster une seconde fois votre message

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

Déjà un an…

#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

Acer Aspire One 150 8,9 "
Norhtec avec une Clé Usb bootable http://www.norhtec.com/products/mcsr/index.html

Toshiba Satellite L750

Hors ligne

#2 Le 13/05/2012, à 15:33

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)


Acer Aspire One 150 8,9 "
Norhtec avec une Clé Usb bootable http://www.norhtec.com/products/mcsr/index.html

Toshiba Satellite L750

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.


Acer Aspire One 150 8,9 "
Norhtec avec une Clé Usb bootable http://www.norhtec.com/products/mcsr/index.html

Toshiba Satellite L750

Hors ligne

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

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

Merci. Je vais essayer.

Hors ligne

Haut de page ↑