Untitled
unknown
plain_text
a year ago
2.0 kB
5
Indexable
import subprocess
import os
def extract_audio_channels(input_file, output_dir):
# Check if output directory exists, create it if not
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# Probe the input file to determine audio details
try:
ffmpeg_probe_command = [
"ffprobe", "-i", input_file, "-show_entries",
"stream=channels", "-select_streams", "a", "-of", "json", "-v", "quiet"
]
result = subprocess.run(ffmpeg_probe_command, capture_output=True, text=True, check=True)
except Exception as e:
print(f"Error probing the input file: {e}")
return
import json
probe_data = json.loads(result.stdout)
audio_channels = probe_data.get("streams", [{}])[0].get("channels", 0)
if not audio_channels:
print("Could not determine the number of audio channels.")
return
print(f"Detected {audio_channels} audio channels.")
# Extract each channel and save as MP3
for channel in range(1, audio_channels + 1):
output_file = os.path.join(output_dir, f"channel_{channel}.mp3")
ffmpeg_extract_command = [
"ffmpeg", "-i", input_file,
"-map", f"0:a:0", # First audio stream
"-ac", "1", # Extract a single channel
"-filter_complex", f"channelsplit=channel_layout=5.1[CH{channel}]",
"-map", f"[CH{channel}]",
"-c:a", "libmp3lame", "-q:a", "2", # MP3 output quality
output_file
]
try:
subprocess.run(ffmpeg_extract_command, check=True)
print(f"Extracted channel {channel} to {output_file}")
except Exception as e:
print(f"Error extracting channel {channel}: {e}")
# Example usage
input_mkv = "input.bdrip.mkv" # Path to your MKV file
output_directory = "output_channels" # Output directory for MP3 files
extract_audio_channels(input_mkv, output_directory)
Editor is loading...
Leave a Comment