diff --git a/handle_imported_video.py b/handle_imported_video.py index 940323e..4c3d1c7 100644 --- a/handle_imported_video.py +++ b/handle_imported_video.py @@ -41,7 +41,7 @@ for o, a in opts: elif o in ("-d", "--device"): _DEV = True elif o in ("-p", "--part"): - _DAY_DIR = a + _DAY_DIRS = a.split(",") elif o in ("-f", "--flip"): _FLIP = True elif o in ("-r", "--source"): @@ -62,138 +62,144 @@ for o, a in opts: #_SOURCE_DIR = "/media/nas/nas-photo/imported/" -if ops == "win": - _FULL_PATH = _SOURCE_DIR + "\\" + _DEV + "\\" + _DAY_DIR + "\\" -else: - _FULL_PATH = _SOURCE_DIR + "/" + _DEV + "/" + _DAY_DIR + "/" + #print(_FULL_PATH) if _ACTION == "join": - video_seq = {} + for _DAY_DIR in _DAY_DIRS: + if ops == "win": + _FULL_PATH = _SOURCE_DIR + "\\" + _DEV + "\\" + _DAY_DIR + "\\" + else: + _FULL_PATH = _SOURCE_DIR + "/" + _DEV + "/" + _DAY_DIR + "/" + video_seq = {} - if os.path.exists(_FULL_PATH): - if os.path.exists(_FULL_PATH + "100GOPRO"): - _FULL_PATH = _FULL_PATH + "100GOPRO" - for filename in os.listdir(_FULL_PATH): - if filename.endswith(".MP4") and not filename.startswith("joined_"): - prefix = filename[0:2] - part = prefix + filename[2:4] - seq = filename[4:8] - if not seq in video_seq: - video_seq[seq] = [] - video_seq[seq].append(part + seq + ".MP4") - # print(filename) - # print(seq) - # print(part) - # print(json.dumps(video_seq,indent=2)) - _PROCESSED = _FULL_PATH + "processed" - if not os.path.exists(_PROCESSED): - os.mkdir(_PROCESSED) - # print(f"SEQUENCES : {_SEQUENCES}") - os.chdir(_FULL_PATH) - for vid in video_seq: - - if len(_SEQUENCES) != 0 and vid not in _SEQUENCES: - continue - export_name = "joined_" + vid + ".MP4" - parts = video_seq[vid] - - parts.sort() - # print(parts) - if len(parts) == 1: - shutil.move(parts[0], export_name) - continue - # print(type(parts)) - #ffmpeg -i concat:"input1.mp4|input2.mp4" output.mp4 - - - f = open("video.txt", "w") - f.write("# Files to join\n") - f.close() - f = open("video.txt", "a") - final_size = 0 - for p in parts: - f.write(f"file '{p}'\n") - file_stats = os.stat(p) - final_size += file_stats.st_size - f.close() - #print(final_size) - #print(_FULL_PATH) - - if _TEST: - input(" ???? ") - - # print(os.getcwd()) - #status, output = subprocess.getstatusoutput(myCmd) - - if _FLIP: - if ops == "win": - myCmd = [ - "ffmpeg", "-display_rotation", "180", "-f", "concat", "-i", "video.txt ","-vcodec", "copy", "-acodec", "copy", export_name - ] - else: - myCmd = [ - "/opt/ffmpeg/ffmpeg", "-display_rotation", "180", "-f", "concat", "-i", "video.txt ","-vcodec", "copy", "-acodec", "copy", export_name - ] - else: - if ops == "win": - myCmd = [ - "ffmpeg", "-f", "concat", "-i", "video.txt ","-vcodec", "copy", "-acodec", "copy", export_name - ] - else: - myCmd = [ - "/opt/ffmpeg/ffmpeg", "-f", "concat", "-i", "video.txt ","-vcodec", "copy", "-acodec", "copy", export_name - ] - - #print(myCmd) - print(f"Joining {len(parts)} files...") - proc = subprocess.Popen(myCmd,stdout=subprocess.DEVNULL,stderr=subprocess.STDOUT) - # with tqdm(total=100, position=1, desc="Convert") as pbar: - # for progress in ff.run_command_with_progress(): - # pbar.update(progress - pbar.n) - with tqdm(total=100, position=1, desc="Join") as pbar: - position=0 - while proc.returncode is None: - - #pbar.update() - try: - file_stats = os.stat(export_name) - cur_size = file_stats.st_size - final_size - cur_stat = (cur_size / final_size) * 100 - - pbar.update(int(cur_stat) - position) - position = int(cur_stat) - proc.call() - except: - pass - - time.sleep(3) - pbar.update(1) - # get the output - status = 0 - if status == 0: - print("Moving...") + if os.path.exists(_FULL_PATH): + if os.path.exists(_FULL_PATH + "100GOPRO"): + _FULL_PATH = _FULL_PATH + "100GOPRO" + for filename in os.listdir(_FULL_PATH): + if filename.endswith(".MP4") and not filename.startswith("joined_"): + prefix = filename[0:2] + part = prefix + filename[2:4] + seq = filename[4:8] + if not seq in video_seq: + video_seq[seq] = [] + video_seq[seq].append(part + seq + ".MP4") + # print(filename) + # print(seq) + # print(part) + # print(json.dumps(video_seq,indent=2)) + _PROCESSED = _FULL_PATH + "processed" + if not os.path.exists(_PROCESSED): + os.mkdir(_PROCESSED) + # print(f"SEQUENCES : {_SEQUENCES}") + os.chdir(_FULL_PATH) + for vid in video_seq: + + if len(_SEQUENCES) != 0 and vid not in _SEQUENCES: + continue + export_name = "joined_" + vid + ".MP4" + parts = video_seq[vid] + + parts.sort() + # print(parts) + if len(parts) == 1: + shutil.move(parts[0], export_name) + continue + # print(type(parts)) + #ffmpeg -i concat:"input1.mp4|input2.mp4" output.mp4 + + + f = open("video.txt", "w") + f.write("# Files to join\n") + f.close() + f = open("video.txt", "a") + final_size = 0 for p in parts: - try: - shutil.move(p, _PROCESSED) - except: - print(f"Failed to move {p}") - try: - shutil.move(p.replace("MP4", "THM"), _PROCESSED) - except: - print(f"Failed to move {p.replace("MP4", "THM")}") + f.write(f"file '{p}'\n") + file_stats = os.stat(p) + final_size += file_stats.st_size + f.close() + #print(final_size) + #print(_FULL_PATH) + + if _TEST: + input(" ???? ") + + # print(os.getcwd()) + #status, output = subprocess.getstatusoutput(myCmd) + + if _FLIP: + if ops == "win": + myCmd = [ + "ffmpeg", "-display_rotation", "180", "-f", "concat", "-i", "video.txt ","-vcodec", "copy", "-acodec", "copy", export_name + ] + else: + myCmd = [ + "/opt/ffmpeg/ffmpeg", "-display_rotation", "180", "-f", "concat", "-i", "video.txt ","-vcodec", "copy", "-acodec", "copy", export_name + ] + else: + if ops == "win": + myCmd = [ + "ffmpeg", "-f", "concat", "-i", "video.txt ","-vcodec", "copy", "-acodec", "copy", export_name + ] + else: + myCmd = [ + "/opt/ffmpeg/ffmpeg", "-f", "concat", "-i", "video.txt ","-vcodec", "copy", "-acodec", "copy", export_name + ] + + #print(myCmd) + print(f"Joining {len(parts)} files...") + proc = subprocess.Popen(myCmd,stdout=subprocess.DEVNULL,stderr=subprocess.STDOUT) + # with tqdm(total=100, position=1, desc="Convert") as pbar: + # for progress in ff.run_command_with_progress(): + # pbar.update(progress - pbar.n) + with tqdm(total=100, position=1, desc="Join") as pbar: + position=0 + while proc.returncode is None: - try: - shutil.move(p.replace("MP4", "LRV").replace("GH","GL"), _PROCESSED) - except: - print(f"Failed to move {p.replace("MP4", "LRV")}") - os.remove("video.txt") + #pbar.update() + try: + file_stats = os.stat(export_name) + cur_size = file_stats.st_size + final_size + cur_stat = (cur_size / final_size) * 100 + + pbar.update(int(cur_stat) - position) + position = int(cur_stat) + proc.call() + except: + pass + + time.sleep(3) + pbar.update(1) + # get the output + status = 0 + if status == 0: + print("Moving...") + for p in parts: + try: + shutil.move(p, _PROCESSED) + except: + print(f"Failed to move {p}") + try: + shutil.move(p.replace("MP4", "THM"), _PROCESSED) + except: + print(f"Failed to move {p.replace("MP4", "THM")}") + + try: + shutil.move(p.replace("MP4", "LRV").replace("GH","GL"), _PROCESSED) + except: + print(f"Failed to move {p.replace("MP4", "LRV")}") + os.remove("video.txt") if _ACTION == "encode": + if ops == "win": + _FULL_PATH = _SOURCE_DIR + "\\" + _DEV + "\\" + _DAY_DIR + "\\" + else: + _FULL_PATH = _SOURCE_DIR + "/" + _DEV + "/" + _DAY_DIR + "/" if os.path.exists(_FULL_PATH): if os.path.exists(_FULL_PATH + "100GOPRO"): _FULL_PATH = _FULL_PATH + "100GOPRO"