數碼檔案與資料夾收納術(以照片為例)
- 更新 2014-05-14:增加了一些具體例項
- 更新 2015-03-16:根據照片的 GPS 座標過濾圖片
- 更新 2016-08-29:以新的
filetags --filter
替換已經過時的show-sel.sh
指令碼 - 更新 2017-08-28: geeqier 影片縮圖的郵件評論
- 更新 2018-03-06:增加了 Julian Kahnert 的連結
- 更新 2018-05-06:增加了作者在 2018 Linuxtage Graz 大會上 45 分鐘演講的影片
- 更新 2018-06-05:關於 metadata 的郵件回覆
- 更新 2018-07-22:移動資料夾結構的解釋到一篇它自己的文章中
- 更新 2019-07-09:關於在檔名中避免使用系譜和字元的郵件回覆
每當度假或去哪遊玩時我就會化身為一個富有激情的攝影師。所以,過去的幾年中我積累了許多的 JPEG 檔案。這篇文章中我會介紹我是如何避免 供應商鎖定(LCTT 譯註:供應商鎖定,原為經濟學術語,這裡引申為避免過於依賴某一服務平臺)造成受限於那些臨時性的解決方案及資料丟失。相反,我更傾向於使用那些可以讓我投入時間和精力打理,並能長久使用的解決方案。
這一(相當長的)攻略 並不僅僅適用於影像檔案:我將進一步闡述像是資料夾結構、檔案的命名規則等等許多領域的事情。因此,這些規範適用於我所能接觸到的所有型別的檔案。
在我開始傳授我的方法之前,我們應該先就我將要介紹方法的達成一個共識,那就是我們是否有相同的需求。如果你對 raw 影像格式十分推崇,將照片儲存在雲端或其他你信賴的地方(對我而言可能不會),那麼你可能不會認同這篇文章將要描述的方式了。請根據你的情況來靈活做出選擇。
我的需求
對於 將照片(或影片)從我的數位相機中匯出到電腦裡,我只需要將 SD 卡插到我的電腦裡並呼叫 fetch-workflow
軟體。這一步也完成了影像軟體的預處理以適用於我的檔案命名規範(下文會具體論述),同時也可以將圖片旋轉至正常的方向(而不是橫著)。
這些檔案將會被存入到我的攝影收藏資料夾 $HOME/tmp/digicam/
。在這一資料夾中我希望能遍歷我的影像和影片檔案,以便於整理/刪除、重新命名、新增/移除標籤,以及將一系列相關的檔案移動到相應的資料夾中。
在完成這些以後,我將會瀏覽包含影像/電影檔案集的資料夾。在極少數情況下,我希望在獨立的影像處理工具(比如 GIMP)中開啟一個影像檔案。如果僅是為了旋轉 JPEG 檔案,我想找到一個快速的方法,不需要影像處理工具,並且是以無損的方式旋轉 JPEG 影像。
我的數位相機支援用 GPS 座標標記影像。因此,我需要一個方法來對單個檔案或一組檔案視覺化 GPS 座標來顯示我走過的路徑。
我想擁有的另一個好功能是:假設你在威尼斯度假時拍了幾百張照片。每一個都很漂亮,所以你每張都捨不得刪除。另一方面,你可能想把一組更少的照片送給家裡的朋友。而且,在他們嫉妒的爆炸之前,他們可能只希望看到 20 多張照片。因此,我希望能夠定義並顯示一組特定的照片子集。
就獨立性和避免鎖定效應而言,我不想使用那種一旦公司停止產品或服務就無法使用的工具。出於同樣的原因,由於我是一個注重隱私的人,我不想使用任何基於雲的服務。為了讓自己對新的可能性保持開放的心態,我不希望只在一個特定的作業系統平臺才可行的方案上傾注全部的精力。基本的東西必須在任何平臺上可用(檢視、導航、……),而全套需求必須可以在 GNU/Linux 上執行,對我而言,我選擇 Debian GNU/Linux。
在我傳授當前針對上述大量需求的解決方案之前,我必須解釋一下我的一般資料夾結構和檔案命名約定,我也使用它來命名數碼照片。但首先,你必須認清一個重要的事實:
iPhoto、Picasa,諸如此類應被認為是有害的
管理照片集的軟體工具確實提供了相當酷的功能。它們提供了一個良好的使用者介面,並試圖為你提供滿足各種需求的舒適的工作流程。
對它們我確實遇到了很多大問題。它們幾乎對所有東西都使用專有的儲存格式:影像檔案、後設資料等等。當你打算在幾年內換一個不同的軟體,這是一個大問題。相信我:總有一天你會因為多種原因而更換軟體。
如果你現在正打算更換相應的工具,你會意識到 iPhoto 或 Picasa 是分別儲存原始影像檔案和你對它們所做的所有操作的(旋轉影像、向影像檔案新增描述/標籤、裁剪等等)。如果你不能匯出並重新匯入到新工具,那麼所有的東西都將永遠丟失。而無損的進行轉換和遷移幾乎是不可能的。
我不想在一個會鎖住我工作的工具上投入任何精力。我也拒絕把自己繫結在任何專有工具上。我是一個過來人,希望你們吸取我的經驗。
這就是我在檔名中保留時間戳、影像描述或標記的原因。檔名是永久性的,除非我手動更改它們。當我把照片備份或複製到 U 盤或其他作業系統時,它們不會丟失。每個人都能讀懂。任何未來的系統都能夠處理它們。
我的檔案命名規範
這裡有一個我在 2018 Linuxtage Graz 大會上做的演講,其中詳細闡述了我的在本文中提到的想法和工作流程。
我所有的檔案都與一個特定的日期或時間有關,根據所採用的 ISO 8601 規範,我採用的是日期戳或時間戳
帶有日期戳和兩個標籤的示例檔名:2014-05-09 Budget export for project 42 -- finance company.csv
。
帶有時間戳(甚至包括可選秒)和兩個標籤的示例檔名:2014-05-09T22.19.58 Susan presenting her new shoes -- family clothing.jpg
。
由於我使用的 ISO 時間戳冒號不適用於 Windows NTFS 檔案系統,因此,我用點代替冒號,以便將小時與分鐘(以及可選的秒)區別開來。
如果是持續的一段日期或時間,我會將兩個日期戳或時間戳用兩個減號分開:2014-05-09--2014-05-13 Jazz festival Graz -- folder tourism music.pdf
。
檔名中的時間/日期戳的優點是,除非我手動更改它們,否則它們保持不變。當透過某些不處理這些後設資料的軟體進行處理時,包含在檔案內容本身中的後設資料(如 Exif)往往會丟失。此外,使用這樣的日期/時間戳開始的檔名可以確保檔案按時間順序顯示,而不是按字母順序顯示。字母表是一種完全人工的排序順序,對於使用者定位檔案通常不太實用。
當我想將標籤關聯到檔名時,我將它們放在原始檔名和檔名副檔名之間,中間用空格、兩個減號和兩端額外的空格分隔 --
。我的標籤是小寫的英文單詞,不包含空格或特殊字元。有時,我可能會使用 quantifiedself
或 usergenerated
這樣的連線詞。我傾向於選擇一般類別,而不是太過具體的描述標籤。我在 Twitter hashtags、檔名、資料夾名、書籤、諸如此類的博文等諸如此類地地方重用這些標籤。
標籤作為檔名的一部分有幾個優點。透過使用常用的桌面搜尋引擎,你可以在標籤的幫助下定位檔案。檔名稱中的標籤不會因為複製到不同的儲存介質上而丟失。當系統使用與檔名之外的儲存位置(如:後設資料資料庫、點檔案、備用資料流等)儲存元資訊通常會發生丟失。
當然,通常在檔案和資料夾名稱中,請避免使用特殊字元、變音符、冒號等。尤其是在不同作業系統平臺之間同步檔案時。
我的資料夾名命名約定與檔案的相應規範相同。
注意:由於 Memacs 的 filenametimestamp 模組的聰明之處,所有帶有日期/時間戳的檔案和資料夾都出現在我的 Org 模式的日曆(日程)上的同一天/同一時間。這樣,我就能很好地瞭解當天發生了什麼,包括我拍的所有照片。
我的一般資料夾結構
在本節中,我將描述我的主資料夾中最重要的資料夾。注意:這可能在將來的被移動到一個獨立的頁面。或許不是。讓我們等著瞧 :-) (LCTT 譯註:後來這一節已被作者擴充套件並移動到另外一篇文章。)
很多東西只有在一定的時間內才會引起人們的興趣。這些內容包括快速瀏覽其內容的下載、解壓縮檔案以檢查包含的檔案、一些有趣的小內容等等。對於臨時的東西,我有 $HOME/tmp/
子層次結構。新照片放在 $HOME/tmp/digicam/
中。我從 CD、DVD 或 USB 記憶棒臨時複製的東西放在 $HOME/tmp/fromcd/
中。每當軟體工具需要使用者資料夾層次結構中的臨時資料時,我就使用 $HOME/tmp/Tools/
作為起點。我經常使用的資料夾是 $HOME/tmp/2del/
:2del
的意思是“隨時可以刪除”。例如,我所有的瀏覽器都使用這個資料夾作為預設的下載資料夾。如果我需要在機器上騰出空間,我首先檢視這個 2del
資料夾,用於刪除內容。
與上面描述的臨時檔案相比,我當然也想將檔案儲存更長的時間。這些檔案被移動到我的 $HOME/archive/
子層次結構中。它有幾個子資料夾用於備份、我想保留的 web 下載類、我要存檔的二進位制檔案、可移動媒體(CD、DVD、記憶棒、外部硬碟驅動器)的索引檔案,和一個稍後(尋找一個合適的的目標資料夾)存檔的資料夾。有時,我太忙或沒有耐心的時候將檔案妥善整理。是的,那就是我,我甚至有一個名為“現在不要煩我”的資料夾。這對你而言是否很怪?:-)
我的歸檔中最重要的子層次結構是 $HOME/archive/events_memories/
及其子資料夾 2014/
、2013/
、2012/
等等。正如你可能已經猜到的,每個年份有一個子資料夾。其中每個檔案中都有單個檔案和資料夾。這些檔案是根據我在前一節中描述的檔名約定命名的。資料夾名稱以 ISO 8601 日期標籤 “YYYY-MM-DD” 開頭,後面跟著一個具有描述性的名稱,如 $HOME/archive/events_memories/2014/2014-05-08 Business marathon with/
。在這些與日期相關的資料夾中,我儲存著各種與特定事件相關的檔案:照片、(掃描的)pdf 檔案、文字檔案等等。
對於共享資料,我設定一個 $HOME/share/
子層次結構。這是我的 Dropbox 資料夾,我用各種各樣的方法(比如 unison)來分享資料。我也在我的裝置之間共享資料:家裡的 Mac Mini、家裡的 GNU/Linux 筆記本、Android 手機,root-server(我的個人雲),工作用的 Windows 筆記本。我不想在這裡詳細說明我的同步設定。如果你想了解相關的設定,可以參考另一篇相關的文章。:-)
在我的 $HOME/templates_tags/
子層次結構中,我儲存了各種模板檔案(LaTeX、指令碼、…),插圖和徽標,等等。
我的 Org 模式 檔案,主要是儲存在 $HOME/org/
。我練習記憶力,不會解釋我有多喜歡 Emacs/Org 模式 以及我從中獲益多少。你可能讀過或聽過我詳細描述我用它做的很棒的事情。具體可以在我的部落格上查詢 我的 Emacs 標籤,在 Twitter 上查詢 hashtag #orgmode。
以上就是我最重要的資料夾子層次結構設定方式。
我的工作流程
噠噠噠,在你瞭解了我的資料夾結構和檔名約定之後,下面是我當前的工作流程和工具,我使用它們來滿足我前面描述的需求。
請注意,你必須知道你在做什麼。我這裡的示例及資料夾路徑和更多只適用我的機器或我的環境。你必須採用相應的路徑、檔名等來滿足你的需求!
工作流程:將檔案從 SD 卡移動到膝上型電腦、旋轉人像影像,並重新命名檔案
當我想把資料從我的數位相機移到我的 GNU/Linux 筆記本上時,我拿出它的 mini SD 儲存卡,把它放在我的筆記本上。然後它會自動掛載在 /media/digicam
上。
然後,呼叫 getdigicamdata。它做了如下幾件事:它將檔案從 SD 卡移動到一個臨時資料夾中進行處理。原始檔名會轉換為小寫字元。所有的人像照片會使用 jhead 旋轉。同樣使用 jhead,我從 Exif 頭的時間戳中生成檔名稱中的時間戳。使用 date2name,我也將時間戳新增到電影檔案中。處理完所有這些檔案後,它們將被移動到新的數位相機檔案的目標資料夾: $HOME/tmp/digicam/tmp/
。
工作流程:資料夾索引、檢視、重新命名、刪除影像檔案
為了快速瀏覽我的影像和電影檔案,我喜歡使用 GNU/Linux 上的 geeqie。這是一個相當輕量級的影像瀏覽器,它具有其他檔案瀏覽器所缺少的一大優勢:我可以新增透過鍵盤快捷方式呼叫的外部指令碼/工具。透過這種方式,我可以透過任意外部命令擴充套件這個影像瀏覽器的特性。
基本的影像管理功能是內建在 geeqie:瀏覽我的資料夾層次結構、以視窗模式或全屏檢視影像(快捷鍵 f
)、重新命名檔名、刪除檔案、顯示 Exif 後設資料(快捷鍵 Ctrl-e
)。
在 OS X 上,我使用 Xee。與 geeqie 不同,它不能透過外部命令進行擴充套件。不過,基本的瀏覽、檢視和重新命名功能也是可用的。
工作流程:新增和刪除標籤
我建立了一個名為 filetags 的 Python 指令碼,用於向單個檔案以及一組檔案新增和刪除標記。
對於數碼照片,我使用標籤,例如,specialL
用於我認為適合桌面背景的風景圖片,specialP
用於我想展示給其他人的人像照片,sel
用於篩選,等等。
使用 geeqie 初始設定 filetags
向 geeqie 新增 filetags
是一個手動步驟:“Edit > Preferences > Configure Editors …”,然後建立一個附加條目 New
。在這裡,你可以定義一個新的桌面檔案,如下所示:
[Desktop Entry]
Name=filetags
GenericName=filetags
Comment=
Exec=/home/vk/src/misc/vk-filetags-interactive-adding-wrapper-with-gnome-terminal.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;
add-tags.desktop
封裝指令碼 vk-filetags-interactive-adding-wrapper-with-gnome-terminal.sh
是必須的,因為我想要彈出一個新的終端,以便新增標籤到我的檔案:
#!/bin/sh
/usr/bin/gnome-terminal \
--geometry=85x15+330+5 \
--tab-with-profile=big \
--hide-menubar \
-x /home/vk/src/filetags/filetags.py --interactive "${@}"
#end
vk-filetags-interactive-adding-wrapper-with-gnome-terminal.sh
在 geeqie 中,你可以在 “Edit > Preferences > Preferences … > Keyboard”。我將 t
與 filetags
命令相關聯。
這個 filetags
指令碼還能夠從單個檔案或一組檔案中刪除標記。它基本上使用與上面相同的方法。唯一的區別是 filetags
指令碼額外的 --remove
引數:
[Desktop Entry]
Name=filetags-remove
GenericName=filetags-remove
Comment=
Exec=/home/vk/src/misc/vk-filetags-interactive-removing-wrapper-with-gnome-terminal.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;
remove-tags.desktop
#!/bin/sh
/usr/bin/gnome-terminal \
--geometry=85x15+330+5 \
--tab-with-profile=big \
--hide-menubar \
-x /home/vk/src/filetags/filetags.py --interactive --remove "${@}"
#end
vk-filetags-interactive-removing-wrapper-with-gnome-terminal.sh
為了刪除標籤,我建立了一個鍵盤快捷方式 T
。
在 geeqie 中使用 filetags
當我在 geeqie 檔案瀏覽器中瀏覽影像檔案時,我選擇要標記的檔案(一到多個)並按 t
。然後,一個小視窗彈出,要求我提供一個或多個標籤。用回車確認後,這些標籤被新增到檔名中。
刪除標籤也是一樣:選擇多個檔案,按下 T
,輸入要刪除的標籤,然後按回車確認。就是這樣。幾乎沒有給檔案新增或刪除標籤的更簡單的方法了。
工作流程:改進的使用 appendfilename 重新命名檔案
不使用 appendfilename
重新命名一組大型檔案可能是一個冗長乏味的過程。對於 2014-04-20T17.09.11_p1100386.jpg
這樣的原始檔名,在檔名中新增描述的過程相當煩人。你將按 Ctrl-r
(重新命名)在 geeqie 中開啟檔案重新命名對話方塊。預設情況下,原始名稱(沒有副檔名的檔名稱)被標記。因此,如果不希望刪除/覆蓋檔名(但要追加),則必須按下游標鍵 →
。然後,游標放在基本名稱和副檔名之間。輸入你的描述(不要忘記以空格字元開始),並用回車進行確認。
在 geeqie 使中用 appendfilename
使用 appendfilename,我的過程得到了簡化,可以獲得將文字附加到檔名的最佳使用者體驗:當我在 geeqie 中按下 a
(附加)時,會彈出一個對話方塊視窗,詢問文字。在回車確認後,輸入的文字將放置在時間戳和可選標記之間。
例如,當我在 2014-04-20T17.09.11_p1100386.jpg
上按下 a
,然後鍵入Pick-nick in Graz
時,檔名變為 2014-04-20T17.09.11_p1100386 Pick-nick in Graz.jpg
。當我再次按下 a
並輸入 with Susan
時,檔名變為 2014-04-20T17.09.11_p1100386 Pick-nick in Graz with Susan.jpg
。當檔名新增標記時,附加的文字前將附加標記分隔符。
這樣,我就不必擔心覆蓋時間戳或標記。重新命名的過程對我來說變得更加有趣!
最好的部分是:當我想要將相同的文字新增到多個選定的檔案中時,也可以使用 appendfilename
。
在 geeqie 中初始設定 appendfilename
新增一個額外的編輯器到 geeqie: “Edit > Preferences > Configure Editors … > New”。然後輸入桌面檔案定義:
[Desktop Entry]
Name=appendfilename
GenericName=appendfilename
Comment=
Exec=/home/vk/src/misc/vk-appendfilename-interactive-wrapper-with-gnome-terminal.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;
appendfilename.desktop
同樣,我也使用了一個封裝指令碼,它將為我開啟一個新的終端:
#!/bin/sh
/usr/bin/gnome-terminal \
--geometry=90x5+330+5 \
--tab-with-profile=big \
--hide-menubar \
-x /home/vk/src/appendfilename/appendfilename.py "${@}"
#end
vk-appendfilename-interactive-wrapper-with-gnome-terminal.sh
工作流程:播放電影檔案
在 GNU/Linux 上,我使用 mplayer 回放影片檔案。由於 geeqie 本身不播放電影檔案,所以我必須建立一個設定,以便在 mplayer 中開啟電影檔案。
在 geeqie 中初始設定 mplayer
我已經使用 xdg-open 將電影副檔名關聯到 mplayer。因此,我只需要為 geeqie 建立一個通用的“open”命令,讓它使用 xdg-open
開啟任何檔案及其關聯的應用程式。
在 geeqie 中,再次訪問 “Edit > Preferences > Configure Editors …” 新增“open”的條目:
[Desktop Entry]
Name=open
GenericName=open
Comment=
Exec=/usr/bin/xdg-open %F
Icon=
Terminal=true
Type=Application
hidden=false
NOMimeType=*;
MimeType=image/*;video/*
Categories=X-Geeqie;
open.desktop
當你也將快捷方式 o
(見上文)與 geeqie 關聯時,你就能夠開啟與其關聯的應用程式的影片檔案(和其他檔案)。
使用 xdg-open 開啟電影檔案(和其他檔案)
在上面的設定過程之後,當你的 geeqie 游標位於檔案上方時,你只需按下 o
即可。就是如此簡潔。
工作流程:在外部影像編輯器中開啟
我不太希望能夠在 GIMP 中快速編輯影像檔案。因此,我新增了一個快捷方式 g
,並將其與外部編輯器 “GNU Image Manipulation Program
(GIMP)” 關聯起來,geeqie 已經預設建立了該外部編輯器。
這樣,只需按下 g
就可以在 GIMP 中開啟當前影像。
工作流程:移動到存檔資料夾
現在我已經在我的檔名中新增了註釋,我想將單個檔案移動到 $HOME/archive/events_memories/2014/
,或者將一組檔案移動到這個資料夾中的新資料夾中,如 $HOME/archive/events_memories/2014/2014-05-08 business marathon after show - party
。
通常的方法是選擇一個或多個檔案,並用快捷方式 Ctrl-m
將它們移動到資料夾中。
何等繁複無趣之至!
因此,我(再次)編寫了一個 Python 指令碼,它為我完成了這項工作:move2archive(簡寫為:m2a
),需要一個或多個檔案作為命令列引數。然後,出現一個對話方塊,我可以在其中輸入一個可選資料夾名。當我不輸入任何東西而是按回車,檔案被移動到相應年份的資料夾。當我輸入一個類似 Business-Marathon After-Show-Party
的資料夾名稱時,第一個影像檔案的日期戳被附加到該資料夾($HOME/archive/events_memories/2014/2014-05-08 Business-Marathon After-Show-Party
),然後建立該資料夾,並移動檔案。
再一次,我在 geeqie 中選擇一個或多個檔案,按 m
(移動),或者只按回車(沒有特殊的子資料夾),或者輸入一個描述性文字,這是要建立的子資料夾的名稱(可選不帶日期戳)。
沒有一個影像管理工具像我的帶有 appendfilename 和 move2archive 的 geeqie 一樣可以透過快捷鍵快速且有趣的完成工作。
在 geeqie 裡初始化 m2a 的相關設定
同樣,向 geeqie 新增 m2a
是一個手動步驟:“Edit > Preferences > Configure Editors …”,然後建立一個附加條目“New”。在這裡,你可以定義一個新的桌面檔案,如下所示:
[Desktop Entry]
Name=move2archive
GenericName=move2archive
Comment=Moving one or more files to my archive folder
Exec=/home/vk/src/misc/vk-m2a-interactive-wrapper-with-gnome-terminal.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;
m2a.desktop
封裝指令碼 vk-m2a-interactive-wrapper-with-gnome-terminal.sh
是必要的,因為我想要彈出一個新的終端視窗,以便我的檔案進入我指定的目標資料夾:
#!/bin/sh
/usr/bin/gnome-terminal \
--geometry=157x56+330+5 \
--tab-with-profile=big \
--hide-menubar \
-x /home/vk/src/m2a/m2a.py --pauseonexit "${@}"
#end
vk-m2a-interactive-wrapper-with-gnome-terminal.sh
在 geeqie 中,你可以在 “Edit > Preferences > Preferences … > Keyboard” 將 m
與 m2a
命令相關聯。
工作流程:旋轉影像(無損)
通常,我的數位相機會自動將人像照片標記為人像照片。然而,在某些特定的情況下(比如從裝飾圖案上方拍照),我的相機會出錯。在那些罕見的情況下,我必須手動修正方向。
你必須知道,JPEG 檔案格式是一種有損格式,應該只用於照片,而不是計算機生成的東西,如螢幕截圖或圖表。以傻瓜方式旋轉 JPEG 影像檔案通常會解壓/視覺化影像檔案、旋轉生成新的影像,然後重新編碼結果。這將導致生成的影像比原始影像質量差得多。
因此,你應該使用無損方法來旋轉 JPEG 影像檔案。
再一次,我新增了一個“外部編輯器”到 geeqie:“Edit > Preferences > Configure Editors … > New”。在這裡,我新增了兩個條目:使用 exiftran,一個用於旋轉 270 度(即逆時針旋轉 90 度),另一個用於旋轉 90 度(順時針旋轉 90 度):
[Desktop Entry]
Version=1.0
Type=Application
Name=Losslessly rotate JPEG image counterclockwise
# call the helper script
TryExec=exiftran
Exec=exiftran -p -2 -i -g %f
# Desktop files that are usable only in Geeqie should be marked like this:
Categories=X-Geeqie;
OnlyShowIn=X-Geeqie;
# Show in menu "Edit/Orientation"
X-Geeqie-Menu-Path=EditMenu/OrientationMenu
MimeType=image/jpeg;
rotate-270.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Losslessly rotate JPEG image clockwise
# call the helper script
TryExec=exiftran
Exec=exiftran -p -9 -i -g %f
# Desktop files that are usable only in Geeqie should be marked like this:
Categories=X-Geeqie;
OnlyShowIn=X-Geeqie;
# Show in menu "Edit/Orientation"
X-Geeqie-Menu-Path=EditMenu/OrientationMenu
# It can be made verbose
# X-Geeqie-Verbose=true
MimeType=image/jpeg;
rotate-90.desktop
我建立了 geeqie 快捷鍵 [
(逆時針方向)和 ]
(順時針方向)。
工作流程:視覺化 GPS 座標
我的數位相機有一個 GPS 感測器,它在 JPEG 檔案的 Exif 後設資料中儲存當前的地理位置。位置資料以 WGS 84 格式儲存,如 47, 58, 26.73; 16, 23, 55.51
(緯度;經度)。這一方式可讀性較差,我期望:要麼是地圖,要麼是位置名稱。因此,我向 geeqie 新增了一些功能,這樣我就可以在 OpenStreetMap 上看到單個影像檔案的位置: Edit > Preferences > Configure Editors ... > New
。
[Desktop Entry]
Name=vkphotolocation
GenericName=vkphotolocation
Comment=
Exec=/home/vk/src/misc/vkphotolocation.sh %F
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/svg+xml;image/svg+xml-compressed;image/vnd.wap.wbmp;
photolocation.desktop
這呼叫了我的名為 vkphotolocation.sh
的封裝指令碼,它使用 ExifTool 以 Marble 能夠讀取和視覺化的適當格式提取該座標:
#!/bin/sh
IMAGEFILE="${1}"
IMAGEFILEBASENAME=`basename ${IMAGEFILE}`
COORDINATES=`exiftool -c %.6f "${IMAGEFILE}" | awk '/GPS Position/ { print $4 " " $6 }'`
if [ "x${COORDINATES}" = "x" ]; then
zenity --info --title="${IMAGEFILEBASENAME}" --text="No GPS-location found in the image file."
else
/usr/bin/marble --latlon "${COORDINATES}" --distance 0.5
fi
#end
vkphotolocation.sh
對映到鍵盤快捷鍵 G
,我可以快速地得到單個影像檔案的位置的地圖定位。
當我想將多個 JPEG 影像檔案的位置視覺化為路徑時,我使用 GpsPrune。我無法挖掘出 GpsPrune 將一組檔案作為命令列引數的方法。正因為如此,我必須手動啟動 GpsPrune,用 “File > Add photos”選擇一組檔案或一個資料夾。
透過這種方式,我可以為每個 JPEG 位置在 OpenStreetMap 地圖上獲得一個點(如果配置為這樣)。透過單擊這樣一個點,我可以得到相應影像的詳細資訊。
如果你恰好在國外拍攝照片,視覺化 GPS 位置對在檔名中新增描述大有幫助!
工作流程:根據 GPS 座標過濾照片
這並非我的工作流程。為了完整起見,我列出該工作流對應工具的特性。我想做的就是從一大堆圖片中尋找那些在一定區域內(範圍或點 + 距離)的照片。
到目前為止,我只找到了 DigiKam,它能夠根據矩形區域進行過濾。如果你知道其他工具,請將其新增到下面的評論或給我寫一封電子郵件。
工作流程:顯示給定集合的子集
如上面的需求所述,我希望能夠對一個資料夾中的檔案定義一個子集,以便將這個小集合呈現給其他人。
工作流程非常簡單:我向選擇的檔案新增一個標記(透過 t
/filetags
)。為此,我使用標記 sel
,它是 “selection” 的縮寫。在標記了一組檔案之後,我可以按下 s
,它與一個指令碼相關聯,該指令碼只顯示標記為 sel
的檔案。
當然,這也適用於任何標籤或標籤組合。因此,用同樣的方法,你可以得到一個適當的概述,你的婚禮上的所有照片都標記著“教堂”和“戒指”。
很棒的功能,不是嗎?:-)
初始設定 filetags 以根據標籤和 geeqie 過濾
你必須定義一個額外的“外部編輯器”,“ Edit > Preferences > Configure Editors … > New”:
[Desktop Entry]
Name=filetag-filter
GenericName=filetag-filter
Comment=
Exec=/home/vk/src/misc/vk-filetag-filter-wrapper-with-gnome-terminal.sh
Icon=
Terminal=true
Type=Application
Categories=Application;Graphics;
hidden=false
MimeType=image/*;video/*;image/mpo;image/thm
Categories=X-Geeqie;
filter-tags.desktop
再次呼叫我編寫的封裝指令碼:
#!/bin/sh
/usr/bin/gnome-terminal \
--geometry=85x15+330+5 \
--hide-menubar \
-x /home/vk/src/filetags/filetags.py --filter
#end
vk-filetag-filter-wrapper-with-gnome-terminal.sh
帶有引數 --filter
的 filetags
基本上完成的是:使用者被要求輸入一個或多個標籤。然後,當前資料夾中所有匹配的檔案都使用符號連結連結到 $HOME/.filetags_tagfilter/
。然後,啟動了一個新的 geeqie 例項,顯示連結的檔案。
在退出這個新的 geeqie 例項之後,你會看到進行選擇的舊的 geeqie 例項。
用一個真實的案例來總結
哇哦, 這是一篇很長的部落格文章。你可能已經忘了之前的概述。總結一下我在(擴充套件了標準功能集的) geeqie 中可以做的事情,我有一個很酷的總結:
快捷鍵 | 功能 |
---|---|
m |
移到歸檔(m2a) |
o |
開啟(針對非影像檔案) |
a |
在檔名裡新增欄位 |
t |
檔案標籤(新增) |
T |
檔案標籤(刪除) |
s |
檔案標籤(排序) |
g |
gimp |
G |
顯示 GPS 資訊 |
[ |
無損的逆時針旋轉 |
] |
無損的順時針旋轉 |
Ctrl-e |
EXIF 影像資訊 |
f |
全屏顯示 |
檔名(包括它的路徑)的部分及我用來操作該部分的相應工具:
/this/is/a/folder/2014-04-20T17.09 Picknick in Graz -- food graz.jpg
[ move2archive ] [ date2name ] [appendfilename] [ filetags ]
在實踐中,我按照以下步驟將照片從相機儲存到存檔:我將 SD 儲存卡放入計算機的 SD 讀卡器中。然後我執行 getdigicamdata.sh。完成之後,我在 geeqie 中開啟 $HOME/tmp/digicam/tmp/
。我瀏覽了一下照片,把那些不成功的刪除了。如果有一個影像的方向錯誤,我用 [
或 ]
糾正它。
在第二步中,我向我認為值得評論的檔案新增描述 (a
)。每當我想新增標籤時,我也這樣做:我快速地標記所有應該共享相同標籤的檔案(Ctrl + 滑鼠點選
),並使用 filetags(t
)進行標記。
要合併來自給定事件的檔案,我選中相應的檔案,將它們移動到年度歸檔資料夾中的 event-folder
,並透過在 move2archive(m
)中鍵入事件描述,其餘的(非特殊的資料夾)無需宣告事件描述由 move2archive
(m
)直接移動到年度歸檔中。
結束我的工作流程,我刪除了 SD 卡上的所有檔案,把它從作業系統上彈出,然後把它放回我的數位相機裡。
以上。
因為這種工作流程幾乎不需要任何開銷,所以評論、標記和歸檔照片不再是一項乏味的工作。
最後
所以,這是一個詳細描述我關於照片和電影的工作流程的敘述。你可能已經發現了我可能感興趣的其他東西。所以請不要猶豫,請使用下面的連結留下評論或電子郵件。
我也希望得到反饋,如果我的工作流程適用於你。並且,如果你已經發布了你的工作流程或者找到了其他人工作流程的描述,也請留下評論!
及時行樂,莫讓錯誤的工具或低效的方法浪費了我們的人生!
其他工具
閱讀關於本文中關於 gThumb 的部分。
當你覺得你以上文中所敘述的符合你的需求時,請根據相關的建議來選擇對應的工具。
via: http://karl-voit.at/managing-digital-photographs/
作者:Karl Voit 譯者:qfzy1233 校對:wxy
相關文章
- Oracle資料檔案收縮例項Oracle
- Python求取資料夾內的檔案數量、子資料夾內的檔案數量Python
- 統計資料夾檔案數量的sh指令碼指令碼
- windows10怎麼把收納盒的資料夾移出來Windows
- matlab生成mif檔案程式碼(以資料位寬15,深度1024為例)Matlab
- java 獲取資料夾大小、檔案大小、檔案個數Java
- Linux統計某資料夾下檔案、資料夾的個數Linux
- Python資料夾與檔案的操作Python
- 畸形檔案 資料夾
- 資料檔案收縮
- 統計檔案數目(不包括隱藏檔案/資料夾)
- Linux中隱藏檔案與資料夾Linux
- 將資料庫照片大欄位下卸到檔案系統,照片檔名以某一個欄位命名資料庫
- 讀取資料夾檔案
- 以MongoDB為例與關係型資料庫比較MongoDB資料庫
- 收縮Oracle資料檔案Oracle
- ORACLE 收縮資料檔案Oracle
- hadoop 資料夾檔案的建立與刪除Hadoop
- Qt 選擇資料夾、建立資料夾以及建立檔案QT
- 「ArrayBuffer」應用-以自動調整照片方向為例
- linux監控資料夾內的檔案數量Linux
- sqlserver收縮資料庫、收縮資料檔案的操作SQLServer資料庫
- Linux chmod命令修改檔案與資料夾許可權命令程式碼Linux
- 獲取資料夾及其子資料夾下的所有檔案
- 收縮ORACLE的資料檔案Oracle
- 在 Linux 中用 Meld以圖形方式比較檔案和資料夾Linux
- umask 檔案與資料夾的預設許可權
- java中建立以一年中日期命名的資料夾,複製檔案 刪除檔案(完整程式碼)Java
- RDF 和 SPARQL 初探:以維基資料為例
- 批量下載檔案(以xxx網站為例)網站
- 利用java建立檔案或者資料夾Java
- macOS鎖定檔案和資料夾Mac
- gulp刪除檔案和資料夾
- 用vb操作檔案或資料夾
- Window資料夾,檔案命名規則
- 修改檔案、資料夾許可權
- git的gitignore檔案排除資料夾和檔案Git
- 遞迴遍歷磁碟下的某一資料夾中所有檔案,並copy檔案生成檔案和帶資料夾的檔案遞迴