metadata: add CLI script for printing image metadata
Add a utility script for printing image metadata from the command line. Usage: `bin/lsmetadata 1.jpg 2.jpg`
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
# supported by a File.
|
||||
class MediaFile
|
||||
extend Memoist
|
||||
include ActiveModel::Serializers::JSON
|
||||
|
||||
attr_accessor :file
|
||||
|
||||
# delegate all File methods to `file`.
|
||||
@@ -168,5 +170,18 @@ class MediaFile
|
||||
nil
|
||||
end
|
||||
|
||||
def attributes
|
||||
{
|
||||
path: path,
|
||||
width: width,
|
||||
height: height,
|
||||
file_ext: file_ext,
|
||||
file_size: file_size,
|
||||
md5: md5,
|
||||
is_corrupt?: is_corrupt?,
|
||||
metadata: metadata
|
||||
}.stringify_keys
|
||||
end
|
||||
|
||||
memoize :file_ext, :file_size, :md5, :metadata
|
||||
end
|
||||
|
||||
25
bin/lsmetadata
Executable file
25
bin/lsmetadata
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
# List metadata for given image and video files in JSON format.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# bin/lsmetadata 1.jpg | jq # list file
|
||||
# bin/lsmetadata | jq # list all files in current directory
|
||||
# bin/lsmetadata images/ | jq # list directory
|
||||
# bin/lsmetadata images/**/* | jq # list directory recursively
|
||||
#
|
||||
# # Run from Docker without having to install Danbooru
|
||||
# docker run -rm -it -v $PWD:/mnt ghcr.io/danbooru/danbooru bin/lsmetadata /mnt/images/**/* | jq
|
||||
|
||||
APP_PATH = File.expand_path('../config/application', __dir__)
|
||||
require_relative "../config/environment"
|
||||
|
||||
files = ARGV
|
||||
files = [Dir.pwd] if files.empty?
|
||||
files.map! { |file| File.directory?(file) ? Dir[file + "/*"] : file }.flatten!
|
||||
files.reject! { |file| File.directory?(file) }
|
||||
|
||||
files.each do |filename|
|
||||
puts MediaFile.open(filename).to_json
|
||||
end
|
||||
Reference in New Issue
Block a user