HDVビデオを撮影日時ごとにファイル分割してMPEG(m2t)で保存する

miniDVビデオのバックアップ方法についてはこちらのブログにまとめましたが、今回はHDVビデオです。


HDVビデオはDVビデオ形式から現在主流のAVCHDビデオ形式になる過渡期に主流となったビデオ形式です。720x480のDVビデオに対して、画素数は1440x1080とハイビジョン並みになっていますが、録画方式はDVと同じminiDVテープを使います。

現在のフルHDの1920x1080と比較すると劣るものの、1440x1080というのは現在の地上波デジタル放送と同じなので、画質はDVよりも向上されて非常にクリアになっています。

HDVとDVの比較

minDVのときは、DV-AVI形式で保存すれば、撮影日時の情報も保存されるので便利なこと、自動分割で取り込んだファイルは、Mediainfoとバッチファイルを組み合わせると自動的にファイル名と作成日時を撮影日時に合わせてくれる便利な方法があることを紹介しました。

しかし撮影日時に関してはHDVは注意が必要です。

HDVをなるべく劣化のない状態でテープから取り込もうとすると、保存方式はmpg(MPEG)となります。ところがこのmpg方式は、aviと違って撮影日時を保存するような領域を持っていません(ファイルの属性としての作成日時と更新日時は保存できますが)。

これは、MPEGのファイルフォーマットがAVIのようなコンテナ方式のファイルフォーマットと異なることが原因です。ちょうどWAVファイルがMP3やFLACと異なり楽曲情報を保有していないのと似た関係です。

したがって、mpgで取り込む場合は、ビデオを取り込む時点で撮影日時もあわせて取り込むことができるソフトが必要となります。

これができるのは、PowerDirectorやVideoStudioProといった市販のビデオ編集ソフトは機能を持っていません。

PowerDirectorやVideoStudioProで、HDVを撮影日時情報を残したまま取込みをするのなら、HDVからDV変換を行ってDV-AVI形式で保存するしかありません。

この場合は、送り側のカムコーダの設定をDV変換「入」にする必要があります。DV-AVI形式なので、記録される方式はDVと全く同じです。したがって画素数も720x480に少なくなります。

HDVをmpgで取り込んだ場合と、DV変換して取り込んだ場合の画質比較をしてみました。

DV形式

HDV形式

拡大してみると、やはり1440x1080と画素数で勝るHDV形式のほうが細かい部分がはっきりとしていることがわかりました。

唯一、撮影日時情報を残したまま取込みができるのが、こちらのサイトで紹介されているフリーのHDVハイビジョン取り込みソフト HDVSplitだけです。

PlayMemoriesHomeもHDVのシーン自動分割取込みには対応しているのですが、残念ながら撮影日時情報ではなく、取り込み日時がファイル名になってしまうため、いつ録画したものなのか記録することができません。

HDVSplitは、取り込む際に、自動的にシーンの検出とファイル分割を行い、ファイル名を撮影日時にしてくれます。

HDVSplitのダウンロードはこちらです(ver.0.77 static beta)。

HDV SPlit

HDVSplitは2005年10月ごろに開発が始まったようですが、現在はその開発はストップしており、最後のバージョンは0.77 betaです。ちなみにWindows10でも問題なく動作します。

HDVSplitで取り込み中

注意点としては、HDVSplitのキャプチャ画面を表示するためには、予めffdshowをインストールしてMPEG2のデコーダをインストールしておく必要があります。

ffdshowではビデオ設定でMPEG2はデフォルトが「無効」となっているので、それを「有効」に変更する必要があります。

HDVSplitのPreviewにチェックマークを入れると、上の写真のように、キャプチャ中の動画(カブトムシの画面)が画面に現れます。

HDV Splitを使ってビデオの取込みを行うと、いくつかの細かい点でマニュアル作業が必要となってきます。

まず、原因は不明なのですが、フレームドロップ(取り込み情報の欠如)が発生することがあります。発生したファイルを再生してみると、動作が一瞬カクつくところがあったりします。フレームドロップが発生した場合には、再度同じ場所を取込み直すとちゃんと正常に取込みができる場合があります。

もうひとつ、テープに無録画部分が続くと、HDV Splitは取り込み動作を自動停止してしまいます。その仕様自体は良いのですが、問題は、その無録画部分の長さがたったの3秒くらいで停止してしまい、長さの変更もできないことです(PlayMemoriesHomeでは10秒となっています)。

テープの取込みを開始して1時間経過して見に行ったら最初の数分で止まっていた、なんてことが発生します。

ここらへんは完全に自動で取込みができないのでもどかしい部分ではあります。

そして、HDV Splitでシーン分割されたMPEGファイル(拡張子は.m2t)が撮影日時のファイル名となって保存されます。

細かい点ですが、FileNameを指定しないといけないようなので、「00-」と指定すると名前の先頭に00-がつきます。00-はキャプチャ後にFlexible Renamerで除去します。

HDVSplitは素晴らしいソフトなのですが、取り込んだファイルの作成日時と更新日時は、撮影日時ではなく、取り込んだ日時になってしまいます。

このままではWindows Liveフォトギャラリーのような動画管理ソフトで撮影日時順に管理することができません。

そこで、ファイル名に含まれている日時の情報から、ファイルの作成日時/更新日時を変更できる方法を模索しました。

汎用性の高いフリーソフトのFlexible Renamerではできないことがわかり、ネットを検索したところ、もっちーさんのこちらのサイトに、「ファイル名をもとにタイムスタンプを変更するVBS」を見つけました!

このVBSは、ファイル名がYYMMDD-hhmmssで始まるファイルの更新日をファイル名に合わせて自動で書き換えることができるスクリプトです。使い方は対象のファイルをVBSファイルにドラッグアンドドロップするだけです。

HDVSplitのファイル名は、YYMMDD-hhmmssではなくYYYY_MM_DD-hh_mm_ssとなっているので、この形式に合わせてVBSを改変してみました。また、ついでに一括変換のためにファイルごとに確認ダイアログが出るのは面倒なので、一括変換終了時に「終了しました」とメッセージが出る形に変えました。

改変したものが以下です。
--------------------------------------------------------------------------------
If WScript.Arguments.Length = 0 Then
    strMsg = "更新日時を変更したいファイルを、このアイコンにドラッグ&ドロップしてください。" & vbLf & vbLf & _
             "なおファイル名の先頭がYYYY_MM_DD-hh_mm_ss形式になっている必要があります。"
    MsgBox strMsg, vbOKOnly + vbInformation, "使い方"
Else
    Set FSO = CreateObject("Scripting.FileSystemObject")
    For k = 0 To WScript.Arguments.Count() - 1
        strFile = WScript.Arguments.Item(k)
        If FSO.FileExists(strFile) Then
            Set objFile = FSO.GetFile(strFile)
            strPathName = objFile.ParentFolder             'フォルダ名
            strFileName = objFile.Name                     'ファイル名
            strCurrentDateTime = objFile.DateLastModified  '現在の更新日時
            strYY = Mid(strFileName, 3, 2)
            strMM = Mid(strFileName, 6, 2)
            strDD = Mid(strFileName, 9, 2)
            strHor = Mid(strFileName, 12, 2)
            strMon = Mid(strFileName, 15, 2)
            strSec = Mid(strFileName, 18, 2)
            strNewDateTime = "20" & strYY & "/" & strMM & "/" & strDD & " " & strHor & ":" & strMon & ":" & strSec
            If IsDate(strNewDateTime) Then
                    With CreateObject("Shell.Application")
                        With .Namespace(strPathName)
                            .ParseName(strFileName).ModifyDate = strNewDateTime
                        End With
                    End With
            Else
                    strMsg = "ファイル名が不正です。" & vbLf & vbLf & _
                             "ファイル名の先頭がYYYY_MM_DD-hh_mm_ss形式になっている必要があります。"
                    MsgBox strMsg, vbOKOnly + vbInformation, "エラー"
            End If
        Else
            MsgBox "ファイルではありません", vbOKOnly + vbInformation, "エラー"
        End If
    Next
    MsgBox "処理が終了しました", vbOKOnly + vbInformation, "終了"
End If
--------------------------------------------------------------------------------

[使い方]
(イ) 下記VBSのコードをテキストファイルに貼り付け、拡張子を.vbs として適当な名前で保存する(例えばfoo.vbsとか)。保存場所はどこでも構わない。
(ロ) (イ)で作成したvbsファイルのアイコンに、更新日時を変更したいファイルをドラッグ&ドロップすると、③の機能が実行される。複数ファイルの一括処理可能。
(ハ) sendtoフォルダに(イ)で作成したvbsファイルをコピーし、右クリック→送るメニューからファイルを渡すことも可能。

これでファイルの更新日時を撮影日時に変更することができるようになりました。複数ファイルの一括処理も可能なので、大量のファイルも一気に処理できます。

しかし、この方法でもまだファイルの作成日時を撮影日時に変更することができません。

WindowsLiveフォトギャラリーのファイル管理では、ファイルの作成日時の順序で日付ソートをするので、作成日時を撮影日時に変更する必要があります。

理想的には、上記のVBAを改変して作成日時を撮影日時に変更するようにできれば良いのですが、こちらのサイトによると、Shell.Application は更新日時の変更だけで、それ以外の作成日時などは変更できません(FileSystemObject や VBA の標準機能にはそもそも日時を変更する機能はありません)。

手間が増えますが、作成日時を撮影日時に変更するためには、前述のFlexible Renamerを使うのが一番現実的のようです。

Flexible Renamerはこちらからダウンロードできます。

起動して「属性」タブを選択、タイムスタンプを「揃える」を選択し、「元となる日時」を「更新日時」、「適用先」を「作成日時」にチェックボックスします。

Flexible Renamer(日時変更前)

最下段の「設定開始」ボタンを押すと、一括で作成日時が撮影日に変更されます。

Flexible Renamer(日時変更後)

これで無事、DVに加えてHDVのテープもHDDに保存して撮影日時ごとにライブラリ管理することができるようになりました!

Windows Live フォトギャラリーでライブラリ管理が可能に

ちなみに、Windows Live フォトギャラリーでサムネイル表示されない場合は、まず通常のエクスプローラでサムネイル表示するか確認すると原因が特定できます。エクスプローラでもサムネイル表示されない場合は、縮小表示のキャッシュを一度クリアするか、k-lite media codecのようなデコーダをインストールすると解決します。

私はWindows Live フォトギャラリーを利用して、過去15年間に撮りためた子供たちの成長記録を、時系列で管理することができるようになりました。

DV, HDV, AVCHD, MP4と記録メディアやフォーマットが異なっていても、時系列で統括してサムネイル表示で管理ができて大変便利です。

取り溜めてあった200本以上のminiDVテープを時系列でライブラリ化するのは予想以上に時間がかかりました。また、miniDVテープを撮影時間情報と一緒に取り込むという一見簡単に思えることが、実は複雑な手順を踏まなければならないこともわかりました。

まとめると、

1. DVの場合:PlayMemoriesHomeでシーン分割取込み後、beyondさん作成のMediaInfo/バッチファイルでファイル名を一括変換
2. HDVの場合:HDVSplitでシーン分割取込み後、(先頭の00-をFlexibleRenamerで除去したあと)もっちーさん作成のVBSを改変したもの(上記)で更新日時を一括変換、その後FlexibleRenamerで作成日時を一括変換

となります。

それにしてもVideoStudioX8やPowerDirector12といった最新のビデオ編集ソフトウェアで撮影日時を保持して取り込むという基本的な機能がサポートされていないのは大変残念です。

過去に撮り溜めたminiDVテープをバックアップすることもなくそのまま放置していると、やがて紛失したりテープの劣化で再生できなくなってしまうことも考えられます。それを避けるためにもバックアップは簡単にできれば良いのですが、現状では上記の方法を取るしか手はなさそうです。

(おわり)

にほんブログ村 その他趣味ブログ ビデオ撮影・編集へ
にほんブログ村

コメント

  1. HDVでもPlayMemoriesHomeでシーン分割取込み後、beyondさん作成のMediaInfo/バッチファイルでファイル名を一括変換することができました.
    DVの場合は,[String] $mediaInfoArg = " --Inform=General;%Recorded_Date%"で取得しますが,HDVでは[String] $mediaInfoArg = " --Inform=General;%Encoded_Date%"で取得できます.
    ただ,フォーマットとして「UTC 」が先頭につくので,それを削除する必要があります.
    #先頭「UTC 」を削除
    $recordedTime = $recordedTime -replace "UTC ","";

    ただ,残念ながらiLinkで取り込みができるPlayMemoriesHome5.5.01は2020年3月末で公開が終了しました.

    返信削除
    返信
    1. 情報共有をありがとうございます。iLinkで取り込みができるPlayMemoriesHomeは終了ですか。。。ソニーもついにiLinkサポートを終了ということで、時代の流れを感じます。

      削除

コメントを投稿