gonzopi

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

commit cef77cad8a1c3469294f937959f9de581414254e
parent cf6a1d3435d4161aee74a3847ba9ad31f523ca8d
Author: rbckman <rob@tarina.org>
Date:   Wed, 21 May 2025 17:20:06 +0100

bug fixes like reset audio device on restart try saved audio device if not reset to default, oh button layout change and split video function

Diffstat:
Mextras/bakg.jpg | 0
Mgonzopi.py | 145++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------
2 files changed, 104 insertions(+), 41 deletions(-)

diff --git a/extras/bakg.jpg b/extras/bakg.jpg Binary files differ. diff --git a/gonzopi.py b/gonzopi.py @@ -476,7 +476,7 @@ def main(): renderfilename = renderfilm(filmfolder, filmname, comp, scene) #writemessage('Render done!') if renderfilename != '': - remove_shots = playdub(filmname,renderfilename, 'film') + remove_shots = playdub(filmname,renderfilename, 'film',take) #fastedit (maybe deploy sometime) #if remove_shots != []: # for i in remove_shots: @@ -503,7 +503,7 @@ def main(): #removeimage(camera, overlay) renderfilename = renderfilm(filmfolder, filmname, comp, 0) if renderfilename != '': - remove_shots = playdub(filmname,renderfilename, 'film') + remove_shots = playdub(filmname,renderfilename, 'film',take) #overlay = displayimage(camera, imagename, overlay, 3) camera.start_preview() else: @@ -526,28 +526,32 @@ def main(): #compileshot(foldername + filename,filmfolder,filmname) renderfilename, newaudiomix = rendershot(filmfolder, filmname, foldername+filename, scene, shot) if renderfilename == foldername+filename: - trim = playdub(filmname,foldername + filename, 'shot') - if trim[0] == 'beginning' or trim[0] == 'end': - writemessage('Cutting clip...') - videotrimsave(foldername, trim[0], trim[1], filename) - elif trim[0] >= trim[1]: - trim = [trim[0],0] - elif trim[0] != 0 and trim[1] != 0: - writemessage('Cutting clip...') - videotrimsave(foldername, 'end', trim[1], filename) - videotrimsave(foldername, 'beginning', trim[0], filename) - elif trim[0] == 0 and trim[1] != 0: - writemessage('Cutting clip...') - videotrimsave(foldername, 'end', trim[1], filename) - if trim[0] != 0 and trim[1] == 0: - writemessage('Cutting clip...') - videotrimsave(foldername, 'beginning', trim[0], filename) + trim, split_list = playdub(filmname,foldername + filename, 'shot',take) + if split_list: + split_list_save(foldername, split_list) + writemessage('Splits saved! press view to see them.') + else: + if trim[0] == 'beginning' or trim[0] == 'end': + writemessage('Cutting clip...') + videotrimsave(foldername, trim[0], trim[1], filename) + elif trim[0] >= trim[1]: + trim = [trim[0],0] + elif trim[0] != 0 and trim[1] != 0: + writemessage('Cutting clip...') + videotrimsave(foldername, 'end', trim[1], filename) + videotrimsave(foldername, 'beginning', trim[0], filename) + elif trim[0] == 0 and trim[1] != 0: + writemessage('Cutting clip...') + videotrimsave(foldername, 'end', trim[1], filename) + if trim[0] != 0 and trim[1] == 0: + writemessage('Cutting clip...') + videotrimsave(foldername, 'beginning', trim[0], filename) imagename = foldername + filename + '.jpeg' overlay = displayimage(camera, imagename, overlay, 3) camera.start_preview() else: vumetermessage('nothing here! hit rec!') - playdub(filmname, renderfilename, 'shot') + playdub(filmname, renderfilename, 'shot',take) take = counttakes(filmname, filmfolder, scene, shot) rendermenu = True updatethumb=True @@ -606,7 +610,7 @@ def main(): os.system('cp '+saveoriginal+' '+dubfolder+'original.wav') time.sleep(0.2) renderfilename, newaudiomix = rendershot(filmfolder, filmname, foldername+filename, scene, shot) - playdub(filmname,renderfilename, 'dub') + playdub(filmname,renderfilename, 'dub',take) #run_command('sox -V0 -G /dev/shm/dub.wav -c 2 ' + newdub) #add audio/video start delay sync run_command('sox -V0 -G /dev/shm/dub.wav -c 2 /dev/shm/temp.wav trim 0.013') @@ -626,7 +630,7 @@ def main(): if newdub: camera.stop_preview() renderfilename, newaudiomix = renderscene(filmfolder, filmname, scene) - playdub(filmname,renderfilename, 'dub') + playdub(filmname,renderfilename, 'dub',take) #run_command('sox -V0 -G /dev/shm/dub.wav -c 2 ' + newdub) #add audio/video start delay sync dubfolder = filmfolder + filmname + '/scene' + str(scene).zfill(3) + '/dub/' @@ -648,7 +652,7 @@ def main(): if newdub: camera.stop_preview() renderfilename = renderfilm(filmfolder, filmname, comp, 0) - playdub(filmname,renderfilename, 'dub') + playdub(filmname,renderfilename, 'dub',take) run_command('sox -V0 -G /dev/shm/dub.wav -c 2 ' + newdub+' trim 0.013') vumetermessage('new film dubbing made!') camera.start_preview() @@ -2101,6 +2105,11 @@ def main(): camera.hflip = True run_command('amixer -c 0 sset Mic ' + str(miclevel) + '% unmute') run_command('amixer -c 0 sset Speaker ' + str(headphoneslevel) + '%') + #check if audiocard there other default to 0 + if int(plughw) > len(getaudiocards()): + plughw = 0 + channels = 1 + vumetermessage(getaudiocards()[plughw]) print(filmfolder) print(filmname) origin_videos=organize(filmfolder, filmname) @@ -3870,6 +3879,7 @@ def timelapse(beeps,camera,filmname,foldername,filename,between,duration,backlig #------------Remove----------------------- def remove(filmfolder, filmname, scene, shot, take, sceneshotortake): + flushbutton() foldername = filmfolder + filmname + '/' + 'scene' + str(scene).zfill(3) + '/shot' + str(shot).zfill(3) + '/' filename = 'take' + str(take).zfill(3) pressed = '' @@ -3888,6 +3898,7 @@ def remove(filmfolder, filmname, scene, shot, take, sceneshotortake): otf_take = counttakes(filmname+'_onthefloor', filmfolder, otf_scene, otf_shot) otf_take += 1 oldmenu='' + starttime=time.time() while True: oldmenu=writemenu(menu,settings,selected,header,showmenu,oldmenu) pressed, buttonpressed, buttontime, holdbutton, event, keydelay = getbutton(pressed, buttonpressed, buttontime, holdbutton) @@ -3897,6 +3908,8 @@ def remove(filmfolder, filmname, scene, shot, take, sceneshotortake): elif pressed == 'left': if selected > 0: selected = selected - 1 + elif pressed == 'remove' and time.time()-starttime > 1: + return elif pressed == 'middle': if selected == 1: if '_onthefloor' in filmname: @@ -4628,7 +4641,26 @@ def rendershot(filmfolder, filmname, renderfilename, scene, shot): #EDITS AND FX trimfile = '' - if os.path.isfile(scenedir+'.beginning') == True and os.path.isfile(scenedir+'.end') == True: + if os.path.isfile(scenedir+'.split') == True: + settings = pickle.load(open(scenedir + ".split", "rb")) + split_list = settings + logger.info("settings loaded") + for i in split_list: + newshotdir = filmfolder + filmname + '/scene' + str(scene).zfill(3) + '/shot' + str(shot).zfill(3) + '_insert/' + newtakename = 'take' + str(1).zfill(3) + try: + os.makedirs(newshotdir) + except: + print('is there already prob') + videotrim(scenedir,i[1],'both', i[0][0],i[0][1],newshotdir+newtakename) + add_organize(filmfolder, filmname) + scenes, shots, takes = browse(filmname,filmfolder,scene,shot,1) + #vumetermessage('Shot ' + str(shot) + ' inserted') + updatethumb = True + time.sleep(1) + shot=shot+1 + os.remove(scenedir+'.split') + elif os.path.isfile(scenedir+'.beginning') == True and os.path.isfile(scenedir+'.end') == True: settings = pickle.load(open(scenedir + ".beginning", "rb")) s, trimfile = settings logger.info("settings loaded") @@ -4637,7 +4669,7 @@ def rendershot(filmfolder, filmname, renderfilename, scene, shot): settings = pickle.load(open(scenedir + ".end", "rb")) t, trimfile = settings logger.info("settings loaded") - videotrim(scenedir,trimfile,'both', s,t) + videotrim(scenedir,trimfile,'both', s,t,'take') os.remove(scenedir+'.beginning') os.remove(scenedir+'.end') take=counttakes2(scenedir) @@ -4649,7 +4681,7 @@ def rendershot(filmfolder, filmname, renderfilename, scene, shot): settings = pickle.load(open(scenedir + ".beginning", "rb")) s, trimfile = settings logger.info("settings loaded") - videotrim(scenedir,trimfile,'beginning', s, 0) + videotrim(scenedir,trimfile,'beginning', s, 0,'take') os.remove(scenedir+'.beginning') newaudiomix = True take=counttakes2(scenedir) @@ -4665,7 +4697,7 @@ def rendershot(filmfolder, filmname, renderfilename, scene, shot): p, trimfileoriginal = settings s=p-s logger.info("settings loaded") - videotrim(scenedir,trimfile,'end', s, 0) + videotrim(scenedir,trimfile,'end', s, 0,'take') os.remove(scenedir+'.end') take=counttakes2(scenedir) updatethumb=True @@ -5381,7 +5413,7 @@ def clipsettings(filmfolder, filmname, scene, shot, take, plughw, yanked): else: filename = filmfolder + filmname + '/' + filmname renderfilename = renderfilm(filmfolder, filmname, 0, scene) - playdub(filmname,renderfilename, 'scene') + playdub(filmname,renderfilename, 'scene',take) time.sleep(0.05) #Save dubmix before returning if dubmix != dubmix_old: @@ -5399,8 +5431,9 @@ def clipsettings(filmfolder, filmname, scene, shot, take, plughw, yanked): #---------------Play & DUB-------------------- -def playdub(filmname, filename, player_menu): +def playdub(filmname, filename, player_menu, take): global headphoneslevel, miclevel, plughw, channels, filmfolder, scene, soundrate, soundformat, showhelp, camera, overlay, overlay2, gonzopifolder, i2cbuttons + takename = 'take' + str(take).zfill(3) if i2cbuttons == False: hdmi_mode=True else: @@ -5445,6 +5478,7 @@ def playdub(filmname, filename, player_menu): trimfromstart=0 trimfromend=0 remove_shots = [] + split_list=[] oldmenu='' if video == True: if player_menu == 'dubbb': @@ -5552,6 +5586,7 @@ def playdub(filmname, filename, player_menu): vumetermessage('video cuts removed!') trimfromstart=0 trimfromend=0 + split_list=[] #SHOWHELP elif pressed == 'showhelp': vumetermessage('Button layout') @@ -5648,6 +5683,16 @@ def playdub(filmname, filename, player_menu): player.play() if sound == False: playerAudio.play() + elif pressed == 'record': + split_list.append([[trimfromstart, trimfromend], takename]) + vumetermessage('split '+str(len(split_list))+' position set to: '+ str(player.position())) + player.pause() + if sound == False: + playerAudio.pause() + time.sleep(0.5) + player.play() + if sound == False: + playerAudio.play() elif pressed == 'retake': if player.position() < clipduration: trimfromend = player.position() @@ -5659,7 +5704,7 @@ def playdub(filmname, filename, player_menu): player.play() if sound == False: playerAudio.play() - elif pressed == 'middle' or pressed == 'record': + elif pressed == 'middle': time.sleep(0.2) if menu[selected] == 'BACK' or player.playback_status() == "Stopped" or pressed == 'record': try: @@ -5678,7 +5723,7 @@ def playdub(filmname, filename, player_menu): time.sleep(0.2) os.system('pkill -9 omxplayer') #os.system('pkill -9 dbus-daemon') - return [trimfromstart, trimfromend] + return [trimfromstart, trimfromend], split_list elif menu[selected] == 'REPLAY' or menu[selected] == 'REDUB': pause = False try: @@ -5761,7 +5806,7 @@ def playdub(filmname, filename, player_menu): player.quit() if sound == False: playerAudio.quit() - return [trimfromstart, trimfromend] + return [trimfromstart, trimfromend], split_list #return remove_shots if t > (clipduration - 0.3): os.system('pkill aplay') @@ -5770,14 +5815,14 @@ def playdub(filmname, filename, player_menu): player.quit() if sound == False: playerAudio.quit() - return [trimfromstart, trimfromend] + return [trimfromstart, trimfromend], split_list try: player.quit() if sound == False: playerAudio.quit() except: pass - return [trimfromstart, trimfromend] + return [trimfromstart, trimfromend], split_list #playerAudio.quit() #os.system('pkill dbus-daemon') @@ -5823,11 +5868,29 @@ def videotrimsave(filmfolder, where, s, trimfile): #logger.warning(e) return +#--------------Save split settings----------------- + +def split_list_save(foldername, splitlist): + #db.insert('videos', tid=datetime.datetime.now()) + settings=splitlist + try: + with open(foldername + ".split", "wb") as f: + pickle.dump(settings, f) + logger.info("split settings saved") + except: + logger.warning("could not save settings") + #logger.warning(e) + return + + #---------------Video Trim-------------------- -def videotrim(foldername ,filename, where, s, t): +def videotrim(foldername ,filename, where, s, t, make_new_take_or_shot): #theres two different ways of non-rerendering mp4 cut techniques that i know MP4Box and ffmpeg - trim_filename = foldername+filename[:-3] + str(counttakes2(foldername)+1).zfill(3) + if make_new_take_or_shot == 'take': + trim_filename = foldername+filename[:-3] + str(counttakes2(foldername)+1).zfill(3) + else: + trim_filename = make_new_take_or_shot filename=foldername+filename if where == 'both': s=round(s, 3) @@ -6542,15 +6605,15 @@ def getbutton(lastbutton, buttonpressed, buttontime, holdbutton): pressed = 'record' elif event == 'KEY_PGDOWN' or (readbus == 253 and readbus2 == 247): pressed = 'retake' - elif event == 'KEY_TAB' or readbus2 == 246: + elif event == 'KEY_TAB' or (readbus == 223 and readbus2 == 247): pressed = 'view' - elif event == 'KEY_DELETE' or (readbus == 223 and readbus2 == 247): + elif event == 'KEY_DELETE' or readbus2 == 246: pressed = 'remove' elif event == 'KEY_BACKSPACE': pressed = 'remove' - elif event == 'N' or (readbus2 == 245 and readbus == 191): + elif event == 'N' or (readbus2 == 245 and readbus == 254): pressed = 'peak' - elif event == 'S' or (readbus2 == 245 and readbus == 223): + elif event == 'S' or (readbus2 == 244): pressed = 'screen' elif event == 'A' or (readbus2 == 245 and readbus == 127): pressed = 'showmenu' @@ -6560,9 +6623,9 @@ def getbutton(lastbutton, buttonpressed, buttontime, holdbutton): pressed = 'showhelp' elif event == 'P' or (readbus2 == 245 and readbus == 253): pressed = 'insert' - elif event == 'C' or (readbus2 == 244): + elif event == 'C' or (readbus2 == 245 and readbus == 223): pressed = 'copy' - elif event == 'M' or (readbus2 == 245 and readbus == 254): + elif event == 'M' or (readbus2 == 245 and readbus == 191): pressed = 'move' elif event == '|' or (readbus2 == 245 and readbus == 251): pressed = 'split'