週末写真家のピンボケライフ

平日はサラリーマン、週末はアマチュア写真家。

スポンサーリンク

Lightroom Classic CCとX RAW STUDIOを併用する際の課題をバッチファイルで処理する話

はじめに

需要がないのはわかっているんですが、誰かの役に立つかもしれないので記事にしておきます。

f:id:dabcphoto:20180804223543j:plain


「X-E3で撮影したものは、できるだけ撮って出しで済ませたい」のですが、そう上手くはいきません。RAW現像をする必要がでてきます。

普段はLightroom Classic CCで写真の管理とRAW現像を行っていますが、FUJIFILMを使っている以上はFUJIFILMの色を使いたいところ。

そこで使用するのはX RAW STUDIOとなります。

しかし、Lightroom Classic CCとX RAW STUDIOを併用すると、ファイル管理がなかなかに厄介なことになります。

その厄介な課題を解決するべく、バッチファイル(.bat)をせっせと書くことにしました。

システムエンジニアの端くれとしては、これぐらい簡単に作れるようになりたいと思いつつ、意外と時間がかかってしまいました。

そして、記事はぐっちゃぐちゃな内容に。だけど、備忘録的に書き殴っておきます。マジで誰が読むんだ、こんなの。

RAW現像の流れ

さて、本題に移っていきます。私が考えているRAW現像の流れと、その障壁となる課題を書き出してみました。

①Lightroom Classic CCでSD/CFカードから写真を読み込む

普通に撮影したデータはファイル名がこんな感じです。
f:id:dabcphoto:20180804223630j:plain


そこで、データを読み込む際には、ファイル名の頭に「yyyymmdd-」を付けます。また、末尾には「-XE3」を付けます。


これでファイル名に一意性を持たせることができます。読み込んだファイル名はRAFとJPGがそれぞれこうなります。

f:id:dabcphoto:20180804223819j:plain

  • yyyymmdd-DSCF0001-XE3.JPG
  • yyyymmdd-DSCF0001-XE3.RAF

さらに、保存先のフォルダは、撮影日毎に「yyyy-mm-dd」というフォルダに振り分けることにします。後で見返すときに楽ですね。

f:id:dabcphoto:20180804223834j:plain

ここまでLightroomの標準機能です。

②Lightroom Classic CCで写真の選定を行う

①で読み込んだ良い感じの写真に、せっせとレーティングを付けていきます。これで後で写真を探したいときに、かなり便利なことになります。

f:id:dabcphoto:20180804223854j:plain

ここまでLightroomの標準機能です。

③X RAW STUDIOでRAW現像する

さてさて、X RAW STUDIOで②のレーティングを元にRAW現像・・・ができません。

X RAW STUDIOではレーティングでごにょごにょする機能がありません。なんてナンセンスなソフトウェアなんだ。

ということで、普通にしていると「yyyy-mm-dd」のフォルダから、せっせと目的の写真を探し直すことになります。マジでナンセンス。(※課題1)

④X RAW STUDIOでJPGを生成する

何はともあれ、③でRAW現像を終えたとしましょう。

X RAW STUDIOから生成されるファイル名がまたナンセンス。(設定弄らせて欲しいなぁ。)

RAFからX RAW STUDIOでRAW現像を繰り返すと、このような命名規則でファイルが生成されます。

yyyymmdd-DSCF0001-XE3.RAF
yyyymmdd-DSCF0001-XE3.JPG
⇒ yyyymmdd-DSCF0001-XE3(1).JPG
⇒ yyyymmdd-DSCF0001-XE3(2).JPG

出力先のフォルダでファイル名がダブったら、(1),(2),(3)・・・とファイルを生成していく仕様です。名前がダブらなければ(1)はつかない。

ここで問題発生。

赤字にしたファイル名って、①でLightroomが付けた名前と同じになってしまうんですよね。(※課題2)

さらに厄介なことに、X RAW STUDIOは独自のプロファイルを生成します。

そのため、下手に名前を変えると、RAW現像したときのパラメータが吹っ飛んじゃうんですね。面倒くさいことになるので、今回は放置することにしました。

X RAW STUDIOくんの命名規則を守りましょう。

⑥RAW現像後のJPGをLightroom Classic CCで読み込む

仕上げです。

Lightroomで写真を管理している都合上、④で生成したJPGをLightroomに認識させる必要があります。

「yyyy-mm-dd」のフォルダに移さずに、その場で読み込ませるのが楽。伝わらないだろうけど、まぁそんな感じでやりたいんです。



課題

そんなわけでフローを書き出してみたら見えた課題。

(課題1) X RAW STUDIOでレーティング使えない問題

レーティングを使えない以上、何か別の方法でレーティングを付けたファイルを見分ける必要があります。

私が考えた解決策としては、「Lightroom Classic CCで、レーティングを付けたファイルを一時フォルダに退避させる」です。

こうすることで、X RAW STUDIOが読み込むファイルが最小限で済み、探す必要もなくなり、ハッピーハッピー!!と思っていたのですが、課題2が邪魔をしてきました。

(課題2)X RAW STUDIOが生成する名前がダブる問題

上述の通り、X RAW STUDIOはファイル名がダブります。マジで厄介です。

一時フォルダにRAFだけを退避させ、そのフォルダでRAW現像をして、JPGを生成させると、ファイル名がダブります。

ということは、RAFとJPGを同時に一時フォルダに退避させれば、この問題は回避できます。

でもでも、そうすると今度はLightroomくんが「JPGいなくなった!!いなくなったよ!!」と認識してしまいます。

おまえらマジでなんなんだ。うぜえ。

これからやること

  • レーティングを付けたRAFはLightroomで一時フォルダに退避する

f:id:dabcphoto:20180805062119j:plain

  • 退避したRAFと同名のJPGはバッチファイルで一時フォルダに退避する
  • X RAW STUDIOを使い、一時フォルダでRAW現像をする
  • RAW現像が終わったら、一時退避したJPGを元のフォルダにバッチファイルで戻す
  • X RAW STUDIOが書き出したJPGを一時フォルダで読み込ませ、その後正しいフォルダに移動する

以上


よーし、おじちゃん、頑張っちゃうぞーー!!

実際に作ったバッチファイル(.bat)

ということで、バッチファイル(.bat)ができました。

3つに分けて、処理を分割してます。

f:id:dabcphoto:20180805062212j:plain

①一時フォルダに移すJPGをテキストファイルにリストアップする

LightroomでRAFファイルを一時フォルダに移動します。一時フォルダに移動するのはRAFのみが前提。

JPGを移してもいいけど、面倒くさいのでやめやめ。

「00_filelist.txt」と「XX_move_filelist.txt」というテキストファイルを書き出します。

「00_filelist.txt」には一時フォルダに対比したRAFのリストを書き出します。

「XX_move_filelist.txt」にはRAFの拡張子をJPGに変更したリストを書き出します。

01_listup.bat
@echo off
cd /d %~dp0

dir !X-E3作業用\*.RAF /B /A-D /ON > 00_filelist.txt
rem dir !X-E3作業用\*.JPG /B /A-D /ON > 00_JPG_filelist.txt

copy nul XX_move_filelist.txt

rem 「file.txt」ファイルの内容を読み込みながら繰り返す
for /f %%i in (00_filelist.txt) do (
	call :listup %%i
)

cscript 00.replaceStr.vbs

pause


:listup
	setlocal
	set filename=%1
	set filename_body=%filename:~,21%

	set yyyy=%filename:~,4%
	set mm=%filename:~4,2%
	set dd=%filename:~6,2%
	set dirname=%yyyy%-%mm%-%dd%
	set copy_filename=%filename:~,21%

	forfiles /p %dirname% /m %filename_body%* >> XX_move_filelist.txt

exit /b

↑上のバッチファイルの処理中に、VBScriptを呼び出して処理をする。

Dim objWshShell     ' WshShell オブジェクト
Dim txtFileName

txtFileName = "XX_move_filelist.txt"

Set objWshShell = WScript.CreateObject("WScript.Shell")
If Err.Number = 0 Then
    'WScript.Echo "現在のフォルダは " & objWshShell.CurrentDirectory & " です。"
Else
    WScript.Echo "エラー: " & Err.Description
	break
End If

Const ForReading = 1 
Const ForWriting = 2 
 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile( objWshShell.CurrentDirectory & "\" & txtFileName, ForReading) 
 
Do Until objFile.AtEndOfStream 
    strLine = objFile.Readline 
    strLine = Trim(strLine) 
    If Len(strLine) > 0 Then 
		strLine = Mid(strLine , 2  , len(strLine)-2)
        strNewContents = strNewContents & strLine & vbCrLf 
    End If 
Loop 
 
objFile.Close 
 
Set objFile = objFSO.OpenTextFile(objWshShell.CurrentDirectory & "\" & txtFileName, ForWriting) 
objFile.Write strNewContents 
objFile.Close 

Set objWshShell = Nothing
'msgbox "完了"

②リストアップしたファイルを一時フォルダに退避

リストに書き出したファイルはすべて「yyyymmdd-DSCF0001-XE3.JPG」なので、保存先は「yyyy-mm-dd」というフォルダに入っています。

ということで、保存先からファイルを特定して、作業用の一時フォルダ「!X-E3作業用」に移動することができます。

set filename_body=%filename:~,21%」という行がありますが、これはDSCF0001の文字数から計算していますので、必要に応じて変更する必要があります。

02_move_workFile.bat
@echo off
cd /d %~dp0

rem 「file.txt」ファイルの内容を読み込みながら繰り返す
for /f %%i in (XX_move_filelist.txt) do (
	call :file_move %%i
)

pause

:file_move
	setlocal
	set filename=%1
	set yyyy=%filename:~,4%
	set mm=%filename:~4,2%
	set dd=%filename:~6,2%
	set dirname=%yyyy%-%mm%-%dd%
	set filename_body=%filename:~,21%

	move %dirname%\%filename% !X-E3作業用\
exit /b

③退避した②のファイルを元のフォルダに戻す

Lightroomくんが気付かないように、移動したファイルを元に戻してあげます。

②で書いたとおり、ファイル名から元々のフォルダがわかっているので、作業用の一時フォルダ「!X-E3作業用」から元のフォルダに戻すことができます。

03_return_workFile.bat
@echo off
cd /d %~dp0

for /f %%i in (XX_move_filelist.txt) do (
	call :file_return %%i
	REM	echo %%i
)

pause

:file_return
setlocal
set filename=%1

set yyyy=%filename:~,4%
set mm=%filename:~4,2%
set dd=%filename:~6,2%
set dirname=%yyyy%-%mm%-%dd%

move !X-E3作業用\%filename% %dirname%\

exit /b

おわり

というわけで、誰にもわからせる気がない記事は以上で終わりです。

門外漢なので、無駄な処理があるかも?でもまあ動くからいいや!

全体的になんの話をしているのか知りたい人はこういう本を買ってみるといいかもしれません。

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

関連記事

blog.weekend-photographer.com


続きの需要があるかわからず、時間もないので放置中。
blog.weekend-photographer.com