Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import subprocess
- import json
- import re
- import os
- def run_first_pass(input_file):
- command = [
- 'ffmpeg',
- '-i', input_file,
- '-vn',
- '-filter_complex',
- 'loudnorm=I=-14:TP=-2:LRA=11:print_format=json',
- '-f', 'null', '-'
- ]
- result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, encoding='utf-8', errors='replace')
- match = re.search(r'\{[\s\S]*?\}', result.stderr)
- if not match:
- raise RuntimeError("Could not find loudnorm JSON output.")
- loudnorm_data = json.loads(match.group(0))
- print("parsed data:")
- print(loudnorm_data)
- return loudnorm_data
- def run_second_pass(input_file, output_file, loudnorm_data):
- loudnorm_filter = (
- f"loudnorm=I=-14:TP=-2:LRA=11:measured_I={loudnorm_data['input_i']}:"
- f"measured_TP={loudnorm_data['input_tp']}:measured_LRA={loudnorm_data['input_lra']}:"
- f"measured_thresh={loudnorm_data['input_thresh']}:offset={loudnorm_data['target_offset']}:linear=true:print_format=summary"
- )
- filter_complex = f"{loudnorm_filter}"
- command = [
- 'ffmpeg',
- '-i', input_file,
- '-filter_complex', filter_complex,
- '-vn',
- '-c:a', 'aac',
- '-b:a', '320k',
- output_file
- ]
- subprocess.run(command, check=True)
- print("Done.")
- def process_audio(input_file, output_file):
- print("Running first pass...")
- loudnorm_data = run_first_pass(input_file)
- print("Running second pass...")
- run_second_pass(input_file, output_file, loudnorm_data)
- def main():
- list_file = "to_loudnorm.txt"
- out_dir = "out"
- with open(list_file, 'r', encoding='utf-8-sig') as f:
- for line in f:
- input_path = line.strip()
- if not input_path:
- continue
- output_path = os.path.join(out_dir, os.path.splitext(input_path)[0] + ".m4a")
- output_dir = os.path.dirname(output_path)
- try:
- process_audio(input_path, output_path)
- except Exception as e:
- print(f"Failed to process {input_path}: {e}")
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment