次のファイル構造があります。
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