連続番号付きの10個のファイルをコピー

連続番号付きの10個のファイルをコピー

次のファイル構造があります。

Project
 |    
 +-- video_1
 |  |  
 |  +-- video_1_cropped
 |      |
 |      +--frame_00000.jpg
 |      +--frame_00001.jpg
 |      +...
 |      +—-frame_00359.jpg
 |    
 +-- video_2
 |  |  
 |  +-- video_2_cropped
 |      |
 |      +--frame_00000.jpg
 |      +--frame_00004.jpg
 |      +--frame_00005.jpg
 |      +…
 |      +—frame_00207.jpg
 |    

これらのフレームは以前に処理されており、すべてのフレームを処理できるわけではないため、すべて連続して番号付けされるわけではありません。このすべてのディレクトリを繰り返して、10個のフレームに連続して番号が付けられていることを確認し、それを別のディレクトリにコピーしてそこにも新しいディレクトリを作成することが可能かどうか疑問に思います。新しいディレクトリは次のとおりです。

Videos
 |
 +-- video_00001
 |  |  
 |  +--frame_00000.jpg
 |  +--frame_00001.jpg
 |  +...
 |  +--frame_00009.jpg
 |
 +-- video_00002
 |  |  
 |  +--frame_00013.jpg
 |  +--frame_00014.jpg
 |  +...
 |  +--frame_00022.jpg
 ...

いくつかの追加の注意事項、

(1)同じビデオから複数の10フレームシーケンスをコピーできるようにしたい(該当するシーケンスが複数ある場合)。

(2)画像に10フレームシーケンスがない場合はスキップできます。

(3)シーケンスが10フレームより長い場合は、まだ10フレームシーケンスに分割したいと思います。したがって、フレーム番号が10-59の場合は、各ディレクトリに10個のフレームを持つ5つの新しいディレクトリを作成します(フレーム10-19、20-29など)。

(4)ソースビデオは互いに関連してはいけません。これは、10フレームシーケンスを新しいディレクトリにコピーしても、同じサブディレクトリにないためです。したがって、異なるビデオから同じシーケンス(例:20-29)を複数回コピーできる必要があります。

ベストアンサー1

私はこのためにPythonスクリプトを書くことにしました。興味のある人がいる場合は、コードを書いてください。

def process_pictures():
    video_directory = '/path/to/videos/'
    new_directory = '/path/to/sequences'
    new = 1

    for subdir, dirs, files in os.walk(video_directory):
        if subdir[-7:] == 'cropped':
            curr = -1
            count = []
            for file in sorted(files):
                # get number
                number = int(file[-9:-4])
                # if the next file is consecutive
                if number == curr + 1:
                    # increment current and add file to list
                    curr += 1
                    count.append(file)
                    # if we found 10 files
                    if len(count) == 10:
                        # zero pad new folder to be made
                        video_num = f'{new:05d}'
                        new += 1
                        dir_name = new_directory + '/video_' + video_num
                        # try to make new directory
                        try:
                            # Create target Directory
                            os.mkdir(dir_name)
                            print("Directory " , dir_name ,  " Created ") 
                        except FileExistsError:
                            print("Directory " , dir_name ,  " already exists")
                        # loop through files and copy them to new directory
                        for f in count:
                            shutil.copy(os.path.join(subdir, f), dir_name)
                        
                        # create new empty list
                        count = []
                # if number is not consecutive, we reset the list and the current number
                else:
                    count = [file]
                    curr = number

おすすめ記事