Saya membuat video timelapse dengan membagi video menjadi gambar individual, menggunakan G'MIC melalui baris perintah untuk rata-rata setiap 7 frame, lalu menampilkan hasilnya ke gambar baru yang akan menghasilkan frame untuk timelapse (dengan cara ini saya mendapatkan video bebas noise yang tampak hebat). Seperti yang dapat Anda bayangkan, saya memiliki banyak bingkai – beberapa ribu gambar individu dalam direktori, dinamai secara berurutan (image1.tiff, image2.tiff, dll. ). Saya menemukan skrip yang berfungsi sempurna untuk memindahkan file – sekali…
k=1; find source/ -type f | while read file; do
[[ k++ -le 7 ]] && mv "$file" target/
done
Yang saya butuhkan sekarang adalah membuat skrip ini
- ulangi sampai semua file dipindahkan dan
- membuat direktori target bernomor urut (1, 2, 3, dll.) sehingga saya mendapatkan beberapa ratus direktori masing-masing dengan 7 gambar di dalamnya.
Untuk memperjelas, direktori 1 harus berisi gambar 1-7, direktori 2 harus berisi gambar 8-14, dll.
Bantuan apa pun sangat dihargai, saya cukup terjebak dengan yang ini.
Jawaban yang Diterima:
Skrip (python) di bawah ini membuat sub folder dan mengatur file Anda ke dalam folder:
Selain itu:
- Skrip menghitung jumlah folder dan menambahkan nol di depan nama folder untuk penyortiran yang tepat (karena Anda menyebutkan ribuan file, artinya ratusan folder)
- Jumlah file per folder dapat bervariasi, tergantung pada pengaturan Anda di kepala skrip
Script mengasumsikan:
- Semua file memiliki ekstensi, semua file memiliki sama ekstensi
- File Anda diberi nama
image1.tiff
,image2.tiff
dll (tidak ada nol di depan).
Skrip
#!/usr/bin/env python3
import os
import math
import shutil
#---
directory = "/path/to/files" # path to your files
n_perfolder = 7 # number of files per sub folder
#--
# creating file list, extension
f_list = os.listdir(directory); ext = f_list[0].split(".")[-1]
# calculate number of folders
n_folders = math.ceil(len(f_list)/n_perfolder)
# creating folder names, including leading zeros
folders = [str(fn+1) for fn in range(n_folders)]
fl_names = [(len(max(folders, key=len))-len(fl))*"0"+fl for fl in folders]
# creating folders and allocate files
for i in range(len(fl_names)):
mkfolder = directory+"/"+fl_names[i]
if not os.path.exists(mkfolder):
os.makedirs(mkfolder)
r = range(i*n_perfolder+1, i*n_perfolder+n_perfolder+1)
for n in r:
try:
file = directory+"/"+"image"+str(n)+"."+ext
target = mkfolder+"/"+"image"+str(n)+"."+ext
shutil.copyfile(file, target)
except FileNotFoundError:
pass
Cara menggunakan
Salin skrip ke file kosong, di bagian kepala, atur direktori ke file Anda dan jumlah file per sub direktori, simpan sebagai organize.py
.
Jalankan dengan perintah:
python3 /path/to/organize.py
Catatan
Jika Anda ingin bergerak file alih-alih menyalin, ganti baris:
shutil.copyfile(file, target)
oleh:
shutil.move(file, target)
(ingat indentnya!)
Terkait:Bagaimana cara mengatur warna/pola latar belakang di jendela Nautilus?