User:Manetta/scripts/python-csv-ffmpeg-2001-triples
< User:Manetta
Revision as of 09:51, 24 March 2015 by Manetta (talk | contribs) (→2. create subtitle file from csv file)
2001, a reassembled version made with triples
1. annotate shots from film in spreadsheat in the form of triples, and export to csv file
triple = subject + predicate + object
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
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
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)'
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)
4. create a ordering of the grepped videoclips, export new videofile where the grepped clips are timestretched to the original shotduration
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)