{py:load {video} import os, subprocess, json, random, time, re in_path = os.getenv('FILE_1') if not in_path: print('no input file passed in') raise SystemExit(1) def detect_ext(p): base = os.path.basename(p) _, ext = os.path.splitext(base) if ext: return ext.lower() try: fmt = subprocess.check_output( ['ffprobe','-v','error','-show_entries','format=format_name','-of','default=noprint_wrappers=1:nokey=1', p] ).decode().strip() if 'mp4' in fmt: return '.mp4' if 'mov' in fmt: return '.mov' if 'matroska' in fmt or 'webm' in fmt or 'mkv' in fmt: return '.mkv' if 'avi' in fmt: return '.avi' except Exception: pass return '.mp4' num = int(time.time()*1000) ^ random.randint(0, 1_000_000) ext = detect_ext(in_path) or '.mp4' out_path = f'/home/notsocoder/output/concat_{num}{ext}' def ffprobe_duration(p): cmd = ['ffprobe','-v','error','-show_entries','format=duration','-of','default=noprint_wrappers=1:nokey=1',p] try: dur = float(subprocess.check_output(cmd).decode().strip() or 0.0) except Exception: dur = 0.0 return max(0.0, dur) dur = ffprobe_duration(in_path) if dur == 0: print('no duration found') raise SystemExit(0) seg_dir = '/home/notsocoder/input/segs' rev_dir = '/home/notsocoder/input/rev' os.makedirs(seg_dir, exist_ok=True) os.makedirs(rev_dir, exist_ok=True) subprocess.check_call([ 'ffmpeg','-y','-loglevel','error','-i', in_path, '-f','segment','-segment_time','1', '-reset_timestamps','1', os.path.join(seg_dir, f'f_%04d{ext}')]) forward = sorted([f for f in os.listdir(seg_dir) if f.startswith('f_') and f.endswith(ext)]) reverse = [] for f in forward: fin = os.path.join(seg_dir, f) fout = os.path.join(rev_dir, f.replace('f_','r_')) subprocess.check_call([ 'ffmpeg','-loglevel','error','-y','-i', fin, '-vf','reverse','-af','areverse', fout ]) reverse.append(fout) pairs = [] for i, f in enumerate(forward): fpath = os.path.join(seg_dir, f) rpath = reverse[i] if i < len(reverse) else None pairs.append(fpath) if rpath: pairs.append(rpath) list_path = f'/home/notsocoder/input/list_{num}.txt' with open(list_path,'w') as fw: for p in pairs: fw.write(f"file '{p}'\n") subprocess.check_call([ 'ffmpeg','-y','-loglevel','error','-f','concat','-safe','0','-i', list_path, out_path]) print('created:', out_path)}