|
|
(3 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| = 2001, a reassembled version made with triples =
| |
|
| |
|
| {{#widget:YouTube|id=nuxMHelPVJw}}
| |
|
| |
| == 1. annotate shots from film in spreadsheat in the form of triples, and export to csv file ==
| |
|
| |
| triple = subject + predicate + object<br>
| |
| example: Dave + is located in + main room
| |
|
| |
| 00:00:00.00,00:00:07.00,space,is located in,between stars
| |
| 00:00:07.00,00:01:08.00,spaceship,is located in,space,#,spaceflight,flying to,jupiter,#,spaceship,performs,spaceflight
| |
| 00:01:08.00,00:01:19.00,spaceship,is located in,space
| |
| 00:01:19.00,00:01:31.00,spaceship,is located in,space
| |
| 00:01:31.00,00:01:47.00,dave,is located in,main room,,dave ,running at,main room,,main room ,is located in ,spaceship
| |
| 00:01:47.00,00:01:56.00,other three astronauts,is located in,hybernation beds
| |
| 00:01:56.00,00:02:23.00,dave,is located in,main room,,dave ,running at,main room
| |
| 00:02:23.00,00:02:30.00,dave,is located in,main room,,dave ,running at,main room
| |
|
| |
| == 2. create subtitle file from csv file ==
| |
|
| |
| <source lang="python">
| |
| import os
| |
| import csv
| |
| import itertools
| |
|
| |
| # SIMPLE SRT:
| |
| with open('2001-space-odyssey-simple.srt', 'w') as txt:
| |
| with open('2001-chunks-annotations-01-simple.csv', 'rb') as f:
| |
| reader = csv.reader(f)
| |
| i=1
| |
| for row in reader:
| |
| start = row[0]
| |
| end = row[1]
| |
| x1 = row[2]
| |
| r1 = row[3]
| |
| y1 = row[4]
| |
| x2 = row[6]
| |
| r2 = row[7]
| |
| y2 = row[8]
| |
| x3 = row[10]
| |
| r3 = row[11]
| |
| y3 = row[12]
| |
| x4 = row[14]
| |
| r4 = row[15]
| |
| y4 = row[16]
| |
| x5 = row[18]
| |
| r5 = row[19]
| |
| y5 = row[20]
| |
| x6 = row[22]
| |
| r6 = row[23]
| |
| y6 = row[24]
| |
| x7 = row[26]
| |
| r7 = row[27]
| |
| y7 = row[28]
| |
| x8 = row[30]
| |
| r8 = row[31]
| |
| y8 = row[32]
| |
| x9 = row[34]
| |
| r9 = row[35]
| |
| y9 = row[36]
| |
| a = i
| |
| b = start+" --> "+end
| |
| c = x1+" "+r1+" "+y1+"\n"+x2+" "+r2+" "+y2+"\n"+<br>x3+" "+r3+" "+y3+"\n"+x4+" "+r4+" "+y4+"\n"+x5+" "+<br>r5+" "+y5+"\n"+x6+" "+r6+" "+y6+"\n"+<br>x7+" "+r7+" "+y7+"\n"+x8+" "+r8+" "+y8+"\n"+<br>x9+" "+r9+" "+y9+"\n\n\n"
| |
| # print c
| |
|
| |
| txt.write(str(a)+"\n")
| |
| txt.write(b+"\n")
| |
| txt.write(c)
| |
| i=i+1
| |
| </source>
| |
|
| |
|
| |
|
| |
| 1
| |
| 00:00:00.00 --> 00:00:07.00
| |
| space is located in between stars
| |
|
| |
|
| |
| 2
| |
| 00:00:07.00 --> 00:01:08.00
| |
| spaceship is located in space
| |
| spaceflight flying to jupiter
| |
| spaceship performs spaceflight
| |
|
| |
|
| |
| 3
| |
| 00:01:08.00 --> 00:01:19.00
| |
| spaceship is located in space
| |
|
| |
|
| |
| 4
| |
| 00:01:19.00 --> 00:01:31.00
| |
| spaceship is located in space
| |
|
| |
|
| |
| 5
| |
| 00:01:31.00 --> 00:01:47.00
| |
| dave is located in main room
| |
| dave running at main room
| |
| main room is located in spaceship
| |
|
| |
|
| |
| 6
| |
| 00:01:47.00 --> 00:01:56.00
| |
| other three astronauts is located in hybernation beds
| |
|
| |
| == 3. videogrep all clips that are annotated with 'Dave' ==
| |
|
| |
| searching with regular expressions (re) for either 'dave' and 'dave)'
| |
|
| |
| <source lang="python">
| |
| import os
| |
| import re
| |
|
| |
| p = "python videogrep.py --input 2001-space-odyssey-jupiter-mission.avi --search 'dave\ |dave\)' --output video-dave.mp4"
| |
| print p
| |
| os.system(p)
| |
| </source>
| |
|
| |
|
| |
| == 4. create a ordering of the grepped videoclips, export new videofile where the grepped clips are timestretched to the original shotduration ==
| |
|
| |
| <source lang="python">
| |
|
| |
| from __future__ import division
| |
| import os
| |
| import csv
| |
| import re
| |
| import glob
| |
| import subprocess as sub
| |
| import datetime
| |
| import itertools
| |
|
| |
| # open csv with duration column in it:
| |
| with open('../2001-chunks-annotations-01-duration.csv', 'rb') as f:
| |
| reader = csv.reader(f)
| |
| i=0
| |
|
| |
| # *** GET DURATION OF CSV SHEET (ORIGINAL SHOT DURATION) ***
| |
| for row in reader:
| |
| shotduration = row[3]
| |
| print shotduration
| |
|
| |
| # --> if using an integer number:
| |
| # shotduration = "".join(shotduration)
| |
| # shotduration = shotduration.split('.')
| |
| # shotduration = shotduration[0]
| |
|
| |
| # SHOTDURATION / GREPPEDDURATION = SETPTS
| |
|
| |
| # *** LIST OF VIDEO'S TO REPLACE ORIGINAL SHOTS ***
| |
| videofiles = [
| |
| 'video-between-stars.mp4',
| |
| 'video-jupiter.mp4',
| |
| 'video-space.mp4',
| |
| 'video-space.mp4',
| |
| 'video-main-room.mp4',
| |
| 'video-hybernation-beds.mpeg',
| |
| 'video-main-room.mp4',
| |
| 'video-main-room.mp4',
| |
| 'video-main-room.mp4',
| |
| 'video-undefined-room.mp4',
| |
| 'video-food.mp4',
| |
| 'video-button.mp4',
| |
| 'video-door.mp4',
| |
| 'video-frank.mp4',
| |
| 'video-button.mp4',
| |
| 'video-button.mp4',
| |
| 'video-BBC.mp4',
| |
| 'video-main-room.mp4',
| |
| 'video-tablet.mp4',
| |
| 'video-couch.mp4',
| |
| 'video-earth.mp4',
| |
| 'video-other-three-astronauts.mpeg',
| |
| 'video-frank-and-dave.mp4',
| |
| 'video-hybernation.mp4',
| |
| 'video-tablet.mp4',
| |
| 'video-earth.mp4',
| |
| 'video-hybernation-beds.mpeg',
| |
| 'video-food.mp4',
| |
| 'video-frank-at-tablet.mp4',
| |
| 'video-frank-and-dave-at-tablet.mp4',
| |
| 'video-hybernation-beds.mpeg',
| |
| 'video-HAL.mp4',
| |
| 'video-main-room.mp4',
| |
| 'video-earth.mp4',
| |
| 'video-HAL.mp4',
| |
| 'video-earth.mp4',
| |
| 'video-BBC.mp4',
| |
| 'video-eating-table.mp4',
| |
| 'video-tablet.mp4',
| |
| 'video-earth.mp4',
| |
| 'video-frank-at-tablet.mp4',
| |
| 'video-HAL.mp4',
| |
| 'video-tablet.mp4',
| |
| 'video-main-room.mp4',
| |
| 'video-HAL.mp4'
| |
| ]
| |
| # print videofiles[i]
| |
|
| |
| # *** READING DURATION OF LIST OF VIDEOFILES***
| |
| v = "ffmpeg -i "+videofiles[i]+" 2>&1 | grep Duration | awk '{print $2}' | tr -d ,"
| |
| # print v
| |
| p = os.popen(v,'rb')
| |
| while 1:
| |
| line = p.readline()
| |
| if not line: break
| |
| # print line
| |
| number = line.split(':')
| |
| # print number[0]
| |
|
| |
| # *** CONVERTING TIMESTAMP
| |
| # TO INTEGER (IN SECONDS) ***
| |
| hours = float(number[0])*2400
| |
| # print number[1]
| |
| minutes = float(number[1])*60
| |
| # print number[2]
| |
| seconds = float(number[2])
| |
|
| |
| # --> if using integer number:
| |
| # seconds = number[2].split('.')
| |
| # seconds = seconds[0]
| |
|
| |
| clipduration = float(hours)+float(minutes)+float(seconds)
| |
| print clipduration
| |
|
| |
| # set stretch value:
| |
| pts = float(shotduration) / float(clipduration)
| |
| print pts
| |
| # print i
| |
|
| |
| # *** STRETCH THE VIDEOFILES TO ORIGINAL SHOT DURATION
| |
| # (DIVIDING SHOTDURATION / CLIPDURATION)
| |
| # SHOTDURATION = FROM ORIGINAL FILM SPEED
| |
| # CLIPDURATION = LENGTH OF VIDEOGREPPED VIDEOS ***
| |
| x = "ffmpeg -i "+videofiles[i]+" -vf 'setpts="+str(pts)+"*PTS' -an -y export/0"+str(i)+".mpeg"
| |
| print x
| |
| os.system(x)
| |
|
| |
| # *** WRITE VIDEO FILENAME TO TXT FILE ***
| |
| with open('clipslist.txt', 'w') as txt:
| |
| m = 0
| |
| for video in videofiles:
| |
| print>>txt,"file 'export/0"+str(m)+".mpeg'"
| |
| m=m+1
| |
|
| |
| print "ENDING"
| |
| i=i+1
| |
|
| |
| # *** joining the stretched clips together in one file ***
| |
| a = "ffmpeg -f concat -i clipslist.txt -c copy 2001-joined-clips-01.avi"
| |
| print a
| |
| os.system(a)
| |
|
| |
| </source>
| |