ImgBurnでDVDフォルダをISOファイルにする(VBA, cmd利用)

## はじめに
ImgBurnを使って DVDフォルダ（VIDEO_TSフォルダ）を ISOイメージファイルへ変換する手順について記載します。
また Excel VBA 及びバッチファイル（.bat）で自動化・連続実行できるようにします。

なお使用している ImgBurnのバージョンは 2.5.8.0 で、PCへインストール済みが前提となります。



## ImgBurn初期設定
自動化に必要な ImgBurnの初期設定を行います。


### ボリュームラベルの自動設定
ImgBurnを起動し、画面上部の`Tools`から`Settings...`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317100/2e498530-cbe0-b92c-259b-b73752e576c1.png)

`Build`タブ内の`Page 3`タブで、`Don't Prompt Volume Label`にチェックを入れます。（その下の`Answer 'Yes'`にもチェックを入れる必要がありますが、デフォルトでチェックが入っています）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317100/67723d73-25a3-acb6-a64d-07ba4f25590b.png)

この設定でボリュームラベルが自動設定されますが、手動で設定したい場合はチェックを外してください。
ただし手動で設定する場合は DVDごとに値を決めてやる必要があります。


### (任意) サウンドの無効化
`Sound`タブ内の`Play Success Sound`と`Play Error Sound`のチェックを外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317100/e7b558ea-3391-19be-a3af-b57bc8b3469d.png)


### レイヤーブレークの無効化
`OK`を押して戻ったら、画面内の`Create image file from files/folders`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317100/123a75ad-1906-4d35-1f9c-a7b9c9f18de7.png)

画面右側の`Advanced`タブ内の`Media`タブ内、`Single Layer`の項目で`Profile`を`Custome`に選択し、`Maximum Sectors`の値を`4173824`に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317100/b06a82f5-21a4-28a7-0fa6-0e66d706bdc6.png)

ここではレイヤーブレーク（ブレークポイント、Layer Break Position）の設定を無効化しています。

二層構造の DVDを再生する際に発生するレイヤーブレークの位置を、ImgBurnでは手動で設定して最適化（不自然でない位置に設定し直す）できます。
しかし ISOイメージファイルにする分には無意味である上に、このために都度レイヤーブレークの位置を手動で選択しなければいけないので自動化を阻んでいます。

そこで本設定をすることで、元々二層構造だった DVDであっても一層構造であるように見せることができ、結果レイヤーブレークの設定をスキップできます。[^1]


## ImgBurnのコマンドライン操作
### コマンドライン説明
以下のようにコマンドを使用します。
```bat
ImgBurn.exe /MODE BUILD /BUILDOUTPUTMODE IMAGEFILE /SRC "変換元フォルダのパス\" /DEST "変換先ファイルのパス.iso" /START /CLOSESUCCESS /NOIMAGEDETAILS
```

オプションについて、一つずつ説明します。
+ `/MODE BUILD`：ビルドモードを指定
+ `/BUILDOUTPUTMODE IMAGEFILE`：イメージファイルとして出力させます
+ `/SRC "変換元フォルダのパス\"`：変換させたい DVDフォルダのフルパスを指定します（最後に`\`を入れます）
+ `/DEST "変換先ファイルのパス.iso"`：変換後のファイル名をフルパスで指定します
+ `/START`：自動で動作を開始します（これがないとただ ImgBurnが起動するだけです）
+ `/CLOSESUCCESS`：変換に成功した場合、自動で ImgBurnを終了します（これがないと次のコマンドを実行できません）
+ `/NOIMAGEDETAILS`：DVDの詳細情報の表示をオフにします（これがないと毎回詳細情報が表示され、手動でボタンを押さなければ動作しないようになります）


### コマンドライン例
```bat:imgburn.bat
cd C:\Program Files (x86)\ImgBurn
ImgBurn.exe /MODE BUILD /BUILDOUTPUTMODE IMAGEFILE /SRC "D:\DVD\hoge\" /DEST "D:\DVD\hoge.iso" /START /CLOSESUCCESS /NOIMAGEDETAILS
```



## Excel VBAでバッチファイルを作成する
複数の DVDフォルダを自動でイメージファイル化するために、Excel VBAを用いてバッチファイルを作成します。


### 前提
#### Excelデータの準備
Excelの A列に、A1セルから変換したいフォルダのフルパスを順番に記述します。
フルパスの一括取得方法としては、変換元フォルダを選択した状態で`Shift`キーを押しながら右クリックし、出てきたメニューで`パスのコピー`を選択する方法があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317100/8a2b175d-b4ab-9ba1-f339-58e1a751c92f.png)

もちろんコマンドプロンプトや PowerShell等での一覧取得でも結構です。


#### 変換元フォルダ内の確認
変換元として指定できるフォルダは、`VIDEO_TS`フォルダ自体か`VIDEO_TS`フォルダの親フォルダのみです。
`VIDEO_TS`フォルダから 2階層上を指定すると、ImgBurnが正しく動作しません。
あらかじめ変換元フォルダの中身を確認しておいてください。

【OK】
VIDEO_TS
hoge\VIDEO_TS

【NG】
hoge\hoge2\VIDEO_TS


### Excel VBAを記述する
標準モジュールで以下のように記述します。
Excel VBAの基本的な使い方等については省略します。
```vb:createBat
Sub createBat()

    'batファイル作成(既にある場合は上書き)
    Open "D:\DVD\imgburn.bat" For Output As #1

    'ImgBurn.exeへのパス指定
    Print #1, "cd /d ""C:\Program Files (x86)\ImgBurn"""
    
    Dim i As Long
    Dim path As String
    
    For i = 1 To 100
        path = Cells(i, 1).Value
    
        'データがない場合は繰り返しから抜ける
        If path = "" Then
            Exit For
        End If

        Print #1, "ImgBurn.exe /MODE BUILD /BUILDOUTPUTMODE IMAGEFILE /SRC """ & path & "\""" & " /DEST """ & path & ".iso""" & " /START /CLOSESUCCESS /NOIMAGEDETAILS"
    Next
    
    '一定時間待機した後、自己削除
    Print #1, "cd /d ""C:\Users\hoge"""  'どこでもよいが実行できる位置へ移動する
    Print #1, "timeout /t 10 /nobreak >null"
    Print #1, "del ""%~f0"""
   
    Close #1
    
    MsgBox "Done!"

End Sub
```


### 例
Excelの A列に以下のようにパスを記載します。
|  | A | B |
|:-:|:-:|:-:|
|1  |D:\DVD\hoge   |   |
|2  |D:\DVD\hoge2   |   |
|3  |D:\DVD\hoge3   |   |

この状態で上記 VBAを実行することで、以下バッチファイルが作成されます。
```bat:imgburn.bat
cd /d C:\Program Files (x86)\ImgBurn
ImgBurn.exe /MODE BUILD /BUILDOUTPUTMODE IMAGEFILE /SRC "D:\DVD\hoge\" /DEST "D:\DVD\hoge.iso" /START /CLOSESUCCESS /NOIMAGEDETAILS
ImgBurn.exe /MODE BUILD /BUILDOUTPUTMODE IMAGEFILE /SRC "D:\DVD\hoge2\" /DEST "D:\DVD\hoge2.iso" /START /CLOSESUCCESS /NOIMAGEDETAILS
ImgBurn.exe /MODE BUILD /BUILDOUTPUTMODE IMAGEFILE /SRC "D:\DVD\hoge3\" /DEST "D:\DVD\hoge3.iso" /START /CLOSESUCCESS /NOIMAGEDETAILS
cd /d "C:\Users\hoge"
timeout /t 10 /nobreak >null
del "%~f0"
```

このバッチファイルを実行することで順にImgBurnが実行され、自動で DVDフォルダの ISOイメージ化からバッチファイルの削除まで実施されます。


## 脚注
[^1]:参考：https://forum.imgburn.com/topic/15302-how-to-avoid-ignore-layer-break-prompt/#comment-120399