diff --git a/vid_convert.py b/vid_convert.py new file mode 100755 index 0000000..7d4fc50 --- /dev/null +++ b/vid_convert.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import json +import subprocess +import logging + + +def get_infos(file): + ''' + Cette fonction extrait les informations du film à l'aide de ffprobe et les stocke + dans un dictionnaire pour une utilisation ultérieure. + + -> http://ffmpeg.org/ffprobe.html + ''' + v_infos, a_infos = {}, {} + v_infos_cmd = f"ffprobe -v quiet -print_format json -show_format -show_streams -select_streams v {file}" + v_infos_raw = subprocess.getoutput(v_infos_cmd) + a_infos_cmd = f"ffprobe -v quiet -print_format json -show_format -show_streams -select_streams a {file}" + a_infos_raw = subprocess.getoutput(a_infos_cmd) + full_v_infos = json.loads(v_infos_raw) + full_a_infos = json.loads(a_infos_raw) + v_stream = full_v_infos['streams'][0] + v_infos.update({ + 'height': v_stream['height'], + 'width': v_stream['width'], + 'color_primaries': v_stream['color_primaries'], + 'color_space': v_stream['color_space'], + 'color_transfer': v_stream['color_transfer'], + 'dar': v_stream['display_aspect_ratio'] + }) + a_infos = [] + for a_stream in full_a_infos['streams']: + a_stream_infos = { + 'index': a_stream['index'], + 'channels': a_stream['channels']} + a_infos.append(a_stream_infos) + duration = subprocess.getoutput(f"ffprobe -v quiet -print_format json -show_format {file}") + duration = json.loads(duration) + duration = float(duration['format']['duration']) + infos = {'duration': duration, 'video': v_infos, 'audio': a_infos} + logging.debug("Informations du film : \n" + json.dumps(infos, indent=True)) + return infos + + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("f_input") + parser.add_argument("-d", "--debug", dest='debug', action='store_true') + args = parser.parse_args() + if args.debug: + logging.basicConfig(format='[%(asctime)s]\n%(message)s', level=logging.DEBUG, datefmt='%d/%m/%Y %H:%M:%S') + else: + logging.basicConfig(format='[%(asctime)s]\n%(message)s', level=logging.INFO, datefmt='%d/%m/%Y %H:%M:%S') + get_infos(args.f_input)