From: Guillaume Pellerin Date: Thu, 22 Dec 2022 11:24:11 +0000 (+0100) Subject: add transcode script with libx264 X-Git-Tag: 1.2~10 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=1b29aaf822d5a0e1f534d3c3419271491583433f;p=telecaster-server.git add transcode script with libx264 --- diff --git a/bin/transcode_nonv.py b/bin/transcode_nonv.py new file mode 100644 index 0000000..7ac7980 --- /dev/null +++ b/bin/transcode_nonv.py @@ -0,0 +1,77 @@ +#!/usr/bin/python + +import os, sys, string +import logging +import datetime + + +class Logger: + """A logging object""" + + def __init__(self, file): + self.logger = logging.getLogger('myapp') + self.hdlr = logging.FileHandler(file) + self.formatter = logging.Formatter('%(asctime)s %(message)s') + self.hdlr.setFormatter(self.formatter) + self.logger.addHandler(self.hdlr) + self.logger.setLevel(logging.INFO) + + +class TelemetaTranscode(object): + """docstring for TelemetaTranscode""" + + source_formats = ['webm',] + + dest_formats_nonv = { + 'mp3' : '-vn -acodec libmp3lame -aq 6', + 'mp4' : '-c:v libx264 -crf 17 -maxrate 1100k -bufsize 1835k -c:a aac -b:a 128k', + 'png' : '-ss 0:0:10', + } + + date_limit = datetime.datetime(year=2021, month=6, day=24) + + def __init__(self, args): + self.args = args + self.log_file = args[-1] + self.root_dir = args[-2] + self.logger = Logger(self.log_file) + + def get_ext_in_dir(self, extension, root): + files = os.listdir(root) + exts = [] + for f in files: + name, ext = os.path.splitext(f) + ext = ext[1:] + if not ext in exts: + exts.append(ext) + return extension in exts + + def run(self): + for root, dirs, files in os.walk(self.root_dir): + for file in files: + path = os.path.abspath(root + os.sep + file) + name, ext = os.path.splitext(file) + ext = ext[1:] + date_dir = datetime.datetime.fromtimestamp(os.path.getmtime(path)) + if ext in self.source_formats and date_dir > self.date_limit: + print(date_dir) + for format, ffmpeg_args in self.dest_formats.iteritems(): + local_file = name + '.' + format + dest = os.path.abspath(root + os.sep + local_file) + local_files = os.listdir(root) + if not (local_file in local_files or self.get_ext_in_dir(format, root)) or '--force' in self.args: + if ext == 'webm' and format == 'ogg': + ffmpeg_args = '-vn -acodec copy' + if format == 'png': + command = '/usr/local/bin/ffmpeg -loglevel 0 ' + ffmpeg_args + ' -i "' + path + '" -frames:v 1 -y "' + dest + '"' + else: + command = '/usr/local/bin/ffmpeg -loglevel 0 -i "' + path + '" ' + ffmpeg_args + ' -y "' + dest + '"' + self.logger.logger.info(command) + if not '--dry-run' in self.args: + os.system(command) + print(command) + + +if __name__ == '__main__': + t = TelemetaTranscode(sys.argv[1:]) + t.run() diff --git a/bin/transcode_nv.py b/bin/transcode_nv.py index b832ae5..c621e52 100644 --- a/bin/transcode_nv.py +++ b/bin/transcode_nv.py @@ -20,8 +20,7 @@ class Logger: class TelemetaTranscode(object): """docstring for TelemetaTranscode""" - threads = 4 - source_formats = ['webm', 'mp4'] + source_formats = ['webm',] dest_formats = { 'mp3' : '-vn -acodec libmp3lame -aq 6', 'mp4' : '-c:v h264_nvenc -maxrate 1100k -c:a aac -b:a 128k', @@ -36,7 +35,6 @@ class TelemetaTranscode(object): self.root_dir = args[-2] self.logger = Logger(self.log_file) - def get_ext_in_dir(self, extension, root): files = os.listdir(root) exts = [] diff --git a/bin/transcode_nv2.py b/bin/transcode_nv2.py deleted file mode 100644 index 40b8faa..0000000 --- a/bin/transcode_nv2.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/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('%(asctime)s %(message)s') - self.hdlr.setFormatter(self.formatter) - self.logger.addHandler(self.hdlr) - self.logger.setLevel(logging.INFO) - - -class TelemetaTranscode(object): - """docstring for TelemetaTranscode""" - - threads = 4 - source_formats = ['webm',] - dest_formats = { - 'mp3' : '-vn -acodec libmp3lame -aq 3', - 'mp4' : '-c:v h264_nvenc -maxrate 1100k -c:a aac -b:a 96k', - 'png' : '-ss 0:0:10', - } - - def __init__(self, args): - self.args = args - self.log_file = args[-1] - self.root_dir = args[-2] - self.logger = Logger(self.log_file) - - - def get_ext_in_dir(self, extension, root): - files = os.listdir(root) - exts = [] - for f in files: - name, ext = os.path.splitext(f) - ext = ext[1:] - if not ext in exts: - exts.append(ext) - return extension in exts - - def run(self): - for root, dirs, files in os.walk(self.root_dir): - for file in files: - path = os.path.abspath(root + os.sep + file) - name, ext = os.path.splitext(file) - ext = ext[1:] - if ext in self.source_formats: - for format, ffmpeg_args in self.dest_formats.iteritems(): - local_file = name + '.' + format - dest = os.path.abspath(root + os.sep + local_file) - local_files = os.listdir(root) - if not (local_file in local_files or self.get_ext_in_dir(format, root)) or '--force' in self.args: - if ext == 'webm' and format == 'ogg': - ffmpeg_args = '-vn -acodec copy' - if format == 'png': - command = 'ffmpeg -loglevel 0 ' + ffmpeg_args + ' -i "' + path + '" -frames:v 1 -y "' + dest + '"' - else: - command = 'ffmpeg -loglevel 0 -i "' + path + '" ' + ffmpeg_args + ' -y "' + dest + '"' - self.logger.logger.info(command) - if not '--dry-run' in self.args: - os.system(command) - print(command) - - -if __name__ == '__main__': - t = TelemetaTranscode(sys.argv[1:]) - t.run()