From 60cb65998cfd806324cefa0d6a8efdd661879a9d Mon Sep 17 00:00:00 2001 From: Overwatch Date: Wed, 27 Aug 2014 21:19:41 +0200 Subject: [PATCH] Rewrite using a modular command assembler; new features include: - "extract audio" workflow: video -> wav|ogg - majorly cleaned up code - both --audio and --video codec options now accept "copy" and "drop" - dropped ogv support --- aux.py | 16 +++ doc/command_assembler.png | Bin 0 -> 98436 bytes over-video.py | 274 +++++++++++++++++++++++++------------- 3 files changed, 200 insertions(+), 90 deletions(-) create mode 100644 doc/command_assembler.png diff --git a/aux.py b/aux.py index e111f5c..329847e 100644 --- a/aux.py +++ b/aux.py @@ -1,6 +1,8 @@ #! /bin/env python3 # encoding: utf-8 +import os +import pathlib import queue import subprocess import sys @@ -147,3 +149,17 @@ def parse_fps(raw): return float(num) / float(den) return float(raw) + +# -------------------------------------------------- + +def to_Path(raw_path): + ''' + Returns pathlib.Path pointing to raw_path, handling "~/" correctly. + + To be removed after python:3.5 move. + ''' + + if raw_path.startswith('~'): + raw_path = os.path.expanduser(raw_path) + + return pathlib.Path(raw_path) diff --git a/doc/command_assembler.png b/doc/command_assembler.png new file mode 100644 index 0000000000000000000000000000000000000000..7da9b39eb082c885ac2b9586c90488ccaca33b37 GIT binary patch literal 98436 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 literal 0 HcmV?d00001 diff --git a/over-video.py b/over-video.py index 3f9868b..36de28f 100755 --- a/over-video.py +++ b/over-video.py @@ -10,7 +10,7 @@ import subprocess import tempfile import time -from aux import Command, parse_fps +from aux import Command, parse_fps, to_Path from version import _version # -------------------------------------------------- @@ -20,36 +20,87 @@ _print = over.core.textui.Output('over.video') # -------------------------------------------------- +# see doc/command_assembler.png command = over.core.types.ndict() command.identify = Command('ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', 'INFILE') command.normalize_prepass = Command('ffmpeg', '-i', 'INFILE', '-af', 'volumedetect', '-f', 'null', '/dev/null') -command.encode_theora = Command('ffmpeg', '-i', 'INFILE', '-codec:v', 'libtheora', '-qscale:v', 'VQ', 'VFILTER', '-codec:a', 'libvorbis', '-qscale:a', 'AQ', 'NORMALIZE', 'OUTFILE') -command.encode_x264 = Command('ffmpeg', '-i', 'INFILE', '-c:v', 'libx264', '-preset', 'slow', '-crf', 'VQ', '-profile:v', 'high', '-level', '4.2', 'VFILTER', '-codec:a', 'libvorbis', '-qscale:a', 'AQ', 'NORMALIZE', 'OUTFILE') -command.encode_wav = Command('ffmpeg', '-i', 'INFILE', '-codec:a', 'pcm_s16le', 'NORMALIZE', 'OUTFILE') -command.normalize = Command('-filter:a', 'VOLUME') -command.vfilter = Command('-filter:v', 'ARGS') +command.encode_generic = Command('ffmpeg', '-i', 'INFILE', 'VIDEO', 'AUDIO', 'OUTFILE') +command.sub_vorbis = Command('-codec:a', 'libvorbis', '-qscale:a', 'QUALITY', 'NORMALIZE') +command.sub_pcm = Command('-codec:a', 'pcm_s16le', 'NORMALIZE') +command.sub_theora = Command('-codec:v', 'libtheora', '-qscale:v', 'QUALITY', 'VFILTER') +command.sub_x264 = Command('-codec:v', 'libx264', '-preset', 'slow', '-crf', 'QUALITY', '-profile:v', 'high', '-level', '4.2', 'VFILTER') +command.sub_normalize = Command('-filter:a', 'VOLUME') +command.sub_vfilter = Command('-filter:v', 'ARGS') # -------------------------------------------------- if __name__ == '__main__': - main = over.core.app.Main('Over-Video', "%d (%s)" %_version, 'AWARE-Overwatch Joint Software License', '~/.over/video.cfg') - main.add_option('profile', 'str', 'x264', 'Encoding profile to use. Available are either §mtheora§/ for Theora and Vorbis in an Ogg container, §mx264§/ for H.264 and Vorbis in a Matroska container, or §mwav§/ which just extracts audio into a wav for further processing.') - main.add_option('video-quality', 'float', 22, 'Video encoding quality. Use 0-10 for Theora (0 being the lowest, 5-7 is generally watchable) and 0-51 for x264 (0 being lossless, 18-28 is reasonable).', short_name='v') - main.add_option('audio-quality', 'float', 2, 'Audio encoding quality with -1 being the worst and 10 being the best.', short_name='a') - main.add_option('normalize', 'bool', True, 'Normalize the audio track.', short_name='N') - main.add_option('normalize-target', 'float', -20.0, 'Target mean volume to target.', short_name='n') - main.add_option('ffmpeg-vfilter', 'str', "", 'Raw ffmpeg -filter:v options, e.g. "scale=1280:-1"', short_name='f') + main = over.core.app.Main('Over-Video', '%d (%s)' %_version, 'AWARE-Overwatch Joint Software License', '~/.over/video.cfg') + main.add_option('audio', 'str', 'vorbis', 'Audio codec to use, either §mvorbis§/, §mpcm§/, §mcopy§/ or §mdrop§/.', short_name='a') + main.add_option('audio-quality', 'float', 2, 'Audio encoding quality with -1 being the worst and 10 being the best.', short_name='q') + main.add_option('video', 'str', 'x264', 'Video codec to use, either §mx264§/, §mtheora§/, §mcopy§/ or §mdrop§/.', short_name='v') + main.add_option('video-quality', 'float', 22, 'Video encoding quality. Use 0-10 for Theora (0 being the lowest, 5-7 is generally watchable) and 0-51 for x264 (0 being lossless, 18-28 is reasonable).', short_name='Q') + main.add_option('normalize', 'bool', True, 'Normalize the audio track.', short_name='n') + main.add_option('normalize-target', 'float', -20.0, 'Target mean volume to target.', short_name='N') + main.add_option('ffmpeg-vfilter', 'str', '', 'Raw ffmpeg -filter:v options, e.g. "scale=1280:-1"', short_name='f') main.add_option('move-source', 'str', '', 'Move source file to this directory after conversion.', short_name='m') - main.add_option('dump-commands', 'bool', False, 'Print ffmpeg commands that would be executed. Implies §B--no-§garmed§/. If §B--§gnormalize§/ is in effect, the normalization pre-pass will still be performed so that the proper volume correction can be computed.', short_name='D') + main.add_option('dump-commands', 'bool', False, 'Print ffmpeg commands that would be executed. If §B--§gnormalize§/ is in effect, the normalization pre-pass will still be performed so that the proper volume correction can be computed.', short_name='D') main.add_option('armed', 'bool', False, 'Perform the suggested action.', short_name='A', use_cfg_file=False) main.enable_help('h') main.add_help('Description', ['Over-Video is a simple video converter.']) main.parse() - _print('using profile §b%s§/: video_quality=%.1f, audio_quality=%.1f, normalize=%s' %(main.cfg.profile, main.cfg.video_quality, main.cfg.audio_quality, '%.1f dB' %(main.cfg.normalize_target) if main.cfg.normalize else 'None')) +# -------------------------------------------------- +# cfg checks + + files = over.core.types.ndict() + audio_words = [] + video_words = [] + files.container = 'mkv' + + if main.cfg.audio in ('copy', 'drop'): + audio_words.append('§c%s§/' %(main.cfg.audio)) + else: + audio_words.append('§gcodec§/=§m%s§/' %(main.cfg.audio)) + + if main.cfg.audio == 'vorbis': + audio_words.append('§gquality§/=§m%.1f§/' %(main.cfg.audio_quality)) + + if main.cfg.normalize: + audio_words.append('§gnormalize§/=§m%.1f dB§/' %(main.cfg.normalize_target)) + + if main.cfg.video in ('copy', 'drop'): + video_words.append('§c%s§/' %(main.cfg.video)) + + else: + video_words.append('§gcodec§/=§m%s§/' %(main.cfg.video)) + + video_words.append('§gquality§/=§m%.1f§/' %(main.cfg.video_quality)) + + if main.cfg.ffmpeg_vfilter: + video_words.append('§gvfilter§/=§m%s§/' %(main.cfg.ffmpeg_vfilter)) + + if main.cfg.video == 'drop': + if main.cfg.audio == 'pcm': + files.container = 'wav' + elif main.cfg.audio == 'vorbis': + files.container = 'ogg' + + _print('input parameters:', prefix.start) + _print('audio: %s' %(', '.join(audio_words))) + _print('video: %s' %(', '.join(video_words))) + _print('container: §gtype§/=§m%s§/' %(files.container)) + + if main.cfg.audio not in ('drop', 'copy', 'pcm', 'vorbis'): + _print('unknown audio codec', prefix.fail) + raise RuntimeError + + if main.cfg.video not in ('drop', 'copy', 'theora', 'x264'): + _print('unknown video codec', prefix.fail) + raise RuntimeError if not main.targets: - _print("no files specified", prefix.warn) + _print('no files specified', prefix.warn) for tgt in main.targets: print() @@ -60,6 +111,9 @@ if __name__ == '__main__': _print('processing §B%s§/' %(tgt), prefix.start) + # -------------------------------------------------- + # identify the input file + command.identify.reset() command.identify.INFILE = tgt command.identify.run() @@ -67,40 +121,51 @@ if __name__ == '__main__': identify_dict = json.loads(identify_raw.decode('utf-8')) info = over.core.types.ndict() - info.duration = float(identify_dict['format']['duration']) - video_streams = [s for s in identify_dict['streams'] if s['codec_type'] == 'video'] - audio_streams = [s for s in identify_dict['streams'] if s['codec_type'] == 'audio'] + try: + info.duration = float(identify_dict['format']['duration']) + + video_streams = [s for s in identify_dict['streams'] if s['codec_type'] == 'video'] + audio_streams = [s for s in identify_dict['streams'] if s['codec_type'] == 'audio'] + + amount_vs = len(video_streams) + amount_as = len(audio_streams) + + if amount_vs != 1: + _print('detected §r%d§/ video streams' %(amount_vs), prefix.fail) + main.exit(1) + + if amount_as != 1: + _print('detected §r%d§/ audio streams' %(amount_as), prefix.fail) + main.exit(1) + + video = video_streams[0] + audio = audio_streams[0] + + info.video_codec = video['codec_name'] + info.video_size_x = video['width'] + info.video_size_y = video['height'] + info.video_fps = over.core.textui.Unit(parse_fps(video['r_frame_rate']), 'Hz') + info.video_bitrate = over.core.textui.Unit(video['bit_rate'], 'b/s') if 'bit_rate' in video else '§r??§/' + + info.audio_codec = audio['codec_name'] + info.audio_channels = audio['channels'] + info.audio_samplerate = over.core.textui.Unit(audio['sample_rate'], 'Hz') + info.audio_language = audio['tags']['language'] if 'tags' in audio and 'language' in audio['tags'] else 'und' + info.audio_bitrate = over.core.textui.Unit(audio['bit_rate'], 'b/s') if 'bit_rate' in audio else '§r??§/' - amount_vs = len(video_streams) - amount_as = len(audio_streams) - - if amount_vs != 1: - _print('detected §r%d§/ video streams' %(amount_vs), prefix.fail) - main.exit(1) - - if amount_as != 1: - _print('detected §r%d§/ audio streams' %(amount_as), prefix.fail) - main.exit(1) - - video = video_streams[0] - audio = audio_streams[0] - - info.video_codec = video['codec_name'] - info.video_size_x = video['width'] - info.video_size_y = video['height'] - info.video_fps = over.core.textui.Unit(parse_fps(video['r_frame_rate']), 'Hz') - info.video_bitrate = over.core.textui.Unit(video['bit_rate'], 'b/s') if 'bit_rate' in video else "§r??§/" - - info.audio_codec = audio['codec_name'] - info.audio_channels = audio['channels'] - info.audio_samplerate = over.core.textui.Unit(audio['sample_rate'], 'Hz') - info.audio_language = audio['tags']['language'] if 'tags' in audio and 'language' in audio['tags'] else 'und' - info.audio_bitrate = over.core.textui.Unit(audio['bit_rate'], 'b/s') if 'bit_rate' in audio else "§r??§/" + except KeyError: + _print('KeyError while reading identify_dict, dump follows', prefix.fail) + print(identify_dict) + raise + # TODO wordify :-) _print('§mvideo§/: size=§b%d§/x§b%d§/ px, framerate=%s, codec=%s, bitrate=%s' %(info.video_size_x, info.video_size_y, info.video_fps, info.video_codec, info.video_bitrate)) _print('§caudio§/: channels=§b%d§/, samplerate=%s, codec=%s, bitrate=%s, language=%s' %(info.audio_channels, info.audio_samplerate, info.audio_codec, info.audio_bitrate, info.audio_language)) + # -------------------------------------------------- + # normalization pre-pass + if (main.cfg.armed or main.cfg.dump_commands) and main.cfg.normalize: _print('running normalization pre-pass') @@ -138,42 +203,71 @@ if __name__ == '__main__': raise RuntimeError pb.blank() - _print('detected volume %.2f dB, correction %.2f dB' %(info.mean_volume, info.volume_correction)) + _print('detected volume %.1f dB, correction %.1f dB' %(info.mean_volume, info.volume_correction)) + + info.normalize_command = command.sub_normalize + info.normalize_command.reset() + info.normalize_command.VOLUME = 'volume=%.2fdB' %(info.volume_correction) - # select encoding command - if main.cfg.profile == 'theora': - encode_cmd = command.encode_theora - info.tmp_file = tempfile.mktemp(suffix='.ogv', dir='.') - elif main.cfg.profile == 'x264': - encode_cmd = command.encode_x264 - info.tmp_file = tempfile.mktemp(suffix='.mkv', dir='.') - elif main.cfg.profile == 'wav': - encode_cmd = command.encode_wav - info.tmp_file = tempfile.mktemp(suffix='.wav', dir='.') else: - _print('§runknown profile selected§/: §r%s§/' %(main.cfg.profile), prefix.fail) - raise RuntimeError + info.normalize_command = None - # populate its arguments + # -------------------------------------------------- + # main command assembly + + files.infile = to_Path(tgt) + files.tmpfile = to_Path(tempfile.mktemp(suffix='.' + files.container, dir='.')) + files.outfile = files.infile.parent / (str(files.infile.stem) + '.' + files.container) + files.move_infile_to = to_Path(main.cfg.move_source) / files.infile.name if main.cfg.move_source else None + + encode_cmd = command.encode_generic encode_cmd.reset() - encode_cmd.INFILE = tgt - encode_cmd.OUTFILE = info.tmp_file - encode_cmd.AQ = main.cfg.audio_quality - encode_cmd.VQ = main.cfg.video_quality - if (main.cfg.armed or main.cfg.dump_commands) and main.cfg.normalize: - command.normalize.reset() - command.normalize.VOLUME = 'volume=%.2fdB' %(info.volume_correction) - encode_cmd.NORMALIZE = command.normalize - else: - encode_cmd.NORMALIZE = None + encode_cmd.INFILE = files.infile + encode_cmd.OUTFILE = files.tmpfile + + if main.cfg.audio == 'copy': + encode_cmd.AUDIO = None + elif main.cfg.audio == 'drop': + encode_cmd.AUDIO = '-an' + elif main.cfg.audio == 'pcm': + command.sub_pcm.reset() + command.sub_pcm.NORMALIZE = info.normalize_command + + encode_cmd.AUDIO = command.sub_pcm + elif main.cfg.audio == 'vorbis': + command.sub_vorbis.reset() + command.sub_vorbis.QUALITY = main.cfg.audio_quality + command.sub_vorbis.NORMALIZE = info.normalize_command + + encode_cmd.AUDIO = command.sub_vorbis if main.cfg.ffmpeg_vfilter: - command.vfilter.reset() - command.vfilter.ARGS = main.cfg.ffmpeg_vfilter.split() - encode_cmd.VFILTER = command.vfilter + info.vfilter_command = command.sub_vfilter + info.vfilter_command.reset() + info.vfilter_command.ARGS = main.cfg.ffmpeg_vfilter else: - encode_cmd.VFILTER = None + info.vfilter_command = None + + if main.cfg.video == 'copy': + encode_cmd.VIDEO = None + elif main.cfg.video == 'drop': + encode_cmd.VIDEO = '-vn' + elif main.cfg.video == 'theora': + command.sub_theora.reset() + command.sub_theora.QUALITY = main.cfg.video_quality + command.sub_theora.VFILTER = info.vfilter_command + + encode_cmd.VIDEO = command.sub_theora + elif main.cfg.video == 'x264': + command.sub_x264.reset() + command.sub_x264.QUALITY = main.cfg.video_quality + command.sub_x264.VFILTER = info.vfilter_command + + encode_cmd.VIDEO = command.sub_x264 + + # -------------------------------------------------- + # run the command if armed if main.cfg.dump_commands: _print('will execute §B%s§/' %(' '.join(encode_cmd.dump())), prefix.start) @@ -196,30 +290,30 @@ if __name__ == '__main__': elif out is None: break - original_filesize = over.core.textui.Unit(pathlib.Path(tgt).stat().st_size, 'B') - new_filesize = over.core.textui.Unit(pathlib.Path(info.tmp_file).stat().st_size, 'B') + original_filesize = over.core.textui.Unit(files.infile.stat().st_size, 'B') + new_filesize = over.core.textui.Unit(files.tmpfile.stat().st_size, 'B') pb.blank() _print('encoding finished: %s -> %s' %(original_filesize, new_filesize), prefix.done) - new_filename = pathlib.Path(tgt).stem + pathlib.Path(info.tmp_file).suffix + # -------------------------------------------------- + # shuffle files around - path_tgt_dir = pathlib.Path(main.cfg.move_source) - path_tgt = pathlib.Path(tgt) - path_tgt_new = path_tgt_dir / path_tgt + if main.cfg.move_source and main.cfg.armed: + move_to_dir = pathlib.Path(main.cfg.move_source) + + if not move_to_dir.is_dir(): + move_to_dir.mkdir() - if path_tgt != path_tgt_new: + if files.move_infile_to: if main.cfg.armed: - _print("moving §B%s§/ -> §B%s§/" %(path_tgt, path_tgt_new), prefix.start) - path_tgt.rename(path_tgt_new) - elif main.cfg.dump_commands: - _print('will execute §Bmv "%s" "%s"§/' %(path_tgt, path_tgt_new)) - - old_name = pathlib.Path(info.tmp_file) - new_name = pathlib.Path(new_filename) + _print('moving §B%s§/ -> §B%s§/' %(files.infile, files.move_infile_to), prefix.start) + files.infile.rename(files.move_infile_to) + else: + _print('will move §B%s§/ -> §B%s§/' %(files.infile, files.move_infile_to)) if main.cfg.armed: - _print("moving §B%s§/ -> §B%s§/" %(old_name, new_name), prefix.start) - old_name.rename(new_name) - elif main.cfg.dump_commands: - _print('will execute §Bmv "%s" "%s"§/' %(old_name, new_name)) + _print('moving §B%s§/ -> §B%s§/' %(files.tmpfile, files.outfile), prefix.start) + files.tmpfile.rename(files.outfile) + else: + _print('will move §B%s§/ -> §B%s§/' %(files.tmpfile, files.outfile))