Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import sys
- import subprocess
- import json
- def main():
- path = sys.argv[1]
- res = subprocess.check_output([
- 'ffprobe',
- '-hide_banner',
- '-loglevel',
- 'warning',
- '-select_streams',
- 'V',
- '-print_format',
- 'json',
- '-show_frames',
- '-read_intervals',
- '%+#1',
- '-show_entries',
- 'frame=color_space,color_primaries,color_transfer,side_data_list,pix_fmt',
- '-i',
- path,
- ], stderr=subprocess.DEVNULL)
- j = json.loads(res)
- color_space = j.get('frames')[0].get('color_space')
- color_primaries = j.get('frames')[0].get('color_primaries')
- color_transfer = j.get('frames')[0].get('color_transfer')
- print("color_space: \t\t" + color_space)
- print("color_primaries: \t" + color_primaries)
- print("color_transfer: \t" + color_transfer + '\n')
- side_data_list = j.get('frames')[0].get('side_data_list')[0]
- red_x = round(eval(side_data_list.get('red_x', '0')), 4)
- red_y = round(eval(side_data_list.get('red_y', '0')), 4)
- green_x = round(eval(side_data_list.get('green_x', '0')), 4)
- green_y = round(eval(side_data_list.get('green_y', '0')), 4)
- blue_x = round(eval(side_data_list.get('blue_x', '0')), 4)
- blue_y = round(eval(side_data_list.get('blue_y', '0')), 4)
- white_point_x = round(eval(side_data_list.get('white_point_x', '0'
- )), 4)
- white_point_y = round(eval(side_data_list.get('white_point_y', '0'
- )), 4)
- min_luminance = round(eval(side_data_list.get('min_luminance', '0'
- )), 4)
- max_luminance = round(eval(side_data_list.get('max_luminance', '0'
- )), 4)
- cll_max_content = 0
- cll_max_average = 0
- try:
- side_data_list = j.get('frames')[0].get('side_data_list')[1]
- cll_max_content = \
- round(eval(str(side_data_list.get('max_content', '0'))), 4)
- cll_max_average = \
- round(eval(str(side_data_list.get('max_average', '0'))), 4)
- except:
- pass
- # Convert data to x265 format
- # https://x265.readthedocs.io/en/master/cli.html#cmdoption-master-display
- x265_red_x = round(red_x / 0.00002)
- x265_red_y = round(red_y / 0.00002)
- x265_green_x = round(green_x / 0.00002)
- x265_green_y = round(green_y / 0.00002)
- x265_blue_x = round(blue_x / 0.00002)
- x265_blue_y = round(blue_y / 0.00002)
- x265_white_point_x = round(white_point_x / 0.00002)
- x265_white_point_y = round(white_point_y / 0.00002)
- x265_min_luminance = round(min_luminance / 0.0001)
- x265_max_luminance = round(max_luminance / 0.0001)
- print('x265:\t\tG(' + str(x265_green_x) + ',' + str(x265_green_y) + ')B(' \
- + str(x265_blue_x) + ',' + str(x265_blue_y) + ')R(' + str(x265_red_x) + ',' \
- + str(x265_red_y) + ')WP(' + str(x265_white_point_x) + ',' \
- + str(x265_white_point_y) + ')L(' + str(x265_max_luminance) + ',' \
- + str(x265_min_luminance) + '):max-cll=' + str(cll_max_content) \
- + ',' + str(cll_max_average))
- print('svt-av1:\tG(' + str(green_x) + ',' + str(green_y) + ')B(' \
- + str(blue_x) + ',' + str(blue_y) + ')R(' + str(red_x) + ',' \
- + str(red_y) + ')WP(' + str(white_point_x) + ',' \
- + str(white_point_y) + ')L(' + str(max_luminance) + ',' \
- + str(min_luminance) + '):content-light=' \
- + str(cll_max_content) + ',' + str(cll_max_average))
- return 0
- if __name__ == '__main__':
- sys.exit(main()) # next section explains the use of sys.exit
Advertisement
Add Comment
Please, Sign In to add comment