54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
import subprocess
|
|
import shutil
|
|
from pathlib import Path
|
|
|
|
def shift_mka(file: Path, offset: float) -> None:
|
|
"""
|
|
Hard-edits an MKA file by shifting audio data.
|
|
Positive offset: Adds silence at start (Delay).
|
|
Negative offset: Trims the beginning (Advance).
|
|
"""
|
|
if not file.is_file():
|
|
print(f"File not found: {file}")
|
|
return
|
|
|
|
# Create a normal file path right next to the original file
|
|
# If the file is "/folder/audio.mka", this becomes "/folder/shifted_audio.mka"
|
|
new_file = file.parent / f"shifted_{file.name}"
|
|
|
|
# 1. Determine the filter
|
|
if offset > 0:
|
|
# Delay all channels by X milliseconds
|
|
ms = int(offset * 1000)
|
|
audio_filter = f"adelay={ms}:all=1"
|
|
elif offset < 0:
|
|
# Trim the start and reset timestamps to 0
|
|
audio_filter = f"atrim=start={abs(offset)},asetpts=PTS-STARTPTS"
|
|
else:
|
|
print("Offset is 0, no shift needed.")
|
|
return
|
|
|
|
# 2. Execute FFmpeg
|
|
cmd = [
|
|
"ffmpeg", "-y",
|
|
"-i", str(file),
|
|
"-af", audio_filter,
|
|
"-c:a", "libopus",
|
|
str(new_file)
|
|
]
|
|
|
|
print(f"Processing shift: {offset}s...")
|
|
|
|
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
|
|
if result.returncode == 0:
|
|
# Move the new file over the original file (overwriting it)
|
|
shutil.move(str(new_file), str(file))
|
|
print(f"Successfully updated: {file.name}")
|
|
else:
|
|
print(f"FFmpeg Error:\n{result.stderr}")
|
|
# Clean up the leftover file if the process failed
|
|
if new_file.exists():
|
|
new_file.unlink()
|
|
|
|
shift_mka(Path("/home/honney/mount/Media/tmp/serien/ready/Classroom of the Elite/Season 01/E01_german_audio.mka"), 0.9592916666666667) |