Skip to content

Instantly share code, notes, and snippets.

@mahmoud
Created January 6, 2018 09:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mahmoud/4f38d26cafd822552b88db4fa5cb439a to your computer and use it in GitHub Desktop.
Save mahmoud/4f38d26cafd822552b88db4fa5cb439a to your computer and use it in GitHub Desktop.
a little something i whipped up for cleaner Pyninsula recording cuts
#!/usr/bin/env python
"""
./cut_mp4.py --input input.mp4 --start 00:00:01 --end 00:00:02 --no-align-keyframes --output output.mp4
"""
import os
import sys
import argparse
import datetime
import subprocess
FFMPEG_CMD = 'ffmpeg'
TIME_FORMAT = '%H:%M:%S'
def main(argv):
prs = argparse.ArgumentParser()
add_arg = prs.add_argument
add_arg('--input', required=True)
add_arg('--start')
add_arg('--end')
add_arg('--no-align-keyframes', action="store_true") # TODO
add_arg('--output', required=True)
args = prs.parse_args()
start_ts = args.start or '00:00:00'
start_dt = datetime.datetime.strptime(start_ts, TIME_FORMAT)
end_ts = args.end or '99:99:99' # TODO
end_dt = datetime.datetime.strptime(end_ts, TIME_FORMAT)
assert end_dt > start_dt
duration_ts = str(end_dt - start_dt)
cmd = [FFMPEG_CMD, '-ss', start_ts, '-noaccurate_seek', '-i', args.input,
'-vcodec', 'copy', '-acodec', 'copy', '-t', duration_ts,
'-avoid_negative_ts', 'make_zero', args.output]
return subprocess.check_call(cmd)
if __name__ == '__main__':
sys.exit(main(sys.argv))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment