Skip to content

Instantly share code, notes, and snippets.

@daeyun
Last active November 7, 2015 19:17
Show Gist options
  • Save daeyun/8344b4f3ef88c38f7f6f to your computer and use it in GitHub Desktop.
Save daeyun/8344b4f3ef88c38f7f6f to your computer and use it in GitHub Desktop.
use video metadata to rename lecture videos downloaded from echo360
import sys
import os
import re
import subprocess
import textwrap
from dateutil.parser import parse
def rename_all(working_dir='.', video_ext='.mpg'):
filenames = sorted(os.listdir(working_dir))
for filename in filenames:
ext = os.path.splitext(filename)[1]
if ext == video_ext:
stdoutdata = subprocess.check_output(['avprobe', filename], stderr=subprocess.STDOUT)
metadata = stdoutdata.decode('utf-8')
mtitle = re.search(r"title\s*:\s*([^\s].*)\n", metadata)
mdate = re.search(r"comment\s*:\s*([^\s]*)[\n\s]", metadata)
if mtitle and mdate and mtitle.groups() and mdate.groups():
title = mtitle.group(1)
date = parse(mdate.group(1))
fullpath = os.path.abspath(filename)
dirname = os.path.dirname(fullpath)
newname = "{} - {}{}".format(date.strftime("%m-%d-%y"), title, ext)
os.rename(fullpath, os.path.join(dirname, newname))
print(textwrap.dedent('''
Date: {}
Title: {}
{}
{}'''.format(date, title, fullpath, os.path.join(dirname, newname))))
if __name__ == "__main__":
if len(sys.argv) == 2:
rename_all(sys.argv[1])
else:
rename_all()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment