Compare commits
	
		
			4 Commits
		
	
	
		
			v1.0
			...
			184c75e8e7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 184c75e8e7 | |||
| 805d4f17ab | |||
| dd43acb829 | |||
| 9257c16287 | 
| @@ -49,8 +49,12 @@ def get_infos(file): | ||||
|                 'index': a_stream['index'], | ||||
|                 'channels': a_stream['channels'], | ||||
|                 'channel_layout': a_stream['channel_layout'], | ||||
|                 'language': a_stream['tags']['language'], | ||||
|                 'title': a_stream['tags']['title']} | ||||
|                 'language': a_stream['tags']['language'] | ||||
|                 } | ||||
|         try: | ||||
|             a_stream_infos.update({'title': a_stream['tags']['title']}) | ||||
|         except: | ||||
|             a_stream_infos.update({'title': 'No title'}) | ||||
|         a_infos.append(a_stream_infos) | ||||
|     s_infos = [] | ||||
|     for s_stream in full_s_infos['streams']: | ||||
| @@ -63,7 +67,6 @@ def get_infos(file): | ||||
|     duration = float(duration['format']['duration']) | ||||
|     hdr10_v_cmd = f'ffmpeg -loglevel panic -i {file} -c:v copy -vbsf hevc_mp4toannexb -f hevc - | hdr10plus_parser -o metadata.json --verify -' | ||||
|     hdr10_v_raw = subprocess.getoutput(hdr10_v_cmd) | ||||
|     # logging.debug(hdr10_v_raw) | ||||
|     if 'metadata detected' in hdr10_v_raw: | ||||
|         hdr10_cmd = f'ffmpeg -loglevel panic -i {file} -c:v copy -vbsf hevc_mp4toannexb -f hevc - | hdr10plus_parser -o /tmp/{file}_hdr10_metadata.json -' | ||||
|         v_infos.update({'hdr10': True, 'hdr10_metdata': f'/tmp/{file}_hdr10_metadata.json'}) | ||||
| @@ -142,7 +145,7 @@ def stabilization(file): | ||||
|  | ||||
| def extract_subs(file, track, lang): | ||||
|     command = f'ffmpeg -loglevel error -i {file} -map 0:{track} -map_metadata -1 -vn -an -c:s copy -metadata language="{lang}" -y {file}_subtitle_{track}_{lang}.mkv' | ||||
|     logging.info(f"Extractio du sous-titre {track}, langue : {lang}...") | ||||
|     logging.info(f"Extraction du sous-titre {track}, langue : {lang}...") | ||||
|     logging.debug(command) | ||||
|     result = subprocess.getoutput(command) | ||||
|     if result != "": | ||||
| @@ -153,23 +156,25 @@ def convert_audio(file, track, volume_adj, channels, channel_layout, language, t | ||||
|     bitrate = f'{64*channels}k' | ||||
|     if channel_layout == "5.1(side)": | ||||
|         channel_layout = "5.1" | ||||
|     codec = 'libopus' | ||||
|     codec = 'libfdk_aac -vbr 5' | ||||
|     metadatas = f'-metadata language="{language}" -metadata title="{title}"' | ||||
|     command = f'ffmpeg -loglevel error -i {file} -map 0:{track} -map_metadata -1 -vn -sn -c:a {codec} -b:a {bitrate} -mapping_family 1 -filter:a volume={volume_adj},aformat=channel_layouts={channel_layout} {metadatas} -y {file}_audio_{track}_{language}.mka' | ||||
|     command = f'ffmpeg -loglevel error -i {file} -map 0:{track} -map_metadata -1 -vn -sn -c:a {codec} -mapping_family 1 -filter:a volume={volume_adj},aformat=channel_layouts={channel_layout} {metadatas} -y {file}_audio_{track}_{language}.mka' | ||||
|     logging.debug(command) | ||||
|     result = subprocess.getoutput(command) | ||||
|     logging.info(result) | ||||
|  | ||||
|  | ||||
| def convert_video(file, infos, start, crop, crf): | ||||
| def convert_video(file, infos, start, crop, crf, animation): | ||||
|     str_start = "{:05d}".format(start) | ||||
|     output = f'{file}_video_t{str_start}.mkv' | ||||
|     fmt = infos['video']['pix_fmt'] | ||||
|     if fmt == "yuv420p": | ||||
|         fmt = "yuv420p10le" | ||||
|     fmt = "yuv420p10le" # Always 10-bits | ||||
|     track = infos['video']['index'] | ||||
|     codec = 'libx265 -preset slow' | ||||
|     codec = 'libx265 -preset slower' | ||||
|     hdr = '' | ||||
|     if animation: | ||||
|         tune = "-tune animation" | ||||
|     else: | ||||
|         tune = "" | ||||
|     if 'side_data_list' in infos['video'].keys(): | ||||
|         try: | ||||
|             light_level = f"{infos['video']['side_data_list'][1]['max_content']},{infos['video']['side_data_list'][1]['max_average']}" | ||||
| @@ -205,7 +210,7 @@ def convert_video(file, infos, start, crop, crf): | ||||
|             hdr = f'-x265-params hdr-opt=1:repeat-headers=1:colorprim={color_primaries}:transfer={color_transfer}:colormatrix={color_space}:master-display={master_display}:max-cll={light_level}' | ||||
|         except: | ||||
|             logging.debug("Aucune information HDR") | ||||
|     command = f'ffmpeg -loglevel error -i {file} -map 0:{track} -ss {start} -t 300 -an -sn -c:v {codec} {hdr} -crf {crf} -pix_fmt {fmt} -filter:v {crop} -y {output}' | ||||
|     command = f'ffmpeg -loglevel error -i {file} -map 0:{track} -ss {start} -t 300 -an -sn -c:v {codec} {tune} {hdr} -crf {crf} -pix_fmt {fmt} -filter:v {crop} -y {output}' | ||||
|     logging.debug(command) | ||||
|     result = subprocess.getoutput(command) | ||||
|     logging.info(result) | ||||
| @@ -227,27 +232,12 @@ def create_mkv(filename): | ||||
|             json_data.append(")") | ||||
|     for file in listdir(): | ||||
|         if f"{filename}_audio" in file: | ||||
|             lang = file[-7:][:-4] | ||||
|             json_data.append("--no-track-tags") | ||||
|             json_data.append("--no-global-tags") | ||||
|             json_data.append("--no-chapters") | ||||
|             if "fra" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:fr") | ||||
|             elif "eng" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:en") | ||||
|             elif "deu" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:de") | ||||
|             elif "nld" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:nl") | ||||
|             elif "spa" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:es") | ||||
|             elif "ita" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:it") | ||||
|             json_data.append("--language") | ||||
|             json_data.append(f"0:{lang}") | ||||
|             json_data.append("(") | ||||
|             json_data.append(file) | ||||
|             json_data.append(")") | ||||
| @@ -256,24 +246,9 @@ def create_mkv(filename): | ||||
|             json_data.append("--no-track-tags") | ||||
|             json_data.append("--no-global-tags") | ||||
|             json_data.append("--no-chapters") | ||||
|             if "fra" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:fr") | ||||
|             elif "eng" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:en") | ||||
|             elif "deu" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:de") | ||||
|             elif "nld" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:nl") | ||||
|             elif "spa" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:es") | ||||
|             elif "ita" in file: | ||||
|                 json_data.append("--language") | ||||
|                 json_data.append("0:it") | ||||
|             lang = file[-7:][:-4] | ||||
|             json_data.append("--language") | ||||
|             json_data.append(f"0:{lang}") | ||||
|             json_data.append("(") | ||||
|             json_data.append(file) | ||||
|             json_data.append(")") | ||||
| @@ -300,6 +275,7 @@ if __name__ == '__main__': | ||||
|     parser.add_argument("-d", "--debug", dest="debug", action="store_true") | ||||
|     parser.add_argument("-s", "--stabilise", dest="stab", action="store_true") | ||||
|     parser.add_argument("-t", "--starttime", dest="starttime") | ||||
|     parser.add_argument("-a", "--animation", dest="animation", 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') | ||||
| @@ -312,6 +288,10 @@ if __name__ == '__main__': | ||||
|     volumes = volume_audio(file, infos) | ||||
|     if args.stab: | ||||
|         stabilization(file) | ||||
|     if args.animation: | ||||
|         animation = True | ||||
|     else: | ||||
|         animation = False | ||||
|     if not args.starttime: | ||||
|         for track in infos['subtitles']: | ||||
|             extract_subs(file, track['index'], track['language']) | ||||
| @@ -323,6 +303,6 @@ if __name__ == '__main__': | ||||
|         vid_part_time = 0 | ||||
|     while vid_part_time < infos['duration']: | ||||
|         crf = 19 | ||||
|         convert_video(file, infos, vid_part_time, cropsize, crf) | ||||
|         convert_video(file, infos, vid_part_time, cropsize, crf, animation) | ||||
|         vid_part_time += 300 | ||||
|     create_mkv(file) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user