You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.3 KiB
48 lines
1.3 KiB
3 years ago
|
#!/usr/bin/env python
|
||
|
|
||
|
"""Shifts a subtitle by a fixed number of seconds."""
|
||
|
|
||
|
import datetime
|
||
|
import srt_tools.utils
|
||
|
import logging
|
||
|
|
||
|
log = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
def parse_args():
|
||
|
examples = {
|
||
|
"Make all subtitles 5 seconds later": "srt fixed-timeshift --seconds 5",
|
||
|
"Make all subtitles 5 seconds earlier": "srt fixed-timeshift --seconds -5",
|
||
|
}
|
||
|
|
||
|
parser = srt_tools.utils.basic_parser(description=__doc__, examples=examples)
|
||
|
parser.add_argument(
|
||
|
"--seconds", type=float, required=True, help="how many seconds to shift"
|
||
|
)
|
||
|
return parser.parse_args()
|
||
|
|
||
|
|
||
|
def scalar_correct_subs(subtitles, seconds_to_shift):
|
||
|
td_to_shift = datetime.timedelta(seconds=seconds_to_shift)
|
||
|
for subtitle in subtitles:
|
||
|
subtitle.start += td_to_shift
|
||
|
subtitle.end += td_to_shift
|
||
|
yield subtitle
|
||
|
|
||
|
|
||
|
def main():
|
||
|
args = parse_args()
|
||
|
logging.basicConfig(level=args.log_level)
|
||
|
srt_tools.utils.set_basic_args(args)
|
||
|
corrected_subs = scalar_correct_subs(args.input, args.seconds)
|
||
|
output = srt_tools.utils.compose_suggest_on_fail(corrected_subs, strict=args.strict)
|
||
|
|
||
|
try:
|
||
|
args.output.write(output)
|
||
|
except (UnicodeEncodeError, TypeError): # Python 2 fallback
|
||
|
args.output.write(output.encode(args.encoding))
|
||
|
|
||
|
|
||
|
if __name__ == "__main__": # pragma: no cover
|
||
|
main()
|