tarina

git clone https://git.tarina.org/tarina
Log | Files | Refs | README | LICENSE

commit 4e1a5c09ca3b23b05597bd520092ea9bd637c033
parent c3413c5e508fa50b4a9cdad4ce54602ff5841413
Author: rbckman <rob@tarina.org>
Date:   Sat, 19 Aug 2023 15:20:13 +0100

make ln!

Diffstat:
Mtarina.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'