From b83e78261a2101b275b32999638f97018bb112f6 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 27 Feb 2024 16:44:41 +0100 Subject: [PATCH] merge ffmpeg options, fix time offset --- bin/mastering/mastering.py | 42 +++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/bin/mastering/mastering.py b/bin/mastering/mastering.py index 873c239..d50a712 100755 --- a/bin/mastering/mastering.py +++ b/bin/mastering/mastering.py @@ -30,18 +30,23 @@ class TeleCasterMastering(object): source_formats = ['webm',] dest_formats = { 'mp3' : {'in': '', 'out': '-vn -acodec libmp3lame -aq 6'}, - 'mp4' : {'in': '', 'out': '-c:v libx264 -maxrate 1100k -c:a aac -b:a 128k'}, - 'png' : {'in': '-ss 0:0:10', 'out': '-frames:v 1 -y'} + 'mp4' : {'in': '', 'out': '-c:v libx264-c:a aac -b:a 96k'}, + 'jpg' : {'in': '-ss 0:0:10', 'out': '-frames:v 1 -y'} } nvidia_formats = {'mp4': {'in': '', 'out': '-c:v h264_nvenc -maxrate 1100k -c:a aac -b:a 128k'}} + vaapi_formats = {'mp4': {'in': '-hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi', + 'out': '-c:v h264_vaapi -c:a aac -b:a 96k'}} + date_limit = datetime.datetime(year=2024, month=2, day=27) tmp_dir = "/tmp/" def __init__(self, root_dir, log_file='/tmp/telecaster.log', nvidia_mode=False, + vaapi_mode=False, auto_offset_mode=False, - dry_run=False): + dry_run=False, + force_mode=False): self.log_file = log_file self.logger = Logger(self.log_file) @@ -50,8 +55,13 @@ class TeleCasterMastering(object): if self.nvidia_mode: for f in self.nvidia_formats: self.dest_formats[f] = self.nvidia_formats[f] + self.vaapi_mode = vaapi_mode + if self.vaapi_mode: + for f in self.vaapi_formats: + self.dest_formats[f] = self.vaapi_formats[f] self.auto_offset_mode = auto_offset_mode self.dry_run = dry_run + self.force_mode = force_mode def get_ext_in_dir(self, extension, root): files = os.listdir(root) @@ -112,15 +122,12 @@ class TeleCasterMastering(object): ffmpeg_args = self.dest_formats[dest_format] dest = filename + '.' + dest_format - if not os.path.exists(dest) or '--force' in self.args: - if dest_format == 'png': - offset_arg = ffmpeg_args['in'] - elif offset: - offset_arg = '-ss ' + str(datetime.timedelta(seconds=offset)) - else: - offset_arg = '' + if not os.path.exists(dest) or self.force_mode: + ffmpeg_args_in = ffmpeg_args['in'] + if offset: + ffmpeg_args_in = ffmpeg_args_in + ' -ss -' + str(datetime.timedelta(seconds=offset)) - command = 'ffmpeg -loglevel 0 ' + offset_arg + ' -i "' + file + '" ' + ffmpeg_args['out'] +' -y "' + dest + '"' + command = 'ffmpeg -loglevel 0 ' + ffmpeg_args_in + ' -i "' + file + '" ' + ffmpeg_args['out'] +' -y "' + dest + '"' print(command) self.logger.logger.info(command) @@ -133,7 +140,7 @@ class TeleCasterMastering(object): for root, dirs, files in os.walk(self.root_dir): for dir in dirs: path = root + os.sep + dir - print(path) + # print(path) dir_files = os.listdir(path) source_files = [] for file in dir_files: @@ -165,15 +172,18 @@ class TeleCasterMastering(object): def main(): parser = argparse.ArgumentParser() parser.add_argument('--dir', metavar='directory', type=str, help='media directory') - parser.add_argument('--log', metavar='log_file', type=str, help='log file', default='/tmp/telecaster.log') - parser.add_argument('--nvidia', metavar='nvidia', type=bool, help='use GPU nvidia encoder') - parser.add_argument('--auto_offset', metavar='auto_offset', type=bool, help='add auto offset based on audio correlation') - parser.add_argument('--dry_run', metavar='dry_run', type=bool, help='dry run') + parser.add_argument('--log', metavar='logfile', type=str, help='log file', default='/tmp/telecaster.log') + parser.add_argument('--nvidia', help='use GPU nvidia encoder', action="store_true") + parser.add_argument('--vaapi', help='use VAAPI encoder', action="store_true") + parser.add_argument('--auto_offset', help='add auto offset based on audio correlation', action="store_true") + parser.add_argument('--dry_run', help='dry run', action="store_true") + parser.add_argument('--force_mde', help='force mode', action="store_true") args = parser.parse_args() t = TeleCasterMastering( args.dir, log_file=args.log, nvidia_mode=args.nvidia, + vaapi_mode=args.vaapi, auto_offset_mode=args.auto_offset, dry_run=args.dry_run ) -- 2.39.5