make mp3 into m4b with chapters
This commit is contained in:
commit
083971d9b0
71
chapters.py
Normal file
71
chapters.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
import math
|
||||||
|
import glob
|
||||||
|
import subprocess
|
||||||
|
from mutagen.mp3 import MP3
|
||||||
|
|
||||||
|
|
||||||
|
class Chapters:
|
||||||
|
|
||||||
|
def __init__(self, title, author):
|
||||||
|
self.title = title
|
||||||
|
self.author = author
|
||||||
|
self.file_names = sorted(glob.glob("*.mp3"))
|
||||||
|
self.FFMETADATAFILE = f""";FFMETADATA1
|
||||||
|
title={self.title}
|
||||||
|
author={self.author}
|
||||||
|
encoder=libfdk_aac
|
||||||
|
|
||||||
|
"""
|
||||||
|
self.file_list = ""
|
||||||
|
|
||||||
|
def generate_metadata(self):
|
||||||
|
start = 1
|
||||||
|
|
||||||
|
for f in self.file_names:
|
||||||
|
self.file_list += f"file '{f}'\n"
|
||||||
|
mp3 = MP3(f)
|
||||||
|
l = int(mp3.info.length * 1000)
|
||||||
|
title = f[:-4]
|
||||||
|
|
||||||
|
self.FFMETADATAFILE += f"""[CHAPTER]
|
||||||
|
TIMEBASE=1/1000
|
||||||
|
START={start}
|
||||||
|
END={start+l}
|
||||||
|
title={title}
|
||||||
|
|
||||||
|
"""
|
||||||
|
start = start+l
|
||||||
|
|
||||||
|
def convert(self):
|
||||||
|
commands = [
|
||||||
|
'ffmpeg',
|
||||||
|
'-f', 'concat',
|
||||||
|
'-safe', '0',
|
||||||
|
'-i', 'file_list.txt',
|
||||||
|
'-i', 'FFMETADATAFILE.txt',
|
||||||
|
'-map_metadata', '1',
|
||||||
|
'-c:a', 'libfdk_aac',
|
||||||
|
'-b:a', '128k',
|
||||||
|
'-f', 'mp4', f'"{self.title}.m4b"',
|
||||||
|
]
|
||||||
|
if subprocess.run(commands).returncode == 0:
|
||||||
|
print("FFmpeg Script Ran Successfully")
|
||||||
|
else:
|
||||||
|
print("There was an error running your FFmpeg script")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
title = input("Title: ")
|
||||||
|
author = input("Author: ")
|
||||||
|
ch = Chapters(title=title, author=author)
|
||||||
|
ch.generate_metadata()
|
||||||
|
with open("FFMETADATAFILE.txt", "w") as f:
|
||||||
|
print(ch.FFMETADATAFILE, file=f)
|
||||||
|
with open("file_list.txt", "w") as f:
|
||||||
|
print(ch.file_list, file=f)
|
||||||
|
|
||||||
|
ch.convert()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
mutagen
|
Loading…
Reference in New Issue
Block a user