Python script to dump_dvd_chapters.py.

This commit is contained in:
Markus Birth 2019-09-23 01:51:13 +02:00
parent 83608ea505
commit 391d18232a
Signed by: mbirth
GPG Key ID: A9928D7A098C3A9A

67
dump_dvd_chapters.py Executable file
View File

@ -0,0 +1,67 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from pprint import pprint
import subprocess
import sys
def mplayer_ident(filepath):
command = [
"mplayer",
"-identify",
"-frames", "0",
filepath
]
pipe = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out, err = pipe.communicate()
total_len = None
chap = None
#print(out.decode("utf-8"))
for line in out.decode("utf-8").split("\n"):
if "CHAPTERS:" in line:
# TODO: Might appear multiple times
chap = line[10:].strip(",").split(",")
if "ID_DVD_TITLE_1_LENGTH" in line:
(s, ms) = line[22:].strip().split(".")
total_len = int(s) * 1000 + int(ms)
return (total_len, chap)
def get_ms_from_hms(stamp):
(h, m, s) = stamp.split(":")
(s, ms) = s.split(".")
result = int(h) * 60 * 60 * 1000
result += int(m) * 60 * 1000
result += int(s) * 1000
result += int(ms)
return result
def print_ffmpeg_chaps(chapters, total_len):
# https://ffmpeg.org/ffmpeg-formats.html#Metadata-1
print(";FFMETADATA1")
for i, c in enumerate(chapters):
idx = i+1
millis = get_ms_from_hms(c)
next_c = total_len
if i+1 < len(chapters):
next_c = get_ms_from_hms(chapters[i+1])
print("\n[CHAPTER]")
print("TIMEBASE=1/1000")
print("# START AT {}".format(c))
print("START={:d}".format(millis))
print("END={:d}".format(next_c))
print("title=Chapter {:d}".format(idx))
def print_ogm_chaps(chapters):
for i, c in enumerate(chapters):
idx = i+1
print("CHAPTER{:02d}={}".format(idx, c))
print("CHAPTER{:02d}NAME=Chapter {:d}".format(idx, idx))
FILENAME = sys.argv[1]
(total_len, chaps) = mplayer_ident(FILENAME)
#pprint(chaps)
print_ffmpeg_chaps(chaps, total_len)
#print_ogm_chaps(chaps)