commit 4e1a5c09ca3b23b05597bd520092ea9bd637c033
parent c3413c5e508fa50b4a9cdad4ce54602ff5841413
Author: rbckman <rob@tarina.org>
Date: Sat, 19 Aug 2023 15:20:13 +0100
make ln!
Diffstat:
M | tarina.py | | | 430 | ++++++++++++++++++++++++++++--------------------------------------------------- |
1 file changed, 152 insertions(+), 278 deletions(-)
diff --git a/tarina.py b/tarina.py
@@ -94,7 +94,7 @@ else:
#MAIN
def main():
- global headphoneslevel, miclevel, tarinafolder, screen, loadfilmsettings, plughw, channels, filmfolder, scene, showmenu, rendermenu, quality, profilelevel, i2cbuttons, menudone, soundrate, soundformat, process, serverstate, que, port, recording, onlysound, camera_model, fps_selection, fps_selected, fps, db, selected, cammode
+ global headphoneslevel, miclevel, tarinafolder, screen, loadfilmsettings, plughw, channels, filmfolder, scene, showmenu, quality, profilelevel, i2cbuttons, menudone, soundrate, soundformat, process, serverstate, que, port, recording, onlysound, camera_model, fps_selection, fps_selected, fps, db, selected
# Get path of the current dir, then use it as working directory:
rundir = os.path.dirname(__file__)
if rundir != '':
@@ -106,7 +106,7 @@ def main():
tarinafolder = os.getcwd()
#MENUS
- menu = 'FILM:', 'SCENE:', 'SHOT:', 'TAKE:', '', 'SHUTTER:', 'ISO:', 'RED:', 'BLUE:', 'FPS:', 'Q:', 'BRIGHT:', 'CONT:', 'SAT:', 'FLIP:', 'BEEP:', 'LENGTH:', 'HW:', 'CH:', 'MIC:', 'PHONES:', 'COMP:', 'TIMELAPSE', 'MODE:', 'DSK:', 'SHUTDOWN', 'SRV:', 'WIFI:', 'UPDATE', 'UPLOAD', 'BACKUP', 'LOAD', 'NEW', 'TITLE', 'LIVE:'
+ menu = 'FILM:', 'SCENE:', 'SHOT:', 'TAKE:', '', 'SHUTTER:', 'ISO:', 'RED:', 'BLUE:', 'FPS:', 'Q:', 'BRIGHT:', 'CONT:', 'SAT:', 'FLIP:', 'BEEP:', 'LENGTH:', 'HW:', 'CH:', 'MIC:', 'PHONES:', 'COMP:', 'TIMELAPSE', 'LENS:', 'DSK:', 'SHUTDOWN', 'SRV:', 'WIFI:', 'UPDATE', 'UPLOAD', 'BACKUP', 'LOAD', 'NEW', 'TITLE', 'LIVE:'
#STANDARD VALUES (some of these may not be needed, should do some clean up)
abc = '_','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0'
keydelay = 0.0555
@@ -115,7 +115,6 @@ def main():
awb = 'auto', 'sunlight', 'cloudy', 'shade', 'tungsten', 'fluorescent', 'incandescent', 'flash', 'horizon'
awbx = 0
awb_lock = 'no'
- cammode = 'film'
camera_model=''
fps = 25
fps_selected=2
@@ -123,7 +122,7 @@ def main():
profilelevel='4.2'
headphoneslevel = 40
miclevel = 50
- soundformat = 'S16_LE'
+ soundformat = 'S32_LE'
soundrate = '48000'
recording = False
retake = False
@@ -160,7 +159,7 @@ def main():
updatethumb = False
loadfilmsettings = True
oldsettings = ''
- comp = 0
+ comp = 1
yankedscene = ''
cuttedscene = ''
cuttedshot = ''
@@ -229,8 +228,6 @@ def main():
serverstate_old='off'
wifistate_old='off'
- camera_model, camera_revision = getconfig(camera)
-
#--------------MAIN LOOP---------------#
while True:
pressed, buttonpressed, buttontime, holdbutton, event, keydelay = getbutton(pressed, buttonpressed, buttontime, holdbutton)
@@ -255,26 +252,14 @@ def main():
writemessage('Hold on shutting down...')
time.sleep(1)
run_command('sudo shutdown -h now')
- #MODE
- elif pressed == 'changemode':
- if cammode == 'film':
- cammode = 'picture'
- vumetermessage('changing to picture mode')
- elif cammode == 'picture':
- cammode = 'film'
- vumetermessage('changing to film mode')
- camera.stop_preview()
- camera.close()
- camera = startcamera(lens,fps)
- loadfilmsettings = True
#PICTURE
elif pressed == 'picture':
if os.path.isdir(foldername) == False:
os.makedirs(foldername)
picture = foldername +'picture' + str(take).zfill(3) + '.jpeg'
- run_command('touch ' + foldername + '.placeholder')
print('taking picture')
- camera.capture(picture,format="jpeg",use_video_port=True)
+ camera.capture(picture,format="jpeg",use_video_port=True)
+ #INSERT SCENE
#PEAKING
elif pressed == 'peak' and recordable == True:
if shot > 1:
@@ -286,16 +271,6 @@ def main():
pressed, buttonpressed, buttontime, holdbutton, event, keydelay = getbutton(pressed, buttonpressed, buttontime, holdbutton)
writemessage('peaking ' + str(peakshot))
overlay = removeimage(camera, overlay)
- #SHOWHELP
- elif pressed == 'showhelp':
- vumetermessage('Button layout')
- overlay = removeimage(camera, overlay)
- overlay = displayimage(camera, tarinafolder+'/extras/buttons.png', overlay, 4)
- while holdbutton == 'showhelp':
- pressed, buttonpressed, buttontime, holdbutton, event, keydelay = getbutton(pressed, buttonpressed, buttontime, holdbutton)
- vumetermessage('Button layout')
- overlay = removeimage(camera, overlay)
- updatethumb = True
#TIMELAPSE
elif pressed == 'middle' and menu[selected] == 'TIMELAPSE':
overlay = removeimage(camera, overlay)
@@ -305,7 +280,7 @@ def main():
take = 1
foldername = filmfolder + filmname + '/' + 'scene' + str(scene).zfill(3) +'/shot' + str(shot).zfill(3) + '/'
filename = 'take' + str(take).zfill(3)
- renderedfilename, between, duration = timelapse(beeps,camera,filmname,foldername,filename,between,duration,backlight)
+ renderedfilename, between, duration = timelapse(beeps,camera,foldername,filename,between,duration)
if renderedfilename != '':
#render thumbnail
#writemessage('creating thumbnail')
@@ -313,49 +288,39 @@ def main():
updatethumb = True
#VIEW SCENE
elif pressed == 'view' and menu[selected] == 'SCENE:':
- organize(filmfolder, filmname)
filmfiles = shotfiles(filmfolder, filmname, scene)
+ writemessage('Loading scene...')
if len(filmfiles) > 0:
- writemessage('Loading scene...')
#Check if rendered video exist
camera.stop_preview()
#renderfilename, newaudiomix = renderscene(filmfolder, filmname, scene)
renderfilename = renderfilm(filmfolder, filmname, comp, scene, False)
remove_shots = playdub(filmname,renderfilename, 'scene')
- if remove_shots != []:
- for i in remove_shots:
- remove(filmfolder, filmname, scene, i, take, 'shot')
- organize(filmfolder, filmname)
- updatethumb = True
- #loadfilmsettings = True
- time.sleep(0.5)
- else:
+ try:
+ if remove_shots != []:
+ for i in remove_shots:
+ remove(filmfolder, filmname, scene, i, take, 'shot')
+ organize(filmfolder, filmname)
+ scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take)
+ updatethumb = True
+ time.sleep(0.5)
+ except:
print('nothing to remove')
camera.start_preview()
- else:
- vumetermessage("There's absolutely nothing in this scene! hit rec!")
#VIEW FILM
elif pressed == 'view' and menu[selected] == 'FILM:':
- organize(filmfolder, filmname)
filmfiles = viewfilm(filmfolder, filmname)
+ writemessage('Loading film...')
if len(filmfiles) > 0:
- writemessage('Loading film...')
camera.stop_preview()
- #removeimage(camera, overlay)
renderfilename = renderfilm(filmfolder, filmname, comp, 0, True)
- if renderfilename != '':
- remove_shots = playdub(filmname,renderfilename, 'film')
- #overlay = displayimage(camera, imagename, overlay, 3)
+ playdub(filmname,renderfilename, 'film')
camera.start_preview()
- else:
- vumetermessage('wow, shoot first! there is zero, nada, zip footage to watch now... just hit rec!')
- rendermenu = True
#VIEW SHOT OR TAKE
elif pressed == 'view':
- organize(filmfolder, filmname)
takes = counttakes(filmname, filmfolder, scene, shot)
+ writemessage('Loading clip...')
if takes > 0:
- writemessage('Loading clip...')
removeimage(camera, overlay)
camera.stop_preview()
foldername = filmfolder + filmname + '/scene' + str(scene).zfill(3) +'/shot' + str(shot).zfill(3) + '/'
@@ -369,8 +334,6 @@ def main():
imagename = foldername + filename + '.jpeg'
overlay = displayimage(camera, imagename, overlay, 3)
camera.start_preview()
- else:
- vumetermessage('nothing here! hit rec!')
#DUB SHOT
elif pressed == 'middle' and menu[selected] == 'SHOT, not so fast:':
newdub = clipsettings(filmfolder, filmname, scene, shot, plughw)
@@ -468,7 +431,7 @@ def main():
with open(filmfolder + filmname + '/.filmhash', 'w') as f:
f.write(filmhash)
updatethumb = True
- rendermenu = True
+ updatemenu = True
scene = 1
shot = 1
take = 1
@@ -634,11 +597,9 @@ def main():
# requires wiringpi installed
run_command('gpio -g pwm 19 1023')
backlight = True
- camera.start_preview()
elif backlight == True:
run_command('gpio -g pwm 19 0')
backlight = False
- camera.stop_preview()
elif pressed == 'showmenu':
if showmenu == 1:
# requires wiringpi installed
@@ -653,20 +614,16 @@ def main():
remove(filmfolder, filmname, scene, shot, take, 'take')
organize(filmfolder, filmname)
scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take)
- take = counttakes(filmname, filmfolder, scene, shot)
updatethumb = True
- rendermenu = True
- #loadfilmsettings = True
+ loadfilmsettings = True
time.sleep(0.5)
#shot
elif pressed == 'remove' and menu[selected] == 'SHOT:':
remove(filmfolder, filmname, scene, shot, take, 'shot')
organize(filmfolder, filmname)
scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take)
- take = counttakes(filmname, filmfolder, scene, shot)
updatethumb = True
- rendermenu = True
- #loadfilmsettings = True
+ loadfilmsettings = True
time.sleep(0.5)
#scene
elif pressed == 'remove' and menu[selected] == 'SCENE:':
@@ -674,10 +631,8 @@ def main():
organize(filmfolder, filmname)
scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take)
shot = countshots(filmname, filmfolder, scene)
- take = counttakes(filmname, filmfolder, scene, shot)
updatethumb = True
- rendermenu = True
- #loadfilmsettings = True
+ loadfilmsettings = True
time.sleep(0.5)
#film
elif pressed == 'remove' and menu[selected] == 'FILM:':
@@ -689,7 +644,6 @@ def main():
scene, shot, take = countlast(filmname, filmfolder)
loadfilmsettings = True
updatethumb = True
- rendermenu = True
time.sleep(0.5)
#RECORD AND PAUSE
@@ -712,7 +666,11 @@ def main():
if pressed == 'record' or pressed == 'retake' or reclenght != 0 and t > reclenght:
overlay = removeimage(camera, overlay)
if recording == False and recordable == True:
- scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take)
+ scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take)
+ videos_totalt = db.query("SELECT COUNT(*) AS videos FROM videos")[0]
+ tot = int(videos_totalt.videos)
+ video_origins=datetime.datetime.now().strftime('%Y%d%m')+str(tot).zfill(5)
+ db.insert('videos', tid=datetime.datetime.now(), filename=filmfolder+'.videos/'+video_origins+'.mp4', foldername=foldername, filmname=filmname, scene=scene, shot=shot, take=take, audiolenght=0, videolenght=0)
if pressed == "record":
#shot = shots+1
take = takes+1
@@ -725,32 +683,14 @@ def main():
beeping = False
if os.path.isdir(foldername) == False:
os.makedirs(foldername)
- if cammode == 'film':
- videos_totalt = db.query("SELECT COUNT(*) AS videos FROM videos")[0]
- tot = int(videos_totalt.videos)
- video_origins=datetime.datetime.now().strftime('%Y%d%m')+str(tot).zfill(5)
- db.insert('videos', tid=datetime.datetime.now(), filename=filmfolder+'.videos/'+video_origins+'.mp4', foldername=foldername, filmname=filmname, scene=scene, shot=shot, take=take, audiolenght=0, videolenght=0)
- os.system(tarinafolder + '/alsa-utils-1.1.3/aplay/arecord -D plughw:' + str(plughw) + ' -f '+soundformat+' -c ' + str(channels) + ' -r '+soundrate+' -vv '+ foldername + filename + '.wav &')
- sound_start = time.time()
- if onlysound != True:
- camera.start_recording(filmfolder+ '.videos/'+video_origins+'.h264', format='h264', quality=quality, level=profilelevel)
- starttime = time.time()
- recording = True
- showmenu = 0
- if cammode == 'picture':
- #picdate=datetime.datetime.now().strftime('%Y%d%m')
- picture = foldername +'picture' + str(take).zfill(3) + '.jpeg'
- print('taking picture')
- camera.capture(picture,format="jpeg",use_video_port=True)
- run_command('touch ' + foldername + 'take' + str(take).zfill(3) + '.mp4')
- basewidth = 800
- img = Image.open(picture)
- wpercent = (basewidth/float(img.size[0]))
- hsize = int((float(img.size[1])*float(wpercent)))
- img = img.resize((basewidth,hsize), Image.ANTIALIAS)
- img.save(foldername+'take'+str(take).zfill(3) + '.jpeg')
- vumetermessage('Great Pic taken!!')
- updatethumb = True
+ os.system(tarinafolder + '/alsa-utils-1.1.3/aplay/arecord -D plughw:' + str(plughw) + ' -f '+soundformat+' -c ' + str(channels) + ' -r '+soundrate+' -vv '+ foldername + filename + '.wav &')
+ sound_start = time.time()
+ if onlysound != True:
+ camera.start_recording(filmfolder+ '.videos/'+video_origins+'.h264', format='h264', quality=quality, level=profilelevel)
+ starttime = time.time()
+ os.system('ln -s '+filmfolder+'.videos/'+video_origins+'.h264 '+foldername+filename+'.h264')
+ recording = True
+ showmenu = 0
elif beepcountdown > 0 and beeping == True:
beeping = False
beepcountdown = 0
@@ -760,7 +700,6 @@ def main():
disk = os.statvfs(tarinafolder + '/')
diskleft = str(int(disk.f_bavail * disk.f_frsize / 1024 / 1024 / 1024)) + 'Gb'
recording = False
- os.system('ln -s '+filmfolder+'.videos/'+video_origins+'.h264 '+foldername+filename+'.h264')
if showmenu_settings == True:
showmenu = 1
if onlysound != True:
@@ -828,8 +767,6 @@ def main():
camera.awb_mode = 'auto'
elif pressed == 'middle' and menu[selected] == 'BEEP:':
beeps = 0
- elif pressed == 'middle' and menu[selected] == 'LENGTH:':
- reclenght = 0
elif pressed == 'middle' and menu[selected] == 'LIVE:':
if stream == '':
stream = startstream(camera, stream, plughw, channels)
@@ -846,10 +783,6 @@ def main():
camera.contrast = 0
elif pressed == 'middle' and menu[selected] == 'SAT:':
camera.saturation = 0
- elif pressed == 'middle' and menu[selected] == 'MIC:':
- miclevel = 70
- elif pressed == 'middle' and menu[selected] == 'PHONES:':
- headphoneslevel = 70
#UP
elif pressed == 'up':
@@ -899,8 +832,8 @@ def main():
run_command('amixer -c 0 sset Speaker ' + str(headphoneslevel) + '%')
elif menu[selected] == 'SCENE:' and recording == False:
if scene <= scenes:
+ shot = 1
scene += 1
- shot = countshots(filmname, filmfolder, scene)
take = counttakes(filmname, filmfolder, scene, shot)
#scene, shots, takes = browse2(filmname, filmfolder, scene, shot, take, 0, 1)
#shot = 1
@@ -941,17 +874,6 @@ def main():
elif wifistate == 'off':
run_command('sudo iwconfig wlan0 txpower auto')
wifistate = 'on'
- elif menu[selected] == 'MODE:':
- if cammode == 'film':
- cammode = 'picture'
- vumetermessage('changing to picture mode')
- elif cammode == 'picture':
- cammode = 'film'
- vumetermessage('changing to film mode')
- camera.stop_preview()
- camera.close()
- camera = startcamera(lens,fps)
- loadfilmsettings = True
elif menu[selected] == 'LENS:':
s = 0
for a in lenses:
@@ -979,7 +901,7 @@ def main():
if camera_model == 'imx477':
if fps_selected < len(fps_selection)-1:
fps_selected+=1
- fps_selection=[5,8,10,11,12,13,14,15,24.985,35,49]
+ fps_selection=[8,15,24.985,35,49]
fps=fps_selection[fps_selected]
camera.framerate = fps
elif menu[selected] == 'Q:':
@@ -1051,7 +973,7 @@ def main():
elif menu[selected] == 'SCENE:' and recording == False:
if scene > 1:
scene -= 1
- shot = countshots(filmname, filmfolder, scene)
+ shot = 1
take = counttakes(filmname, filmfolder, scene, shot)
#scene, shots, take = browse2(filmname, filmfolder, scene, shot, take, 0, -1)
#takes = take
@@ -1091,17 +1013,6 @@ def main():
elif wifistate == 'off':
run_command('sudo iwconfig wlan0 txpower auto')
wifistate = 'on'
- elif menu[selected] == 'MODE:':
- if cammode == 'film':
- cammode = 'picture'
- vumetermessage('changing to picture mode')
- elif cammode == 'picture':
- cammode = 'film'
- vumetermessage('changing to film mode')
- camera.stop_preview()
- camera.close()
- camera = startcamera(lens,fps)
- loadfilmsettings = True
elif menu[selected] == 'LENS:':
s = 0
for a in lenses:
@@ -1134,7 +1045,7 @@ def main():
if camera_model == 'imx477':
if fps_selected > 0:
fps_selected-=1
- fps_selection=[5,8,10,11,12,13,14,15,24.985,35,49]
+ fps_selection=[5,15,24.985,35,49]
fps=fps_selection[fps_selected]
camera.framerate = fps
elif menu[selected] == 'Q:':
@@ -1179,7 +1090,6 @@ def main():
serverstate=filmsettings[20]
plughw=filmsettings[21]
channels=filmsettings[22]
- cammode=filmsettings[23]
logger.info('film settings loaded & applied')
time.sleep(0.2)
except:
@@ -1206,8 +1116,11 @@ def main():
time.sleep(5)
except:
print('not exist')
- #organize(filmfolder,'onthefloor')
- scene, shot, take = countlast(filmname, filmfolder)
+ organize(filmfolder,'onthefloor')
+ scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take)
+ scene = scenes
+ shot = shots+1
+ take = takes+1
loadfilmsettings = False
rendermenu = True
updatethumb = True
@@ -1271,7 +1184,7 @@ def main():
#Check if menu is changed and save settings / sec
if buttonpressed == True or recording == True or rendermenu == True:
lastmenu = menu[selected]
- settings = filmname, str(scene) + '/' + str(scenes), str(shot) + '/' + str(shots), str(take) + '/' + str(takes), rectime, camerashutter, cameraiso, camerared, camerablue, str(round(camera.framerate)), str(quality), str(camera.brightness), str(camera.contrast), str(camera.saturation), str(flip), str(beeps), str(reclenght), str(plughw), str(channels), str(miclevel), str(headphoneslevel), str(comp), '', cammode, diskleft, '', serverstate, wifistate, '', '', '', '', '', '', live
+ settings = filmname, str(scene) + '/' + str(scenes), str(shot) + '/' + str(shots), str(take) + '/' + str(takes), rectime, camerashutter, cameraiso, camerared, camerablue, str(round(camera.framerate)), str(quality), str(camera.brightness), str(camera.contrast), str(camera.saturation), str(flip), str(beeps), str(reclenght), str(plughw), str(channels), str(miclevel), str(headphoneslevel), str(comp), '', lens, diskleft, '', serverstate, wifistate, '', '', '', '', '', '', live
#Rerender menu if picamera settings change
#if settings != oldsettings or selected != oldselected:
writemenu(menu,settings,selected,'',showmenu)
@@ -1397,7 +1310,7 @@ def listenforclients(host, port, q):
#--------------Write the menu layer to dispmanx--------------
def writemenu(menu,settings,selected,header,showmenu):
- global menudone, rendermenu
+ global menudone
oldmenu=menudone
menudone = ''
menudoneprint = ''
@@ -1414,7 +1327,7 @@ def writemenu(menu,settings,selected,header,showmenu):
n += 1
spaces = len(menudone) - 500
menudone += spaces * ' '
- if oldmenu != menudone or rendermenu == True:
+ if oldmenu != menudone:
print(term.clear+term.home)
if showmenu == 0:
print(term.red+menudoneprint)
@@ -1552,7 +1465,7 @@ def run_command(command_line):
#command_line_args = shlex.split(command_line)
logger.info('Running: "' + command_line + '"')
try:
- p = subprocess.Popen(command_line, shell=True).wait()
+ process = subprocess.Popen(command_line, shell=True).wait()
# process_output is now a string, not a file,
# you may want to do:
except (OSError, CalledProcessError) as exception:
@@ -1896,17 +1809,17 @@ def nameyourfilm(filmfolder, filmname, abc, newfilm):
#------------Timelapse--------------------------
-def timelapse(beeps,camera,filmname,foldername,filename,between,duration,backlight):
+def timelapse(beeps,camera,foldername,filename,between,duration):
pressed = ''
buttonpressed = ''
buttontime = time.time()
holdbutton = ''
sound = False
selected = 0
- header = 'Adjust delay in seconds between videos'
- menu = 'DELAY:', 'DURATION:', 'SOUND:', 'START', 'BACK'
+ header = 'Adjust delay in seconds between images'
+ menu = 'DELAY:', 'DURATION:', 'START', 'BACK'
while True:
- settings = str(round(between,2)), str(round(duration,2)), str(sound), '', ''
+ settings = str(round(between,2)), str(round(duration,2)), '', ''
writemenu(menu,settings,selected,header,showmenu)
seconds = (3600 / between) * duration
vumetermessage('1 h timelapse filming equals ' + str(round(seconds,2)) + ' second clip ')
@@ -1916,10 +1829,6 @@ def timelapse(beeps,camera,filmname,foldername,filename,between,duration,backlig
elif pressed == 'down' and menu[selected] == 'DELAY:':
if between > 1:
between = between - 1
- if pressed == 'up' and menu[selected] == 'SOUND:':
- sound = True
- elif pressed == 'down' and menu[selected] == 'SOUND:':
- sound = False
elif pressed == 'up' and menu[selected] == 'DURATION:':
duration = duration + 0.1
elif pressed == 'down' and menu[selected] == 'DURATION:':
@@ -1957,7 +1866,7 @@ def timelapse(beeps,camera,filmname,foldername,filename,between,duration,backlig
#camera.start_recording(foldername + 'timelapse/' + filename + '_' + str(n).zfill(3) + '.h264', format='h264', quality=26, bitrate=5000000)
camera.start_recording(foldername + 'timelapse/' + filename + '_' + str(n).zfill(3) + '.h264', format='h264', quality=quality, level=profilelevel)
if sound == True:
- os.system(tarinafolder+'/alsa-utils-1.1.3/aplay/arecord -D hw:'+str(plughw)+' -f '+soundformat+' -c '+str(channels)+' -r '+soundrate+' -vv '+foldername+'timelapse/'+filename+'_'+str(n).zfill(3)+'.wav &')
+ os.system(tarinafolder + '/alsa-utils-1.1.3/aplay/arecord -D hw:'+str(plughw)+' -f '+soundformat+' -c '+str(channels)+' -r '+soundrate+' -vv '+foldername + filename + '_' + str(n).zfill(3) + '.wav &')
files.append(foldername + 'timelapse/' + filename + '_' + str(n).zfill(3))
starttime = time.time()
recording = True
@@ -1974,15 +1883,7 @@ def timelapse(beeps,camera,filmname,foldername,filename,between,duration,backlig
recording = False
starttime = time.time()
t = 0
- if pressed == 'screen':
- if backlight == False:
- # requires wiringpi installed
- run_command('gpio -g pwm 19 1023')
- backlight = True
- elif backlight == True:
- run_command('gpio -g pwm 19 0')
- backlight = False
- elif pressed == 'middle' and n > 1:
+ if pressed == 'middle' and n > 1:
if recording == True:
os.system('pkill arecord')
camera.stop_recording()
@@ -2001,9 +1902,7 @@ def timelapse(beeps,camera,filmname,foldername,filename,between,duration,backlig
for f in files:
if sound == True:
compileshot(f,filmfolder,filmname)
- audiotrim(foldername + 'timelapse/' + filename + '_' + str(n).zfill(3), 'end')
- videomerge.append('-cat')
- videomerge.append(f + '.mp4')
+ audiotrim(foldername + 'timelapse/', filename + '_' + str(n).zfill(3), 'end')
else:
videomerge.append('-cat')
videomerge.append(f + '.h264')
@@ -2048,12 +1947,6 @@ def remove(filmfolder, filmname, scene, shot, take, sceneshotortake):
menu = '', ''
settings = 'NO', 'YES'
selected = 0
- otf_scene = countscenes(filmfolder, 'onthefloor')
- otf_scene += 1
- otf_shot = countshots('onthefloor', filmfolder, otf_scene)
- otf_shot += 1
- otf_take = counttakes('onthefloor', filmfolder, otf_scene, otf_shot)
- otf_take += 1
while True:
writemenu(menu,settings,selected,header,showmenu)
pressed, buttonpressed, buttontime, holdbutton, event, keydelay = getbutton(pressed, buttonpressed, buttontime, holdbutton)
@@ -2086,9 +1979,9 @@ def remove(filmfolder, filmname, scene, shot, take, sceneshotortake):
return
else:
if sceneshotortake == 'take':
- writemessage('Throwing take on the floor' + str(take))
- onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(otf_scene).zfill(3) + '/shot' + str(otf_shot).zfill(3) + '/take' + str(otf_take).zfill(3)
- onthefloor_folder = filmfolder + 'onthefloor/' + 'scene' + str(otf_scene).zfill(3) + '/shot' + str(otf_shot).zfill(3) + '/'
+ writemessage('Throwing take on the floor' + str(shot))
+ onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(1).zfill(3) + '/shot' + str(999).zfill(3) + '/take' + str(999).zfill(3)
+ onthefloor_folder = filmfolder + 'onthefloor/' + 'scene' + str(1).zfill(3) + '/shot' + str(99).zfill(3) + '/'
if os.path.isdir(onthefloor_folder) == False:
os.makedirs(onthefloor)
os.system('mv ' + foldername + filename + '.h264 ' + onthefloor + '.h264')
@@ -2100,13 +1993,13 @@ def remove(filmfolder, filmname, scene, shot, take, sceneshotortake):
take = 1
elif sceneshotortake == 'shot' and shot > 0:
writemessage('Throwing shot on the floor' + str(shot))
- onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(otf_scene).zfill(3) + '/shot' + str(otf_shot).zfill(3)+'/'
+ onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(1).zfill(3) + '/shot' + str(999).zfill(3)+'/'
os.makedirs(onthefloor)
os.system('cp -r '+foldername+'* '+onthefloor)
os.system('rm -r '+foldername)
take = counttakes(filmname, filmfolder, scene, shot)
elif sceneshotortake == 'scene':
- onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(otf_scene).zfill(3)
+ onthefloor = filmfolder + 'onthefloor/' + 'scene' + str(999).zfill(3)
os.makedirs(onthefloor)
writemessage('Throwing clips on the floor ' + str(scene))
foldername = filmfolder + filmname + '/' + 'scene' + str(scene).zfill(3)
@@ -2140,12 +2033,9 @@ def organize(filmfolder, filmname):
logger.info('no takes in this shot, removing shot..')
#os.system('rm -r ' + filmfolder + filmname + '/' + i + '/' + p)
organized_nr = 1
- print(i)
- print(p)
- print(sorted(takes))
- #time.sleep(2)
for s in sorted(takes):
if '.mp4' in s or '.h264' in s:
+ #print(s)
unorganized_nr = int(s[4:7])
takename = filmfolder + filmname + '/' + i + '/' + p + '/take' + str(unorganized_nr).zfill(3)
if '.mp4' in s:
@@ -2153,7 +2043,7 @@ def organize(filmfolder, filmname):
if origin != os.path.abspath(takename+'.mp4'):
print('appending: '+origin)
origin_files.append(origin)
- if '.h264' in s:
+ elif '.h264' in s:
origin=os.path.realpath(takename+'.h264')
if origin != os.path.abspath(takename+'.h264'):
origin_files.append(origin)
@@ -2161,9 +2051,7 @@ def organize(filmfolder, filmname):
#print('correct')
pass
if organized_nr != unorganized_nr:
- print('false, correcting from ' + str(unorganized_nr) + ' to ' + str(organized_nr))
- print(s)
- time.sleep(3)
+ #print('false, correcting from ' + str(unorganized_nr) + ' to ' + str(organized_nr))
mv = 'mv ' + filmfolder + filmname + '/' + i + '/' + p + '/take' + str(unorganized_nr).zfill(3)
run_command(mv + '.mp4 ' + filmfolder + filmname + '/' + i + '/' + p + '/take' + str(organized_nr).zfill(3) + '.mp4')
run_command(mv + '.h264 ' + filmfolder + filmname + '/' + i + '/' + p + '/take' + str(organized_nr).zfill(3) + '.h264')
@@ -2171,13 +2059,10 @@ def organize(filmfolder, filmname):
run_command(mv + '.jpeg ' + filmfolder + filmname + '/' + i + '/' + p + '/take' + str(organized_nr).zfill(3) + '.jpeg')
#check if same video has both h246 and mp4 and render and remove h264
for t in sorted(takes):
- if t.replace('.mp4','') == s.replace('.h264','') or s.replace('.mp4','') == t.replace('.h264',''):
+ if t.strip('.mp4') == s.strip('.h264') or s.strip('.mp4') == t.strip('.h264'):
logger.info('Found both mp4 and h264 of same video!')
- logger.info(t)
- logger.info(s)
- #time.sleep(5)
compileshot(takename,filmfolder,filmname)
- #organized_nr -= 1
+ organized_nr -= 1
organized_nr += 1
# Shots
for i in sorted(scenes):
@@ -2724,11 +2609,8 @@ def renderfilm(filmfolder, filmname, comp, scene, muxing):
proc.terminate()
proc.join()
procdone = True
- q=''
os.system('pkill MP4Box')
vumetermessage('canceled for now, maybe u want to render later ;)')
- writemessage('press any button to continue')
- print('canceling videorender')
renderfilename = ''
break
return renderfilename
@@ -3102,11 +2984,11 @@ def playdub(filmname, filename, player_menu):
if buttonpressed == True:
flushbutton()
if pressed == 'remove':
+ time.sleep(0.2)
if fastedit_shot in remove_shots:
remove_shots.remove(fastedit_shot)
else:
remove_shots.append(fastedit_shot)
- time.sleep(0.2)
elif pressed == 'right':
if selected < (len(settings) - 1):
selected = selected + 1
@@ -3170,20 +3052,24 @@ def playdub(filmname, filename, player_menu):
if dub == True:
os.system('pkill arecord')
if video == True:
- player.pause()
- player.set_position(0)
- if player_menu != 'film':
+ try:
+ player.pause()
playerAudio.pause()
+ player.set_position(0)
playerAudio.set_position(0)
+ except:
+ return
if dub == True:
p = 0
while p < 3:
writemessage('Dubbing in ' + str(3 - p) + 's')
time.sleep(1)
p+=1
- player.play()
- if player_menu != 'film':
+ try:
+ player.play()
playerAudio.play()
+ except:
+ return
#run_command('aplay -D plughw:0 ' + filename + '.wav &')
if dub == True:
run_command(tarinafolder + '/alsa-utils-1.1.3/aplay/arecord -D plughw:'+str(plughw)+' -f '+soundformat+' -c '+str(channels)+' -r '+soundrate+' -vv /dev/shm/dub.wav &')
@@ -3191,18 +3077,18 @@ def playdub(filmname, filename, player_menu):
pass
starttime = time.time()
elif menu[selected] == 'PAUSE':
- player.pause()
try:
+ player.pause()
playerAudio.pause()
+ pause = True
except:
pass
- pause = True
elif menu[selected] == 'PLAY':
- player.play()
try:
+ player.play()
playerAudio.play()
except:
- pass
+ return
pause = False
elif menu[selected] == 'TRIM':
selected = 1
@@ -3504,17 +3390,16 @@ def startstream(camera, stream, plughw, channels):
#stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar 44100 -vcodec copy -acodec libmp3lame -b:a 128k -ar 44100 -map 0:0 -map 1:0 -strict experimental -f flv ' + youtube + key[0]
#
#stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar 44100 -vcodec copy -acodec libmp3lame -b:a 128k -ar 44100 -map 0:0 -map 1:0 -strict experimental -f mpegts tcp://0.0.0.0:3333\?listen'
-<<<<<<< HEAD
- stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar '+soundrate+' -acodec mp2 -b:a 128k -ar '+soundrate+' -vcodec copy -map 0:0 -map 1:0 -g 0 -f mpegts udp://10.42.0.169:5000'
+ #stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar '+soundrate+' -acodec mp2 -b:a 128k -ar '+soundrate+' -vcodec copy -map 0:0 -map 1:0 -g 0 -f mpegts udp://10.42.0.169:5000'
+ #stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar '+soundrate+' -acodec mp2 -b:a 128k -ar '+soundrate+' -vcodec copy -f mpegts udp://10.42.0.169:5000'
+ stream_cmd = 'ffmpeg -thread_queue_size 1024 -re -f h264 -r 25 -i - -f alsa -thread_queue_size 1024 -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar '+soundrate+' -acodec aac -b:a 128k -af arealtime -vcodec copy -strict experimental -r 25 -g 50 -f mpegts -content_type video/m2ts icecast://source:explorespacewaves@radiorymd.com:8000/chicken.ts'
+ #stream_cmd = 'ffmpeg -f h264 -r 25 -i - -fflags nobuffer -vcodec copy -f mpegts udp://10.42.0.169:5000'
+ #stream_cmd = 'ffmpeg -f h264 -r 25 -i - -fflags nobuffer -vcodec copy -f mpegts udp://10.42.0.169:5000'
+ #stream_audio = 'ffmpeg -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar '+soundrate+' -acodec mp2 -b:a 128k -ar '+soundrate+' -f mp2 udp://10.42.0.169:5001'
try:
stream = subprocess.Popen(stream_cmd, shell=True, stdin=subprocess.PIPE)
- camera.start_recording(stream.stdin, splitter_port=2, format='h264', bitrate = 55555)
-=======
- stream_cmd = 'ffmpeg -f h264 -r 25 -i - -itsoffset 5.5 -fflags nobuffer -f alsa -ac '+str(channels)+' -i hw:'+str(plughw)+' -ar '+soundrate+' -acodec mp2 -b:a 128k -ar '+soundrate+' -vcodec copy -map 0:0 -map 1:0 -g 0 -f mpegts udp://10.42.0.73:5004'
- try:
- stream = subprocess.Popen(stream_cmd, shell=True, stdin=subprocess.PIPE)
- camera.start_recording(stream.stdin, format='h264', bitrate = 555555)
->>>>>>> c7991decc2aa8d0da755b26d40b1cfcd0c63cfca
+ camera.start_recording(stream.stdin, splitter_port=2, format='h264', bitrate = 1000000)
+ #audio_stream=subprocess.Popen(stream_audio, shell=True)
except:
stream = ''
#now = time.strftime("%Y-%m-%d-%H:%M:%S")
@@ -3658,67 +3543,64 @@ def getbutton(lastbutton, buttonpressed, buttontime, holdbutton):
#Check controller
pressed = ''
nextstatus = ''
- try:
- if process.is_alive() == False and serverstate == 'on':
- nextstatus = que.get()
- if "*" in nextstatus:
- tarinactrl_ip = nextstatus.split('*')[1]
- nextstatus = nextstatus.split('*')[0]
- print('tarinactrl ip:' + tarinactrl_ip)
- process = Process(target=listenforclients, args=("0.0.0.0", port, que))
- process.start()
- if 'SELECTED' in nextstatus:
- try:
- selected=int(nextstatus.split(':')[1])
- except:
- print('wtf?')
- if nextstatus=="PICTURE":
- pressed="picture"
- elif nextstatus=="UP":
- pressed="up"
- elif nextstatus=="DOWN":
- pressed="down"
- elif nextstatus=="LEFT":
- pressed="left"
- elif nextstatus=="RIGHT":
- pressed="right"
- elif nextstatus=="VIEW":
- pressed="view"
- elif nextstatus=="MIDDLE":
- pressed="middle"
- elif nextstatus=="DELETE":
- pressed="remove"
- elif nextstatus=="REC":
+ if process.is_alive() == False and serverstate == 'on':
+ nextstatus = que.get()
+ if "*" in nextstatus:
+ tarinactrl_ip = nextstatus.split('*')[1]
+ nextstatus = nextstatus.split('*')[0]
+ print('tarinactrl ip:' + tarinactrl_ip)
+ process = Process(target=listenforclients, args=("0.0.0.0", port, que))
+ process.start()
+ if 'SELECTED' in nextstatus:
+ try:
+ selected=int(nextstatus.split(':')[1])
+ except:
+ print('wtf?')
+ if nextstatus=="PICTURE":
+ pressed="picture"
+ elif nextstatus=="UP":
+ pressed="up"
+ elif nextstatus=="DOWN":
+ pressed="down"
+ elif nextstatus=="LEFT":
+ pressed="left"
+ elif nextstatus=="RIGHT":
+ pressed="right"
+ elif nextstatus=="VIEW":
+ pressed="view"
+ elif nextstatus=="MIDDLE":
+ pressed="middle"
+ elif nextstatus=="DELETE":
+ pressed="remove"
+ elif nextstatus=="REC":
+ pressed="record"
+ elif nextstatus=="STOP":
+ if recording == True:
pressed="record"
- elif nextstatus=="STOP":
- if recording == True:
- pressed="record"
- elif nextstatus=="RECSOUND":
- if recording==False:
- pressed="record"
- onlysound=True
- elif nextstatus=="PLACEHOLDER":
- selected=2
- pressed="insert_shot"
- elif "SYNCIP:" in nextstatus:
- ip = nextstatus.split(':')[1]
- stopinterface(camera)
- run_command('rsync -avr --update --progress --exclude="*.wav" pi@'+ip+':'+filmfolder+filmname+'/'+'scene'+str(scene).zfill(3)+' '+filmfolder+filmname+'/')
- sendtoserver(tarinactrl_ip,port,'SYNCDONE')
- #run_command('scp -r '+filmfolder+filmname+'/'+'scene'+str(scene).zfill(3)+' pi@'+ip+':'+filmfolder+filmname+'/')
- startinterface()
- camera = startcamera(lens,fps)
- loadfilmsettings = True
- elif nextstatus=="NEWSCENE":
- scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take)
- scene=scenes+1
- shot=1
- take=1
- elif nextstatus=="RETAKE":
- pressed="retake"
- #print(nextstatus)
- except:
- print('process not found')
+ elif nextstatus=="RECSOUND":
+ if recording==False:
+ pressed="record"
+ onlysound=True
+ elif nextstatus=="PLACEHOLDER":
+ selected=2
+ pressed="insert_shot"
+ elif "SYNCIP:" in nextstatus:
+ ip = nextstatus.split(':')[1]
+ stopinterface(camera)
+ run_command('rsync -avr --update --progress --exclude="*.wav" pi@'+ip+':'+filmfolder+filmname+'/'+'scene'+str(scene).zfill(3)+' '+filmfolder+filmname+'/')
+ sendtoserver(tarinactrl_ip,port,'SYNCDONE')
+ #run_command('scp -r '+filmfolder+filmname+'/'+'scene'+str(scene).zfill(3)+' pi@'+ip+':'+filmfolder+filmname+'/')
+ startinterface()
+ camera = startcamera(lens,fps)
+ loadfilmsettings = True
+ elif nextstatus=="NEWSCENE":
+ scenes, shots, takes = browse(filmname,filmfolder,scene,shot,take)
+ scene=scenes+1
+ shot=1
+ take=1
+ elif nextstatus=="RETAKE":
+ pressed="retake"
+ #print(nextstatus)
with term.cbreak():
val = term.inkey(timeout=0)
if val.is_sequence:
@@ -3738,9 +3620,9 @@ def getbutton(lastbutton, buttonpressed, buttontime, holdbutton):
if readbus2 == 0:
readbus2 = 247
if readbus != 255:
- print('i2cbutton readbus pressed: ' + str(readbus))
+ print('i2cbutton pressed: ' + str(readbus))
if readbus2 != 247:
- print('i2cbutton readbus2 pressed: ' + str(readbus2))
+ print('i2cbutton pressed: ' + str(readbus2))
else:
readbus = 255
readbus2 = 247
@@ -3771,13 +3653,9 @@ def getbutton(lastbutton, buttonpressed, buttontime, holdbutton):
pressed = 'peak'
elif (readbus2 == 245 and readbus == 223):
pressed = 'screen'
- elif (readbus2 == 245 and readbus == 127):
+ elif (readbus2 == 245 and readbus == 247):
pressed = 'showmenu'
- elif (readbus2 == 245 and readbus == 251):
- pressed = 'showhelp'
- elif (readbus2 == 244):
- pressed = 'changemode'
- elif event == 'I' or event == 'P' or (readbus2 == 245 and readbus == 247):
+ elif event == 'I' or event == 'P' or (readbus2 == 244 and readbus == 255):
pressed = 'insert'
elif event == 'C' or (readbus2 == 245 and readbus == 254):
pressed = 'copy'
@@ -3818,13 +3696,9 @@ def stopinterface(camera):
return camera
def startcamera(lens, fps):
- global camera_model, fps_selection, fps_selected, cammode
+ global camera_model, fps_selection, fps_selected
camera = picamera.PiCamera()
- if cammode == 'film':
- reso=(1920,1080)
- elif cammode == 'picture':
- reso=(4056,3040)
- camera.resolution = reso #tested modes 1920x816, 1296x552/578, v2 1640x698, 1640x1232, hqbinned 2028x1080, full 4056x3040
+ camera.resolution = (1920, 1080) #tested modes 1920x816, 1296x552/578, v2 1640x698, 1640x1232, hqbinned 2028x1080
#Background image
underlay = None
bakgimg = tarinafolder + '/extras/bakg.jpg'