]> git.parisson.com Git - telemeta.git/commitdiff
merge & reorganize video mastering utils
authoryomguy <yomguy@parisson.com>
Mon, 8 Apr 2013 13:16:35 +0000 (15:16 +0200)
committeryomguy <yomguy@parisson.com>
Mon, 8 Apr 2013 13:16:35 +0000 (15:16 +0200)
telemeta/util/kdenlive/auto_fade.py [changed mode: 0644->0755]
telemeta/util/kdenlive/auto_fade_batch.py [changed mode: 0644->0755]
telemeta/util/kdenlive/mlt_fix_threads.sh [new file with mode: 0755]
telemeta/util/kdenlive/mlt_process_batch.py [new file with mode: 0755]
telemeta/util/kdenlive/mlt_threads.sh [deleted file]
telemeta/util/kdenlive/process_batch.py [deleted file]
telemeta/util/transcode/create_thumbs.py [new file with mode: 0755]
telemeta/util/transcode/remux_fix_media.py [new file with mode: 0755]
telemeta/util/transcode/transcode.py [new file with mode: 0755]

old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/telemeta/util/kdenlive/mlt_fix_threads.sh b/telemeta/util/kdenlive/mlt_fix_threads.sh
new file mode 100755 (executable)
index 0000000..cf2c279
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+for file in `ls $1/*.sh`; do
+sudo perl -pi -e 's/threads=2/threads=8/g' $1/$file 
+sudo perl -pi -e 's/threads=4/threads=8/g' $1/$file
+sudo perl -pi -e 's/threads=6/threads=8/g' $1/$file
+done
diff --git a/telemeta/util/kdenlive/mlt_process_batch.py b/telemeta/util/kdenlive/mlt_process_batch.py
new file mode 100755 (executable)
index 0000000..b620ffd
--- /dev/null
@@ -0,0 +1,13 @@
+
+import os, sys
+
+if __name__ == '__main__':
+    dir = sys.argv[-1]
+
+    for filename in os.listdir(dir):
+        prefix, extension = os.path.splitext(filename)
+        path = dir + os.sep + filename
+        flag = path + '.processed'
+        if 'sh' in extension and not os.path.exists(flag):
+            os.system('nice -n 19 ' + path)
+            os.system('touch ' + flag)
diff --git a/telemeta/util/kdenlive/mlt_threads.sh b/telemeta/util/kdenlive/mlt_threads.sh
deleted file mode 100644 (file)
index cf2c279..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-for file in `ls $1/*.sh`; do
-sudo perl -pi -e 's/threads=2/threads=8/g' $1/$file 
-sudo perl -pi -e 's/threads=4/threads=8/g' $1/$file
-sudo perl -pi -e 's/threads=6/threads=8/g' $1/$file
-done
diff --git a/telemeta/util/kdenlive/process_batch.py b/telemeta/util/kdenlive/process_batch.py
deleted file mode 100644 (file)
index b620ffd..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-import os, sys
-
-if __name__ == '__main__':
-    dir = sys.argv[-1]
-
-    for filename in os.listdir(dir):
-        prefix, extension = os.path.splitext(filename)
-        path = dir + os.sep + filename
-        flag = path + '.processed'
-        if 'sh' in extension and not os.path.exists(flag):
-            os.system('nice -n 19 ' + path)
-            os.system('touch ' + flag)
diff --git a/telemeta/util/transcode/create_thumbs.py b/telemeta/util/transcode/create_thumbs.py
new file mode 100755 (executable)
index 0000000..dc3fd20
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+
+import os, sys, string
+import logging
+
+class Logger:
+    """A logging object"""
+
+    def __init__(self, file):
+        self.logger = logging.getLogger('myapp')
+        self.hdlr = logging.FileHandler(file)
+        self.formatter = logging.Formatter('%(message)s')
+        self.hdlr.setFormatter(self.formatter)
+        self.logger.addHandler(self.hdlr)
+        self.logger.setLevel(logging.INFO)
+
+log_file = 'thumbs.log'
+logger = Logger(log_file)
+root_dir = sys.argv[-1]
+args = sys.argv[1:-1]
+source_format = 'webm'
+done = []
+preview_tc = '00:00:05'
+
+if os.path.exists(log_file):
+    f = open(log_file, 'r')
+    for line in f.readlines():
+        done.append(line[:-1])
+    f.close()
+
+for root, dirs, files in os.walk(root_dir):
+    for file in files:
+        path = os.path.abspath(root + os.sep + file)
+        name, ext = os.path.splitext(file)
+        if ext[1:] == source_format:
+            dest = os.path.abspath(root + os.sep + name + '.png')
+            if not dest in done or '--force' in args:
+                command = 'ffmpeg -ss '+ preview_tc + ' -i ' + path + '  -y ' + dest
+                os.system(command)
+                logger.logger.info(dest)
+
+print "DONE!"
diff --git a/telemeta/util/transcode/remux_fix_media.py b/telemeta/util/transcode/remux_fix_media.py
new file mode 100755 (executable)
index 0000000..c569169
--- /dev/null
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+
+import os, sys, psutil
+import datetime
+from ebml.utils.ebml_data import *
+
+class FixCheckMedia(object):
+
+    def __init__(self, dir):
+        self.dir = dir
+        self.tmp_dir = '/home/telecaster/tmp/'
+        if not os.path.exists(self.tmp_dir):
+            os.makedirs(self.tmp_dir)
+
+    def process(self):
+        webm_fixed_log = 'webm.fixed'
+        webm_tofix_log = 'webm.tofix'
+        mp3_fixed_log = 'mp3.fixed'
+        mp3_tofix_log = 'mp3.tofix'
+
+        for root, dirs, files in os.walk(self.dir):
+            for filename in files:
+                source = root + os.sep + filename
+                name = os.path.splitext(filename)[0]
+                ext = os.path.splitext(filename)[1][1:]
+
+                if ext == 'webm' and os.path.getsize(source):
+                    dir_files = os.listdir(root)
+
+                    if not webm_fixed_log in dir_files:
+                        print source    
+                        self.fix_webm(source)
+                        f = open(root + os.sep + webm_fixed_log, 'w')
+                        f.close()
+                        if os.path.exists(root + os.sep + webm_tofix_log):
+                            os.remove(root + os.sep + webm_tofix_log)
+            
+                    if mp3_tofix_log in dir_files and not mp3_fixed_log in dir_files:
+                        for file in dir_files:
+                            dest_ext = os.path.splitext(file)[1][1:]
+                            if dest_ext == 'mp3':
+                                dest = root + os.sep + file
+                                print dest
+                                self.fix_mp3(source, dest)
+                                f = open(root + os.sep + mp3_fixed_log, 'w')
+                                f.close()
+                                os.remove(root + os.sep + mp3_tofix_log)
+                                #break
+
+
+    def hard_fix_webm(self, path):
+        try:
+            tmp_file = self.tmp_dir + 'out.webm '
+            command = 'ffmpeg -loglevel 0 -i '+ path + ' -vcodec libvpx -vb 500k -acodec libvorbis -aq 7 -f webm -y ' + tmp_file + ' > /dev/null'
+            print command
+            os.system(command)
+            command = 'mv '  + tmp_file + path
+            os.system(command)
+        except:
+            pass
+
+
+    def fix_webm(self, path):
+        try:
+            tmp_file = self.tmp_dir + 'out.webm'
+            command = '/usr/local/bin/ffmpeg -loglevel 0 -i ' + path + ' -vcodec copy -acodec copy -f webm -y ' + tmp_file + ' > /dev/null'
+            print command
+            os.system(command)
+            ebml_obj = EBMLData(tmp_file)
+            offset = ebml_obj.get_first_cluster_seconds()
+            command = '/usr/local/bin/ffmpeg -loglevel 0 -ss ' + str(offset) + ' -i ' + tmp_file + ' -vcodec copy -acodec copy -f webm -y ' + path + ' > /dev/null'
+            print command
+            os.system(command)
+        except:
+            pass
+
+    def fix_mp3(self, source, path):
+        try:
+            command = '/usr/local/bin/ffmpeg -loglevel 0 -i '+ source + ' -vn -aq 6 -y ' + path + ' > /dev/null'
+            print command
+            os.system(command)
+        except:
+            pass
+
+def get_pids(name, args=None):
+    """Get a process pid filtered by arguments and uid"""
+    pids = []
+    for proc in psutil.process_iter():
+        if proc.cmdline:
+            if name == proc.name:
+                if args:
+                    if args in proc.cmdline:
+                        pids.append(proc.pid)
+                else:
+                    pids.append(proc.pid)
+    return pids
+
+dir = sys.argv[-1]
+
+path =  os.path.abspath(__file__)
+pids = get_pids('python2.6',args=path)
+
+print datetime.datetime.now()
+if len(pids) <= 1:
+    print 'starting process...'
+    f = FixCheckMedia(dir)
+    f.process()
+    print 'process finished.\n'
+else:
+    print 'already started !\n'
diff --git a/telemeta/util/transcode/transcode.py b/telemeta/util/transcode/transcode.py
new file mode 100755 (executable)
index 0000000..2abc712
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+
+import os, sys, string
+import logging
+
+class Logger:
+    """A logging object"""
+
+    def __init__(self, file):
+        self.logger = logging.getLogger('myapp')
+        self.hdlr = logging.FileHandler(file)
+        self.formatter = logging.Formatter('%(message)s')
+        self.hdlr.setFormatter(self.formatter)
+        self.logger.addHandler(self.hdlr)
+        self.logger.setLevel(logging.INFO)
+
+log_file = 'transcoding.log'
+logger = Logger(log_file)
+root_dir = sys.argv[-1]
+args = sys.argv[1:-1]
+source_format = 'webm'
+done = []
+ffmpeg_args = {'mp3' : ' -vn -acodec libmp3lame -aq 6 -ac 1 ',
+               'ogg' : ' -vn -acodec copy ',
+               'mp4' : ' -vcodec libx264 -r 24 -b 512k -threads 6 -acodec libfaac -ar 48000 -ab 96k -ac 1 ',
+              }
+
+if os.path.exists(log_file):
+    f = open(log_file, 'r')
+    for line in f.readlines():
+        done.append(line[:-1])
+    f.close()
+
+for root, dirs, files in os.walk(root_dir):
+    for file in files:
+        path = os.path.abspath(root + os.sep + file)
+        name, ext = os.path.splitext(file)
+        if ext[1:] == source_format:
+            for format in ffmpeg_args.keys():
+                dest = os.path.abspath(root + os.sep + name + '.' + format)
+                if not dest in done or '--force' in args:
+                    command = 'ffmpeg -i ' + path + ffmpeg_args[format] + ' -y ' + dest
+                    os.system(command)
+                    logger.logger.info(dest)
+
+print "DONE!"