CPRM対応DVDをiPhoneのカメラロールにコピー

CPRMコピーについて

知り合いなどからHDD DVDレコーダーなどで、テレビ番組などをDVD媒体にコピーして渡される場合などがよくあります。 DVDファイナライズされている場合CPRM形式でDVDです。しかしわたしは、CPRM対応のDVDプレーヤー持ってないしテレビでDVDをみるよりiPhoneなどで移動中に見たほうが時間の節約にもなります。そこで、macOSからCPRMのDVDを動画ファイルに変換してiPhoneのカメラロールに入れる方法をご紹介します。もちろん自分のiPhoneで見るだけで見れば削除します。今回、DVDFabとHandBrakeという2つのアプリを使いました。DVDFabは有料ですが、HandBrakeは無料で利用できます。

MacBookのDVDドライブに、CPRMフォーマットのDVDを入れるとファインダー画面左側は下のようにDVDを認識します。

CPRMフォーマットをDVDが認識
赤枠がCPRMフォーマットのDVDを認識した画面です

ファインダーからDVDを選択し、中身を見るとしたのようなファイル構成です。

CPRMフォーマットDVDをファインダーで参照
CPRMフォーマットDVDをファインダーで参照

DVDの中は、DVD_RTAVフォルダーがあってそのなかに「VR_MANGR.BUP, VR_MANGR.IFO, VR_MOVIE.VRO」の3つのファイルが入っていました。その中で「VR_MOVIE.VRO」という名称のファイルサイズが3GByteなどのいちばん大きなファイルが、動画ファイルです。このVR_MOVIE.VROファイルのままでは動画は見れません。

ここで市販の[DVDFab]というmacOS対応のアプリを使います。

DVDFab起動
DVDFab起動画面

CPRMフォーマットのDVDがドライブに入っている状態でDVDFabを起動すると上のようにすでにDVDが選択されています。画面左下に[save to]と書いている項目があるので[ios]を選び画面右下の[Start]でコピーを開始します。

DVDコピー完了ダイアログ
DVDコピー完了ダイアログ

DVDのコピーが完了すると[Successfully]ダイアログが表示されます。ファインダーの[書類|DVDFab11|Clone]フォルダーに移動すると[DVD_VIDEO_RECORDER.iso]が作成されています。このファイルをクリックします。

完成したisoファイルをクリックする
完成したisoファイルをクリックする

ファインダー左側にisoがマウントされていることが確認できます。その中を見るとDVD_RTAVフォルダがあり、VR_MOVIE.VROファイルも同じように入っています。そのVR_MOVIE.VROをどこかにコピーし、VR_MOVIE.mp4と「名前を変更」します。このままでも「MPlayer OSX Extended」などの動画再生アプリから見れますが「HandBrake」アプリを使ってiPhoneで見れるように変換します。

拡張子VROからMP4に変更確認
拡張子VROからMP4に変更を確認

HandBrakeを起動しVR_MOVIE.mp4ファイルを選択します。

HandBrake画面
HandBrake画面

[Start]ボタンをクリックし変換を待ちます。HandBrake画面右下に書いているフォルダに完成したファイルが保存されます。

完成した動画ファイルをQuickTime Playerで確認できたらAirDropでiPhoneに送信します。送信完了するとiPhoneのカメラロールに入っています。これでCPRMのDVDを、移動中に見ることができました。

Xcode GitHubアカウント追加

Xcodeのアカウント設定に[Source Control Accounts]という項目がありGitHubが設定できます。メニュー[Xcode|Preference…]から[Accounts]画面を開きます。画面左には[Apple IDs]に自分のApple IDが登録されているかと思います。画面の左下に[+]ボタンがついているので [+]ボタンを選択[Select the type of Account you would like to add:]画面リストをスクロールすると[GitHub]が出てきますので[Continue]します。

上のような[Sign in to your GitHub Account]ダイアログが出ます。AccountとTokenを入れるのですがここに入れるトークンは、GitHub側で設定します。設定方法の詳細は、下記URL(doc.github.com)に書いています。

https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token

ブラウザからGitHubにログイン後、右上の自分のアイコン部分をクリックすると下のようなメニューが縦に出てきます。

Settings]をクリックするとセッティング画面に切り替わります。

https://github.com/settings/profile

画面左側にメニューリストが縦で出ています。その中の、下のほうに[Developer settings]があるので選択します。

GitHub AppsOAuth AppsPersonal access tokens]3つの項目があるので「Personal access tokens」を選択します。

Personal access tokens]画面の右側に[Generate new token]ボタンがあるのでクリックしますと、「New personal access token」画面に切り替わります。

Note]に解りやすい名前を入れておいて、[Select scopes]で必要な項目にチェックします。入力が終わったら下のほうに[Generate token]をクリックします。

画面が切り替わり、下のようにトークンが表示されいます。

このトークンと自分のGitHubアカウントを、Xcodeの[AccountsSelect the type of Account you would like to add:]画面[GitHub]で選択した[Sign in to your GitHub Account]ダイアログのAccountとToken項目に入力します。

Sign in]ボタンをクリックし成功すると下のように[Accounts]項目に追加されていることが確認できます。

XcodeGitHubアカウント追加できるとXcodeメニューの[FileSwift PackagesAdd Package Dependency…]でダイアログが出るので、そこでProjectを選択

Next]すると下のようなPackageリストが表示されます。

GitHubから様々なPackageダウンロードし利用することもできるようになります。

SwiftUI EditButton 編集モードに切り替えるボタン

EditButton SwiftUI

SwiftUIでのEditButtonは、Viewの.editModeBinding<EditMode>)を切り替えるためのボタンです。下記はシンプルな実装方法です。

struct EditButtonTest: View {
    var body: some View {
        EditButton()
    }
}

上記のように書くとiOSの画面ど真ん中に[Edit]というボタンが配置されています。実行し[Edit]ボタンをタップすると[Done]に切り替わります。

[Edit|Done]の切り替えを確認する場合、下記のような@Environmentを宣言します。

@Environment(\.editMode) var mode

切り替えを確認する場合上記のmode?.wrappedValueが[.inactive|.transient|.active]で判断できます。

下のようにテキストフィールドを配置し、EditをタップするとTextFieldに書き込みができるように実装してみます。

struct EditButtonTest: View {
    @Environment(\.editMode) var mode
    @State var edit1: String = "ダミー"
    var body: some View {
        VStack{
            HStack{
                Spacer()
                EditButton()
            }
            HStack{
                Text("名前")
                    .padding(.all, 4.0)
                if self.mode?.wrappedValue == .inactive {
                    TextField("Name",text: $edit1).padding(.all, 4.0).disabled(true)
                }
                else {
                    TextField("Name", text: $edit1)
                        .padding(.all, 4.0).border(Color.gray, width: 2)
                    Button(action: {
                        self.edit1 = ""
                    }){
                        Image(systemName: "nosign")
                            .foregroundColor(.red)
                    }
                        
                }
                Spacer()
            }
            
            Spacer()
        }
        .padding(.horizontal)
    }
}

実行すると下のような挙動です。

EditButton SwiftUI