{ "metadata": { "name": "", "signature": "sha256:a585965d204fc21b799bc19b67e762f91ce3ec9ee91edc6478699f1c287d4345" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import numpy as np\n", "import cv2\n", "import matplotlib.pyplot as plt\n", "import os\n", "import cv\n", "import sys\n", "try:\n", " import cv\n", " CAP_FRAME_COUNT = cv.CV_CAP_PROP_FRAME_COUNT\n", " CAP_FRAME_WIDTH = cv.CV_CAP_PROP_FRAME_WIDTH\n", " CAP_FRAME_HEIGHT = cv.CV_CAP_PROP_FRAME_HEIGHT\n", " CAP_FPS = cv.CV_CAP_PROP_FPS\n", " CAP_POS_FRAMES = cv.CV_CAP_PROP_POS_FRAMES\n", "except:\n", " CAP_FRAME_COUNT = cv2.CAP_PROP_FRAME_COUNT\n", " CAP_FRAME_WIDTH = cv2.CAP_PROP_FRAME_WIDTH\n", " CAP_FRAME_HEIGHT = cv2.CAP_PROP_FRAME_HEIGHT\n", " CAP_FPS = cv2.CAP_PROP_FPS\n", " CAP_POS_FRAMES = cv2.CAP_PROP_POS_FRAMES" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.html.widgets import interact, interactive, fixed\n", "from IPython.display import clear_output, display, HTML\n", "from IPython.html import widgets\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "from io import BytesIO\n", "import PIL\n", "from IPython.display import display, Image\n", "def img_to_png(ima, cvt=None):\n", " if cvt:\n", " ima = cv2.cvtColor(ima, cvt)\n", " im = PIL.Image.fromarray(ima)\n", " bio = BytesIO()\n", " im.save(bio, format='png')\n", " return bio.getvalue()\n", "def display_img_array(ima, cvt=None, **kwargs):\n", " display(Image(img_to_png(ima, cvt=cvt) , format='png', **kwargs))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "def normalize(im): \n", " im=cv2.cvtColor(im, cv2.CV_32F)\n", " im=cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)\n", " #im=cv2.equalizeHist(im)\n", " return im" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "def gray2vector(img):\n", " v = img.reshape(-1).astype(float) \n", " v = v - np.average(v) \n", " return v/np.linalg.norm(v)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "def diff_i(gray, i):\n", " v1 = gray2vector(gray)\n", " return np.dot(v1, slides_v[i])\n", "\n", "def compare_slides(gray, slides_v):\n", " v1 = gray2vector(gray)\n", " r = np.dot(slides_v, v1)\n", " i = np.argmax(r)\n", " return r[i], i\n", "\n", "def compare_absdiff(gray):\n", " return sorted( (cv2.absdiff(slides[i], gray).sum() , i) for i in range(len(slides)))" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "def frame_to_time(f, r):\n", " s = f/r\n", " m = int(s/60)\n", " s = s -60*m\n", " return \"%d:%04.1f\"%(m,s)\n", "def sync_video( fn, p, slides, slides_v, threshold=0.8, step=10, dark=1000, STOP=-1, debug=False):\n", " cap = cv2.VideoCapture(fn)\n", " frame_rate = cap.get(cv.CV_CAP_PROP_FPS)\n", " print \"frame_rate\", frame_rate\n", " num_of_frames = cap.get(cv.CV_CAP_PROP_FRAME_COUNT)\n", " frame_index =-1\n", " last_slide = -1\n", " last_start = -1\n", " frame_list = []\n", " progress = widgets.IntProgressWidget(min=0, max = num_of_frames - 1, value=0)\n", " progress_text = widgets.TextWidget()\n", " progress.set_css('background', 'black')\n", " display(progress)\n", " display(progress_text) \n", " img_widget = widgets.ImageWidget()\n", " display(img_widget)\n", " slide_h, slide_w = original_slides[0].shape[:2]\n", " while cap.isOpened():\n", " frame_index +=1\n", " ret, frame = cap.read()\n", " if not ret:\n", " break \n", " if frame_index%step ==0:\n", " if STOP!=-1 and frame_index > STOP:\n", " break \n", " gray = cv2.resize(normalize(frame)[p[0]:p[2],p[1]:p[3]], (256,256)) \n", " darklevel = np.linalg.norm(gray.reshape(-1).astype(float)) \n", " if darklevel < dark:\n", " # too dark \n", " this_slide, v, i = -1, -1, 0\n", " else: \n", " v, i = compare_slides(gray, slides_v)\n", " this_slide = i if v > threshold else -1 \n", " if debug:\n", " if i>=0:\n", " frame2 = frame.copy() \n", " frame2[p[0]:p[2], p[1]:p[3]] = cv2.resize(original_slides[i][q[0]:q[2], q[1]:q[3]], (p[3]-p[1], p[2]-p[0]))\n", " outp = np.concatenate( (frame2, cv2.addWeighted(frame,0.5,frame2, 0.5,0), frame), axis = 1)\n", " display_img_array(outp, width=1200, cvt=cv2.COLOR_BGR2RGB)\n", " else:\n", " display_img_array(frame, width=400, cvt=cv2.COLOR_BGR2RGB)\n", " print v,i\n", " if frame_index%100 ==0: \n", " frame2 = original_slides[this_slide] if this_slide >=0 else np.zeros_like(original_slides[0])\n", " frame2 = cv2.resize(frame2, (slide_w*frame.shape[0]/slide_h, frame.shape[0])) \n", " outp = np.concatenate( (frame, frame2), axis = 1)\n", " img_widget.value = img_to_png(outp, cvt=cv2.COLOR_BGR2RGB)\n", " img_widget.height=600\n", " progress.value = frame_index \n", " progress_text.value = \"%d/%d (%.1f)\"%(frame_index, num_of_frames, 100.0*frame_index/num_of_frames)\n", " if i >=0:\n", " progress_text.value += \" match: %d, %s\"%(i, v)\n", " \n", " if this_slide != last_slide:\n", " # update\n", " frame_list.append( (last_start, frame_index-1, last_slide))\n", " \n", " # display information \n", " if last_slide >=0: \n", " fl = frame_list[-1]\n", " t1, t2 = frame_to_time(fl[0], frame_rate), frame_to_time(fl[1], frame_rate)\n", " print fl, \"=(%s, %s)\"%(t1,t2), \"v=%f\"%v, \"dark=%d\"%darklevel\n", " last_start = frame_index \n", " last_slide = this_slide\n", " # last update\n", " frame_list.append( (last_start, frame_index-1, last_slide))\n", " cap.release()\n", " return frame_list" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "def write_file(fn, p,q, outfn, original_slides, sync_result, M=20, fourcc=\"XVID\", SKIP=None, WH=None): \n", " # W,H = 1920, 1080\n", " cap = cv2.VideoCapture(fn)\n", " SW, SH = int(cap.get(cv.CV_CAP_PROP_FRAME_WIDTH)), int(cap.get(cv.CV_CAP_PROP_FRAME_HEIGHT))\n", " if WH==None:\n", " W, H = SW, SH\n", " else:\n", " W,H = WH\n", " print \"(W,H)\", W,H\n", " sys.stdout.flush()\n", " p2 = ( p[0]*H/SH, p[1]*W/SW, p[2]*H/SH, p[3]*W/SW)\n", " pw, ph = p2[3]-p2[1], p2[2]-p2[0]\n", " print p2, q\n", " fourcc = cv.FOURCC(*fourcc)\n", " num_of_frames = cap.get(cv.CV_CAP_PROP_FRAME_COUNT)\n", " frame_rate = cap.get(cv.CV_CAP_PROP_FPS)\n", " print \"frame_rate\", frame_rate\n", " sys.stdout.flush()\n", " out = cv2.VideoWriter(outfn, fourcc, frame_rate, (W, H))\n", " frame_index =-1\n", " last_slide = -1\n", " last_start = -1\n", " frame_list = []\n", " result_index = 0\n", " progress = widgets.IntProgressWidget(min=0, max = num_of_frames - 1, value=0)\n", " progress_text = widgets.TextWidget()\n", " progress.set_css('background', 'black')\n", " display(progress)\n", " display(progress_text)\n", " img_widget = widgets.ImageWidget()\n", " display(img_widget)\n", " while cap.isOpened():\n", " frame_index +=1\n", " ret, frame = cap.read()\n", " if not ret:\n", " break\n", " while result_index < len(sync_result) and sync_result[result_index][1] < frame_index:\n", " result_index += 1 \n", " the_slide = (-1,-1,-1) if result_index >= len(sync_result) else sync_result[result_index]\n", " if SKIP and the_slide[2] in SKIP:\n", " the_slide = (-1,-1,-1)\n", " original_frame = cv2.resize(frame, (W, H), interpolation = cv2.INTER_CUBIC)\n", " if the_slide[2] >=0 and the_slide[1]-the_slide[0]>3*M:\n", " slide = original_slides[the_slide[2]]\n", " inner_frame = cv2.resize(slide[q[0]:q[2], q[1]:q[3]], (pw, ph), interpolation = cv2.INTER_CUBIC )\n", " d = min(frame_index-the_slide[0], the_slide[1]-frame_index)\n", " out_frame = original_frame.copy()\n", " out_frame[p2[0]:p2[2], p2[1]:p2[3]] = inner_frame\n", " if d < M:\n", " out_frame = cv2.addWeighted(out_frame, d*1.0/M , original_frame, 1- d*1.0/M, 0)\n", " else:\n", " out_frame = original_frame\n", " out.write(out_frame)\n", " if frame_index%100 ==0:\n", " progress.value = frame_index \n", " progress_text.value = \"%d/%d (%.1f)\"%(frame_index, num_of_frames, 100.0*frame_index/num_of_frames)\n", " disp_frame = np.concatenate((out_frame[:, :W/2], original_frame[:,W/2:]), axis=1) \n", " img_widget.value = img_to_png(disp_frame, cvt=cv2.COLOR_BGR2RGB) \n", " img_widget.width = \"800\"\n", " cap.release()\n", " out.release()\n", " \n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "import os.path\n", "def load_original_slides(name):\n", " original_slides = []\n", " i = 0\n", " #progress = widgets.IntProgressWidget(min=0, max = num_of_frames - 1, value=0)\n", " progress_text = widgets.TextWidget()\n", " #progress.set_css('background', 'black')\n", " #display(progress)\n", " display(progress_text)\n", " while True: \n", " progress_text.value = \"loading %d\"%i\n", " img = cv2.imread(\"%s/%s-%d.png\"%(name, name, i))\n", " if img is None:\n", " break \n", " original_slides.append(img)\n", " i+=1\n", " print \"load original slides\", len(original_slides)\n", " return original_slides\n", "def prepare_slides(original_slides, q, blur_factor):\n", " normalized_slides = (cv2.blur(normalize(s), (blur_factor, blur_factor)) for s in original_slides)\n", " slides = [cv2.resize(s[q[0]:q[2], q[1]:q[3]], (256,256), interpolation = cv2.INTER_CUBIC) for s in normalized_slides]\n", " slides_v = np.array([gray2vector(s) for s in slides])\n", " print \"slides prepared\"\n", " return slides, slides_v\n", " " ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "original_slides, original_slides_name, result = None, None, None" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "def auto_sync(NAME, p1, q1, blur_factor, p2=None, q2=None, threshold=0.8, step=10, dark=1500, STOP=-1, debug=False, \n", " SKIP=None, M=20, PASS=[3], fourcc=\"XVID\", EXT=\"avi\", WH=None):\n", " global original_slides, result, original_slides_name\n", " print \"NAME=\", NAME \n", " if 0 in PASS or not os.path.isfile(\"%s/%s-0.png\"%(NAME,NAME)) : # 0 Extract PDF\n", " print \"extract slides\"\n", " sys.stdout.flush()\n", " print os.system(\"convert -density 200 %s/%s.pdf %s/%s.png\"%(NAME,NAME,NAME,NAME))\n", " result_slides_name = original_slides_name\n", " if 1 in PASS or original_slides_name != NAME:\n", " print \"load original png\"\n", " original_slides = load_original_slides(NAME)\n", " original_slides_name = NAME \n", " fn_base = \"%s/%s\"%(NAME,NAME) \n", " if os.path.isfile(fn_base+\".mp4\"):\n", " fn = fn_base+\".mp4\"\n", " elif os.path.isfile(fn_base+\".avi\"):\n", " fn = fn_base+\".avi\"\n", " else:\n", " print \"original video file does not exist\"\n", " return\n", " outfn = \"%s/better_%s.%s\"%(NAME, NAME, EXT)\n", " \n", "\n", " if 2 in PASS or result_slides_name != NAME: # Sync Video and Slides\n", " print \"prepare slides\"\n", " slides, slides_v = prepare_slides(original_slides, q1, blur_factor) \n", " print \"syncing video\"\n", " result = sync_video(fn, p1, slides, slides_v, threshold=threshold, step=step, dark=dark, STOP=STOP, debug=debug)\n", " print \"sync_video done\" \n", " \n", " if p2 is None: # full screen\n", " p2 = p1\n", " if q2 is None: # full screen\n", " q2 = q1\n", " \n", " if 3 in PASS or original_slides_name != NAME:\n", " print \"start writing and converting\"\n", " TEMP_OUT = \"temp_out.\"+EXT\n", " write_file(fn, p1, q1, TEMP_OUT, original_slides, result, M=M, fourcc=fourcc, SKIP=SKIP, WH=WH)\n", " print \"write done\"\n", " sys.stdout.flush()\n", " retcode = os.system(\"avconv -y -i %s -i %s -map 0:v -map 1:a -c:v copy -c:a copy %s\"%(TEMP_OUT, fn, outfn))\n", " print \"covert done\", retcode" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 73 }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor = (10, 160, 1080, 1754) , (0, 40, 2112, 2844) , 10 \n", "p2, q2 = p1, q1\n", "auto_sync(\"tulip\", p1,q1, blur_factor, p2,q2, threshold=0.9, M=5, fourcc=\"x264\", EXT=\"mp4\", SKIP=[28], PASS=[2])" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1,blur_factor = (10, 159, 1080, 1754) , (0, 39, 2112, 2844) , 16\n", "p2, q2 = (10, 131, 1080, 1750) , (0, 0, 2115, 2844),\n", "auto_sync(\"graphtool\", p1,q1, blur_factor, p2, q2, threshold=0.7, SKIP=[7, 90, 91,92,93,94,95,96,97], PASS=[2])" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor = (10, 159, 1080, 1750) , (0, 35, 2115, 2844), 16\n", "p2,q2 = (10, 138, 1080, 1750) , (0, 0, 2115, 2844) # test abcdefg\n", "auto_sync(\"ls\", p1,q1, blur_factor, p2,q2, threshold=0.8, SKIP=[4,35,36] , PASS=[2])" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor = (211, 281, 958, 1723) , (0, 68, 2133, 2838) , 18\n", "p2,q2 = None, None \n", "auto_sync(\"fabric\", p1,q1, blur_factor, p2,q2, threshold=0.8, SKIP=[19], M=40)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor = (145, 160, 954, 1751) , (0, 27, 1125, 2000) , 12\n", "p2, q2 = None, None\n", "auto_sync(\"vote\", p1,q1, blur_factor, p2,q2, threshold=0.75, M=2)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor = (11, 144, 1080, 1752) , (0, 0, 1485, 2000) , 16\n", "p2, q2 = p1, q1\n", "auto_sync(\"mezz\", p1,q1, blur_factor, p2,q2, threshold=0.9, M=20)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor = (11, 135, 1080, 1753) , (0, 0, 2113, 2844) , 16\n", "p2, q2 = p1, q1\n", "auto_sync(\"summly\", p1,q1, blur_factor, p2,q2, threshold=0.935, M=20)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor = (19, 160, 1067, 1672) , (0, 80, 2070, 2844), 36\n", "p2, q2 = p1, q1\n", "auto_sync(\"StreetVoice\", p1,q1, blur_factor, p2,q2, threshold=0.5, M=20)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor = (19, 108, 1080, 1688) , (0, 0, 2084, 2844), 26\n", "p2, q2 = p1, q1\n", "auto_sync(\"grs\", p1,q1, blur_factor, p2,q2, threshold=0.7, M=20)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor=(73, 7, 1028, 1429), (8, 32, 2133, 2842), 13\n", "p2,q2=(69, 0, 1028, 1430), [0, 17, 2133, 2844]\n", "auto_sync(\"dmhs\", p1,q1, blur_factor, p2,q2, threshold=0.6, M=20, SKIP=[0, 6, 17], PASS=[3])" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor=(87, 5, 404, 633), (9, 28, 1125, 2000), 14\n", "p2,q2=(84, 0, 404, 633), [0, 9, 1125, 2000]\n", "auto_sync(\"present\", p1,q1, blur_factor, p2,q2, threshold=0.7, M=20, WH=(1440,1080), PASS=[2,3])" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor=(33, 4, 453, 635), (8, 30, 2119, 2844), 18\n", "p2,q2=(31, 0, 456, 635), [0, 8, 2133, 2844]\n", "auto_sync(\"hai\", p1,q1, blur_factor, p2,q2, threshold=0.7, M=20, WH=(1440,1080))" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor=(34, 2, 451, 629), (4, 8, 1500, 2000), 14\n", "p2,q2=(32, 0, 451, 629), [0, 0, 1500, 2000]\n", "auto_sync(\"vim\", p1,q1, blur_factor, p2,q2, threshold=0.8, M=20, WH=(1440,1080))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "NAME= vim\n", "load original png\n", "load original slides" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 17\n", "prepare slides\n", "slides prepared" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "syncing video\n", "frame_rate 29.97002997\n", "(510, 1489, 0)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(0:17.0, 0:49.7) v=0.880750 dark=10112\n", "(1490, 2859, 1)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(0:49.7, 1:35.4) v=0.874783 dark=7511\n", "(2860, 3809, 2)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(1:35.4, 2:07.1) v=0.992393 dark=40593\n", "(3810, 4639, 3)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(2:07.1, 2:34.8) v=0.880929 dark=9820\n", "(4640, 5879, 4)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(2:34.8, 3:16.2) v=0.874664 dark=9693\n", "(5880, 6299, 5)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(3:16.2, 3:30.2) v=0.314825 dark=27658\n", "(9020, 9049, 5)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(5:01.0, 5:01.9) v=0.894895 dark=8972\n", "(9050, 9919, 6)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(5:02.0, 5:31.0) v=0.314081 dark=27138\n", "(10510, 10569, 6)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(5:50.7, 5:52.7) v=0.891409 dark=9972\n", "(10570, 11779, 7)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(5:52.7, 6:33.0) v=0.312722 dark=26447\n", "(15110, 15209, 7)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(8:24.2, 8:27.5) v=0.314112 dark=26469\n", "(17290, 17909, 7)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(9:36.9, 9:57.6) v=0.318960 dark=24984\n", "(19270, 19319, 7)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(10:43.0, 10:44.6) v=0.886876 dark=8421\n", "(19320, 19349, 8)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(10:44.6, 10:45.6) v=0.890548 dark=9772\n", "(19350, 20189, 7)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(10:45.6, 11:13.6) v=0.886495 dark=8399\n", "(20190, 20369, 8)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(11:13.7, 11:19.6) v=0.674841 dark=7892\n", "(20380, 20689, 8)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(11:20.0, 11:30.3) v=0.300560 dark=26469\n", "(21740, 22079, 8)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(12:05.4, 12:16.7) v=0.882859 dark=8892\n", "(22080, 22389, 9)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(12:16.7, 12:27.0) v=0.314180 dark=26330\n", "(23570, 23749, 9)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(13:06.5, 13:12.4) v=0.282210 dark=22812\n", "(24200, 24289, 9)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(13:27.5, 13:30.4) v=0.332195 dark=24593\n", "(24850, 24909, 9)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(13:49.2, 13:51.1) v=0.884287 dark=8687\n", "(24910, 25269, 10)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(13:51.2, 14:03.1) v=0.312524 dark=26418\n", "(26450, 26489, 10)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(14:42.5, 14:43.8) v=0.236490 dark=11876\n", "(26630, 26639, 9)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(14:48.6, 14:48.9) v=0.720991 dark=7883\n", "(26650, 27539, 10)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(14:49.2, 15:18.9) v=0.670329 dark=7777\n", "(27550, 27689, 10)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(15:19.3, 15:23.9) v=0.884074 dark=7866\n", "(27690, 27899, 11)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(15:23.9, 15:30.9) v=0.885193 dark=8865\n", "(27900, 27949, 10)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(15:30.9, 15:32.6) v=0.883748 dark=7886\n", "(27950, 28209, 11)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(15:32.6, 15:41.2) v=0.352887 dark=13769\n", "(29280, 29289, 11)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(16:17.0, 16:17.3) v=0.323675 dark=12192\n", "(29440, 31019, 11)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(16:22.3, 17:15.0) v=0.883191 dark=8352\n", "(31020, 31909, 12)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(17:15.0, 17:44.7) v=0.271830 dark=26401\n", "(32770, 33209, 12)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(18:13.4, 18:28.1) v=0.885606 dark=8130\n", "(33210, 33759, 13)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(18:28.1, 18:46.4) v=0.313255 dark=27302\n", "(35280, 35349, 13)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(19:37.2, 19:39.5) v=0.880311 dark=9045\n", "(35350, 35369, 14) =(19:39.5, 19:40.1) v=0.883706 dark=7905\n", "(35370, 35509, 13)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(19:40.2, 19:44.8) v=0.296882 dark=21428\n", "(35850, 35899, 13)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(19:56.2, 19:57.8) v=0.879523 dark=9066\n", "(35900, 35949, 14)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(19:57.9, 19:59.5) v=0.884199 dark=7829\n", "(35950, 35959, 13) =(19:59.5, 19:59.8) v=0.879959 dark=8882\n", "(35960, 36919, 14)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(19:59.9, 20:31.9) v=0.306256 dark=24196\n", "(37580, 37589, 14)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(20:53.9, 20:54.2) v=0.288880 dark=10194\n", "(39230, 39269, 14)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(21:49.0, 21:50.3) v=0.340925 dark=11169\n", "(42970, 42999, 14)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(23:53.8, 23:54.7) v=0.477629 dark=8324\n", "(43100, 43119, 14)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(23:58.1, 23:58.7) v=0.223015 dark=2467\n", "(43130, 43249, 15)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(23:59.1, 24:03.1) v=0.299696 dark=11126\n", "(46260, 46309, 15)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(25:43.5, 25:45.2) v=0.303056 dark=12248\n", "(47900, 47939, 15)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(26:38.3, 26:39.6) v=0.397188 dark=23937\n", "(49930, 49949, 15)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(27:46.0, 27:46.6) v=0.319250 dark=6208\n", "(49960, 50129, 16)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " =(27:47.0, 27:52.6) v=0.312347 dark=13905\n", "sync_video done" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "start writing and converting\n", "(W,H)" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 1440 1080\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "(76, 4, 1014, 1415) (4, 8, 1500, 2000)\n", "frame_rate 29.97002997\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "write done\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "covert done 0\n" ] } ], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "p1,q1, blur_factor=(126, 1, 443, 631), (6, 12, 1125, 2000), 12\n", "p2,q2=(124, 0, 443, 631), [0, 6, 1125, 2000]\n", "auto_sync(\"openstack\", p1,q1, blur_factor, p2,q2, threshold=0.7, M=20, WH=(1440,1080), SKIP=[3,14,35,36])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "NAME= openstack\n", "start writing and converting\n", "(W,H) 1440 1080\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "(283, 2, 996, 1419) (6, 12, 1125, 2000)\n", "frame_rate 29.97002997\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "write done\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "covert done 0\n" ] } ], "prompt_number": 80 }, { "cell_type": "code", "collapsed": false, "input": [ "result" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 79, "text": [ "[(-1, 1819, -1),\n", " (1820, 3119, 2),\n", " (3120, 4229, 3),\n", " (4230, 5089, 4),\n", " (5090, 7119, 5),\n", " (7120, 9649, 6),\n", " (9650, 12159, 7),\n", " (12160, 14419, 8),\n", " (14420, 17279, 9),\n", " (17280, 19809, 10),\n", " (19810, 22339, 11),\n", " (22340, 22589, 12),\n", " (22590, 23319, 13),\n", " (23320, 23399, 35),\n", " (23400, 23859, 36),\n", " (23860, 24239, 3),\n", " (24240, 25979, 14),\n", " (25980, 26689, -1),\n", " (26690, 28429, 16),\n", " (28430, 29339, 17),\n", " (29340, 30389, 18),\n", " (30390, 30849, 19),\n", " (30850, 30889, 20),\n", " (30890, 31949, 21),\n", " (31950, 33049, 20),\n", " (33050, 33079, 21),\n", " (33080, 33239, 22),\n", " (33240, 33259, 23),\n", " (33260, 35739, 24),\n", " (35740, 36519, 25),\n", " (36520, 37089, 26),\n", " (37090, 38029, 27),\n", " (38030, 39539, -1),\n", " (39540, 39749, 27),\n", " (39750, 40119, 28),\n", " (40120, 40379, 29),\n", " (40380, 41169, 30),\n", " (41170, 43199, -1),\n", " (43200, 43269, 30),\n", " (43270, 43299, 31),\n", " (43300, 43309, -1),\n", " (43310, 44159, 32),\n", " (44160, 44859, 33),\n", " (44860, 44869, 32),\n", " (44870, 44879, 31),\n", " (44880, 44889, 32),\n", " (44890, 44899, 33),\n", " (44900, 45709, 34),\n", " (45710, 45949, 35),\n", " (45950, 48038, -1)]" ] } ], "prompt_number": 79 } ], "metadata": {} } ] }