Added tests and more
This commit is contained in:
1 parent
295177be6f
commit
a7a7abf720
9 files changed
+1327
No files matched your search
@@ -0,0 +1,62 @@
|
||||
from pathlib import Path
|
||||
from typing import Tuple, List, Optional
|
||||
import subprocess
|
||||
import json
|
||||
|
||||
def run(cmd):
|
||||
"""
|
||||
Run a subprocess command.
|
||||
|
||||
Args:
|
||||
cmd: Command and arguments as a list.
|
||||
|
||||
Raises:
|
||||
subprocess.CalledProcessError: If the command exits with a non-zero status.
|
||||
"""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
cmd,
|
||||
check=True,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
text=True
|
||||
)
|
||||
return result
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(e.stdout)
|
||||
raise
|
||||
|
||||
|
||||
def _get_chapters(file: Path) -> List[Tuple[float, float]]:
|
||||
"""Return list of (start_time, duration) for each chapter."""
|
||||
cmd = [
|
||||
"ffprobe",
|
||||
"-i", str(file),
|
||||
"-print_format", "json",
|
||||
"-show_chapters",
|
||||
"-loglevel", "error"
|
||||
]
|
||||
|
||||
result = run(cmd)
|
||||
data = json.loads(result.stdout)
|
||||
|
||||
chapters = []
|
||||
for ch in data.get("chapters", []):
|
||||
start = float(ch["start_time"])
|
||||
end = float(ch["end_time"])
|
||||
duration = end - start
|
||||
chapters.append((start, duration))
|
||||
|
||||
return chapters
|
||||
|
||||
if __name__ == '__main__':
|
||||
file = "/home/honney/projects/mkv/output_dir/08.mkv"
|
||||
chapters = _get_chapters(Path(file))
|
||||
time = 90
|
||||
min_len = time / 2
|
||||
max_len = time * 2
|
||||
filtered = [
|
||||
(start, dur) for start, dur in chapters
|
||||
if min_len <= dur <= max_len
|
||||
]
|
||||
print(filtered)
|
||||
Reference in new issue
Block a user