Sắp xếp và đổi tên hình ảnh theo ngày trong thông tin EXIF


9

Tôi có một mớ hỗn độn trong thư mục ảnh của tôi; Tôi muốn sắp xếp chúng theo ngày trong thông tin EXIF ​​và đổi tên theo ngày (như 001.jpg, 002.jpg, v.v.).

Làm thế nào tôi có thể làm điều này trong Linux? Tôi đã sử dụng ImageMagick cho một số tác vụ xử lý hàng loạt cơ bản trước đây (chuyển đổi và thay đổi kích thước, v.v.), có thể sử dụng nó cho tác vụ này không?

Câu trả lời:


20

Trên Linux, bạn có thể sử dụng lệnh exiftool . Vì một số lý do, hướng dẫn trực tuyến không chứa phần "RENAMING EXAMPLES" đã cho tôi gợi ý cần thiết.

Đối với các tệp chỉ JPG, lệnh gọi sau sẽ thực hiện công việc:

exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>

Giải trình:

  • -r là cho đệ quy
  • '-FileName<CreateDate'yêu cầu exiftool đổi tên tệp cho phù hợp với thẻ EXIF ​​của nó CreateDate(bạn có thể thử những thứ khác như thế ModifyDate)
  • -d '%Y-%m-%d/%H_%M_%S%%-c.%%le'cho biết cách xây dựng chuỗi tên tệp từ nguồn ngày " CreateDate" (" %-c" sẽ nối thêm bộ đếm trong trường hợp va chạm tệp, " %le" là viết tắt của "phần mở rộng tệp có vỏ thấp hơn")
    • Lưu ý : Tôi đã sử dụng " -FileName<..." ở đây để đổi tên các tệp và di chuyển nó sang thư mục khác trong một bước. Hướng dẫn chỉ ra rằng bạn phải sử dụng -Directory<...cú pháp "" cho các hoạt động thư mục. Nó làm việc cho tôi theo cách này mặc dù.

Bạn nên dành thời gian đọc hướng dẫn của công cụ mạnh mẽ này. Có lẽ có một cách thậm chí còn ngắn hơn: D


1
Các ví dụ đổi tên trong tài liệu: sno.phy.queensu.ca/~phil/exiftool/ .
rwoo


2

Cách đơn giản nhất là chỉ nhập tệp vào jbrout ... sau đó (tùy chọn) tất cả các tệp có thể có tên được thay đổi thành thứ gì đó theo thời gian. Hoặc bạn có thể thấy rằng bạn hoàn toàn không cần thay đổi tên (và jbrout là đủ).


1

Tôi đã thực hiện một kịch bản python nhỏ và không được tối ưu hóa cho lắm.

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

Bạn phải cài đặt thư viện này Untiloy.net/dev/pyexiv2
celebdor

1

Để làm cho nó hoạt động trong Debian Lenny, hãy thử điều này:

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

1

Trong php tôi đã làm một cái gì đó như thế này:

<?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);
}

0

Trong khi chúng ta đang ở đó, đây là một phong cách "lập trình gonzo" hơn, trong khi bashsử dụng exiftool, nó có thể được thả lỏng trên một số thư mục và / hoặc các tệp riêng lẻ trong một lần. Nó bỏ qua các tập tin có loại mime không được công nhận.

Nó đổi tên ảnh bằng cách sử dụng DateTimeOriginalthẻ EXIF (vì vậy kết quả là không 001.jpgnhưng 2015-12-22_14:43:15.jpg.

Nếu có xung đột đặt tên, số chỉ mục được áp dụng : 2015-12-22_14:50:57.1.jpg.

Có thể hữu ích: relabel_photo_with_datetimeorigen.sh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.