annotate split-aac.py @ 136:da4f7200665f default tip

buncha shit
author Paper <paper@tflc.us>
date Sat, 07 Mar 2026 18:04:10 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
136
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
1 # We want to split the files, preserving their original compression with as few possible clicks.
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
2 # This means we have to align all of our track offsets as frames.
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
3
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
4 import sys
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
5
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
6
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
7 def get_closest_aligned_time(target_time: float, sample_rate: float) -> int:
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
8 # Convert target time into an exact amount of samples first.
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
9 # We obviously can't have a fraction of a sample.
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
10 samples = int(round(target_time * sample_rate))
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
11
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
12 # Round to the nearest frame multiple. Note that AAC frames are
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
13 # *usually* (but not always) 1024 samples in size.
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
14 frames = samples - samples % 1024
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
15
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
16 return frames / sample_rate
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
17
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
18
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
19 # sample rate is first argument
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
20 sample_rate = float(sys.argv[1])
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
21
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
22 # rest of the arguments are the times to align.
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
23 # Hopefully giving these values as microseconds will help
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
24 # ffmpeg realize it should cut along frame boundaries.
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
25 for i in sys.argv[2:]:
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
26 x = get_closest_aligned_time(float(i), sample_rate)
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
27 print("%f\n" % x, end="")
da4f7200665f buncha shit
Paper <paper@tflc.us>
parents:
diff changeset
28 print("%f," % x, end="")