写真フォルダがめちゃくちゃです。 EXIF情報の日付に従って並べ替え、日付に従って名前を変更したい(001.jpg、002.jpgなど)。
Linuxでこれを行うにはどうすればよいですか?以前にいくつかの基本的な一括処理タスク(変換やサイズ変更など)にImageMagickを使用しましたが、このタスクに使用することはできますか?
Linuxでは、コマンド exiftool を使用できます。何らかの理由で、オンラインマニュアルには、私に本質的なヒントを与えた「例の更新」セクションが含まれていません。
JPGのみのファイルの場合、次のコマンド呼び出しがその役割を果たします。
exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>
説明:
-r
は再帰用です'-FileName<CreateDate'
exiftoolにEXIFタグCreateDate
に応じてファイルの名前を変更するように指示します(ただし、ModifyDate
のような他のものを試すこともできます)-d '%Y-%m-%d/%H_%M_%S%%-c.%%le'
は、日付ソース "CreateDate
"( "%-c
"は、ファイルの衝突の場合にカウンターを追加します。" %le
"は"小文字のファイル拡張子 ")を表します-FileName<...
"ここでは、ファイルの名前を変更し、1つのステップで別のフォルダに移動します。マニュアルでは、「-Directory<...
"フォルダ操作の構文。ただし、このように機能しました。この強力なツールのマニュアルを読むのに少し時間をかける必要があります。たぶんもっと短い方法があります:D
この無料の製品をお試しください: AmoK Exif Sorter 。
最も簡単な方法は、ファイルをjbroutにインポートすることです...次に(オプションで)すべてのファイルの名前を時間指向の名前に変更できます。または、名前を変更する必要がまったくないことに気付くかもしれません(そしてjbroutで十分です)。
Debian Lennyで動作させるには、次のことを試してください。
import pyexiv2, sys, os, time, datetime, random
dirname = sys.argv[1]
flist=os.listdir(dirname)
dic = dict()
for fname in flist:
image = pyexiv2.Image(sys.argv[1]+'/'+fname)
#metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
#metadata.read()
image.readMetadata()
tag = image['Exif.Image.DateTime']
timestamp = int(time.mktime(tag.timetuple()))
#print fname, ' ', tag.value, ' ', timestamp
try:
dic[timestamp] = fname
except:
print fname, ' not processed.'
keys = dic.keys()
keys.sort()
i = 0
for k in keys:
os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
i+=1
私は小さくてあまり最適化されていないpythonスクリプトを実行しました。これは、あなたが意図したことを実行すると思います。
1 import pyexiv2, sys, os, time, datetime, random
2 dirname = sys.argv[1]
3 flist=os.listdir(dirname)
4 dic = dict()
5 for fname in flist:
6 metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
7 metadata.read()
8 tag = metadata['Exif.Image.DateTime']
9 timestamp = int(time.mktime(tag.value.timetuple()))
10 #print fname, ' ', tag.value, ' ', timestamp
11 try:
12 dic[timestamp] = fname
13 except:
14 print fname, ' not processed.'
15
16 keys = dic.keys()
17 keys.sort()
18 i = 0
19 for k in keys:
20 os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
21 i+=1
PHPで私はこのようなことをしました:
<?php
$path = "./path/to/images";
$files = scandir($path);
foreach ( $files as $file )
{
if ( $file[0] === "." )
{
continue;
}
$ext = end(explode(".", $file));
$suffix = "image";
$exif = exif_read_data($path."/".$file, 'EXIF');
$datetime = str_replace("/","-", $exif['DateTimeDigitized']);
rename($path."/".$file, $path."/".$datetime.$suffix.".".$ext);
}
私たちがそれに取り組んでいる間、これはより「ハメ撮りプログラミング」スタイルであり、bash
で、exiftool
を使用して、一度に複数のディレクトリや個々のファイルで解放することができます。認識されないmimeタイプを持つファイルをスキップします。
DateTimeOriginal
EXIFタグを使用して写真の名前を変更します(したがって、結果は001.jpg
ではなく2015-12-22_14:43:15.jpg
になります。
名前の競合がある場合は、インデックス番号が適用されます:2015-12-22_14:50:57.1.jpg
。
役に立つかもしれません: relabel_photo_with_datetimeoriginal.sh