Group sequentially then randomize group placement for TS video segments.
import os,time ,random, shutil loop_times = 10 mySortArr = [] path = r"D:\\XXX\\ts_files" for file in os.listdir(path): if file.endswith('.ts'): mySortArr.append(file) maxFileNum = 4 deffind_all_index(arr, item): return [i for i, a inenumerate(arr) if a == item] randomListMax = len(mySortArr)*100 defsortA(filelist): tempGroupList = [] groupList = [] tempGroupAppendIndex=0 while tempGroupAppendIndex < randomListMax+1: groupList.append(0) tempGroupAppendIndex += 1 i = 0 countNum = 0 for files in filelist: i += 1 countNum +=1 tempGroupList.append(files) randomIndex = random.randint(0,randomListMax) while groupList[randomIndex] != 0: randomIndex = random.randint(0,randomListMax) if countNum >= maxFileNum: countNum = 0 rIndex = 0 for tempItem in tempGroupList: rIndex+=1 groupList[randomIndex+rIndex] = tempItem for tempItem inreversed(tempGroupList): groupList[randomIndex+rIndex+len(tempGroupList)] = tempItem rIndex+=1 tempGroupList = [] listRes = [g for g in groupList if g != 0] return listRes mySortArr = sortA(mySortArr) for i inrange(1, loop_times + 1): withopen(f"{i}.txt", 'w', encoding='utf-8') as f: for content in mySortArr: f.write(f"file '{content}'\n") os.system('copy /B ?*.txt output.txt') os.system('ffmpeg -f concat -safe 0 -i output.txt -c copy merged.mp4') for i inrange(1, loop_times + 1): os.remove(f"{i}.txt") os.remove('output.txt') for filename in os.listdir('.'): if filename.endswith('.ts'): os.remove(filename) for foldername in os.listdir('.'): if foldername.startswith('images_'): shutil.rmtree(foldername)