Skip to content

Instantly share code, notes, and snippets.

@samunders-core
Last active November 7, 2020 19:34
Show Gist options
  • Save samunders-core/70d7f50a102f90bf6b643e4a44dbcdac to your computer and use it in GitHub Desktop.
Save samunders-core/70d7f50a102f90bf6b643e4a44dbcdac to your computer and use it in GitHub Desktop.
#!/usr/bin/awk -f
BEGIN {
ts_patt = "[0-9][0-9]:[0-5][0-9]:[0-5][0-9],[0-9]+"
split("99:59:59,999", limits, ":|,")
from = 1
to = 999999999
delay[hours = 1] = 0
delay[minutes = 2] = 0 # 0-59
delay[seconds = 3] = 0 # 0-59, positive = show subtitle later, negative = show subtitle sooner
delay[millis = 4] = 0 # 0-999
}
fname && fname != FILENAME {
system("mv '" fname ".tmp' '" fname "'")
}
END {
system("mv '" fname ".tmp' '" fname "'")
}
function add(idx, values, carry) {
values[idx] += carry + delay[idx]
carry = 0
if (values[idx] < 0) {
values[idx] += 1 + limits[idx]
carry = -1
} else if (values[idx] > limits[idx]) {
values[idx] -= 1 + limits[idx]
carry = 1
}
if (idx > 1) {
add(idx - 1, values, carry)
}
}
/^[0-9]+[[:space:]]*$/ {
id = $1
}
# 00:01:51,574 --> 00:01:52,765
from <= id && id <= to && $1 ~ ts_patt && $2 == "-->" && $3 ~ ts_patt {
split($1, start_ts, ":|," )
add(4, start_ts, 0)
split($3, end_ts, ":|,")
add(4, end_ts, 0)
$1 = sprintf("%02d:%02d:%02d,%03d", start_ts[1], start_ts[2], start_ts[3], start_ts[4])
$3 = sprintf("%02d:%02d:%02d,%03d", end_ts[1], end_ts[2], end_ts[3], end_ts[4])
}
{
fname = FILENAME
print > fname ".tmp"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment