Compare commits
No commits in common. "929fdf2466699c907ce79a6d8f1ee49785a394dd" and "6f5d5b0a02db7aef88faa9b7da507f945defa82b" have entirely different histories.
929fdf2466
...
6f5d5b0a02
6
.gitignore
vendored
6
.gitignore
vendored
@ -1,6 +0,0 @@
|
|||||||
.DS_Store
|
|
||||||
.idea
|
|
||||||
*.log
|
|
||||||
tmp/
|
|
||||||
|
|
||||||
|
|
61
main.py
61
main.py
@ -10,9 +10,6 @@ import argparse
|
|||||||
# executing some commands
|
# executing some commands
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
# parsing json output of loudnorm
|
|
||||||
import json
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
parser = argparse.ArgumentParser(description="")
|
parser = argparse.ArgumentParser(description="")
|
||||||
|
|
||||||
@ -34,11 +31,10 @@ ffmpeg -i $FILE -c:v libx264 -b:v 4000k -pass 2 -filter:a loudnorm=linear=true:m
|
|||||||
inputfile = (
|
inputfile = (
|
||||||
'/home/marc/Downloads/FalKKonE - 01 Aria (From "Berserk: The Golden Age Arc").flac'
|
'/home/marc/Downloads/FalKKonE - 01 Aria (From "Berserk: The Golden Age Arc").flac'
|
||||||
)
|
)
|
||||||
# inputfile = "/home/marc/Downloads/test441.opus"
|
inputfile = "/home/marc/Downloads/test441.opus"
|
||||||
outputfile = "/home/marc/Downloads/test441_out.opus"
|
|
||||||
|
|
||||||
|
|
||||||
def get_format(inputfile) -> str:
|
def get_format(inputfile):
|
||||||
# get codec format
|
# get codec format
|
||||||
# https://stackoverflow.com/a/29610897
|
# https://stackoverflow.com/a/29610897
|
||||||
# this shows the codecs of all audio streams present in the file, which shouldn't matter unless you have more than one stream
|
# this shows the codecs of all audio streams present in the file, which shouldn't matter unless you have more than one stream
|
||||||
@ -66,7 +62,7 @@ def get_format(inputfile) -> str:
|
|||||||
return format
|
return format
|
||||||
|
|
||||||
|
|
||||||
def loudness_info(inputfile) -> dict[str, str]:
|
def loudness_info(inputfile):
|
||||||
# get format from file
|
# get format from file
|
||||||
# inputformat = get_format(inputfile)
|
# inputformat = get_format(inputfile)
|
||||||
# NOTE format is actually unnecessary here
|
# NOTE format is actually unnecessary here
|
||||||
@ -76,52 +72,13 @@ def loudness_info(inputfile) -> dict[str, str]:
|
|||||||
global_options=("-y"),
|
global_options=("-y"),
|
||||||
)
|
)
|
||||||
|
|
||||||
# print(ff.cmd)
|
|
||||||
proc = subprocess.Popen(
|
|
||||||
ff.cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE
|
|
||||||
)
|
|
||||||
# NOTE get loudness info from subprocess
|
|
||||||
# rstrip: remove trailing newline
|
|
||||||
# decode: convert from binary string to utf8
|
|
||||||
# splitlines: list of lines (only 12 last ones, length of the output json)
|
|
||||||
# join: reassembles the list of lines and separates with "\n"
|
|
||||||
loudness_json: str = "\n".join(
|
|
||||||
proc.stdout.read().rstrip().decode("utf8").splitlines()[-12:]
|
|
||||||
)
|
|
||||||
# decode json to dict
|
|
||||||
loudness: dict[str, str] = json.loads(loudness_json)
|
|
||||||
# print(loudness_json)
|
|
||||||
return loudness
|
|
||||||
|
|
||||||
|
|
||||||
def convert(inputfile, outputfile, loudness):
|
|
||||||
ff = ffmpy.FFmpeg(
|
|
||||||
inputs={inputfile: None},
|
|
||||||
outputs={
|
|
||||||
outputfile: "-pass 2"
|
|
||||||
" "
|
|
||||||
"-filter:a"
|
|
||||||
" "
|
|
||||||
"loudnorm=I=-30.0:"
|
|
||||||
"measured_I={input_i}:"
|
|
||||||
"measured_LRA={input_lra}:"
|
|
||||||
"measured_tp={input_tp}:measured_thresh={input_thresh}:"
|
|
||||||
"print_format=json"
|
|
||||||
" "
|
|
||||||
"-c:a libopus"
|
|
||||||
" "
|
|
||||||
"-b:a 320k".format(
|
|
||||||
input_i=loudness["input_i"],
|
|
||||||
input_lra=loudness["input_lra"],
|
|
||||||
input_tp=loudness["input_tp"],
|
|
||||||
input_thresh=loudness["input_thresh"],
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
print(ff.cmd)
|
print(ff.cmd)
|
||||||
ff.run()
|
|
||||||
|
|
||||||
|
def convert():
|
||||||
|
# ff = ffmpy.FFmpeg()
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
loudness = loudness_info(inputfile=inputfile)
|
loudness_info(inputfile)
|
||||||
convert(inputfile=inputfile, outputfile=outputfile, loudness=loudness)
|
|
||||||
|
Reference in New Issue
Block a user