import json
import subprocess
from ffprobe import FFProbe
def get_audio_streams(filename):
metadata = FFProbe(filename)
streams = []
for stream in metadata.streams:
if stream.is_audio():
streams.append(stream)
return streams
def get_language_order(streams):
language_order = []
for stream in streams:
try:
language_order.append(stream.__dict__['codec_tag_string'])
except KeyError:
pass
return language_order
def reorder_audio(filename, order):
output_filename = "output.mkv"
# Create list of '-a' arguments for mkvmerge command
audio_args = [f"-a {i}" for i in order]
# Construct mkvmerge command
cmd = ["mkvmerge", "-o", output_filename] + audio_args + [filename]
subprocess.run(cmd)
def main():
filename = "input.mkv"
streams = get_audio_streams(filename)
order = get_language_order(streams)
desired_order = ['ger', 'ita', 'eng']
new_order = sorted(range(len(order)), key=lambda i: desired_order.index(order[i]))
reorder_audio(filename, new_order)
if __name__ == "__main__":
main()