撮りためていた動画の分割、一括変換、日時修正をやってみた

ずっと前に撮りためていたビデオの整理をしてみることにした。
前々から整理しなければとは思っていたけど、面倒くさくて放置していたけど、コロナ禍ということもあり、これを機に頑張ってみた。

かなり昔の8ミリビデオで撮った動画については、アナログで劣化やテープ自体の損傷等の心配もあったので、デジタル化(MPEG)だけは済ませていたんだけど、このmpg(ムービークリップ)化したファイルは、iPhoneで直接再生できないし、1本が120分ぐらいとバカでかいファイルになっていた。

なので、昔のビデオを分割&変換する地道な作業を頑張ってみた。

 
まずは、120分のやたらでかいmpgファイルを分割。

と思ったけど、分割する動画編集ソフトが無い。。
動画編集を日々行う訳でないので、できるだけ無料で済ませたい。

ちょっと調べてみると、Windows標準の「フォト」アプリで動画分割できるっぽい。
でも、拡張子mpgファイルは対象外。
ということで、まずは「フォト」アプリが使用できる拡張子mp4に変換してみることに。
(あまり、編集を繰り返すと、画像劣化してしまうので必要最小限に)

 
 

もくじ


 
 

mpgファイルからmp4に変換

MPG(MPEG1、MPEG2)や、AVIファイル等をiPhoneで再生できるMP4ファイルに変換できるソフトを調べてみたけど、以下の2つのソフトが割と使い易かった。
 

  • Leawo 変換スタジオ 7
    5分以内の動画であれば無料で変換(試用)できる。
    一括変換できるので、大量にファイルがある場合に便利。

    1. 「Leawo 変換スタジオ 7」を起動し、「動画変換」をクリック

       

    2. 変換したいファイルを画面にドラッグ&ドロップ

       

    3. リストに追加されるので、「変換」ボタンをクリック

       

     

  • HandBrake
    長い動画でも無料で変換可能。

    1. 「HandBrake」を起動し、変換したいファイルを画面にドラッグ&ドロップ

       

    2. 必要に応じて設定変更し、「Start Encode」で変換

       

     

 
 

動画の分割

ビデオテープ1本(120分とか)に、何か月分もの動画が詰まっているので、これを日付ごとに分割したい。
上記でmp4に変換したファイルを、Windows 10標準の「フォト」アプリで分割する。

  1. MP4(m4v)ファイルを「フォト」で開く

     

  2. 「編集と作成」>「トリミング」メニューを選択

     

  3. 切り取る範囲を選択し、名前を付けて保存

     

 
 

日時の変更

上記のように、変換や分割を行うとファイルの「作成日付」、「更新日時」が変わってしまう。

 
また、「メディアの作成日時」が変換した日時で保存されている場合もある。

 
この状態で、Googleフォトにアップロードすると「メディアの作成日時」や「撮影日時」の順で写真がソートされる。
これらが無い場合は「更新日時」等でソートされるようなので、やっぱり、これら日時は修正しておきたい。

修正したら、これら日時が変わるのは当たり前の話だけど、写真はやっぱり実際撮影した日付順で管理したい。
修正手順は以下の通り。

  1. 修正したいファイルを一括選択し、プロパティを開く

     

  2. 「プロパティや個人情報を削除」をクリック

     

  3. 「◎このファイルから次のプロパティを削除」を選択し、「メディアの作成日時」をチェックして「OK」をクリック

     

  4. ファイルの「作成日時」「更新日時」を「タイムスタンプ変更ツール」で変更する

     

 
※単一ファイルの場合、手順3.で「メディアの作成日時」を正しい日時に変更してもOK。
 
 

この日付修正が意外と厄介。
変換や分割を行うと、日付が分からなくなってしまうケースもある。
そのような場合は、変換や分割前に、ファイル名を日付形式に修正する等工夫が必要。

今回、いろいろ工夫したときに、ちょっとしたシェル、バッチを作成したので以下ご参考までに。
 

ファイル名を変換

「yyyy-MM-dd hh.mm.ss yyyy.mp4」形式のファイル名を「yyyyMMdd_hhmmss.mp4」に一括置換するシェル。
例)
変換前:2005-02-27 00.23.44 2005.mp4
変換後:20050227_002344.mp4

sample1.ps1

$scriptPath = $MyInvocation.MyCommand.Path
$targetFolder = Split-Path -Parent $scriptPath
$itemList = Get-ChildItem $targetFolder;

foreach($item in $itemList)
{
    if(! $item.PSIsContainer)
    {
        $fileName = $item.Name;
        $ext = (Get-ChildItem $fileName).Extension;
        if($ext -ne ".mp4"){
            # 拡張子がmp4以外の場合はエラー
            Write-Host "拡張子が異なります。($fileName)";
            continue; // スキップ
        }

        $baseName = (Get-ChildItem $item.Name).BaseName;
        if($baseName.Length -ne 24){
            # ファイル名(ベース名)が24桁でない場合はエラー
            Write-Host "ファイル名が24桁以外です。($fileName)";
            continue; // スキップ
        }

        $y = $fileName.Substring(0,4);
        $m = $fileName.Substring(5,2);
        $d = $fileName.Substring(8,2);
        $hh = $fileName.Substring(11,2);
        $mm = $fileName.Substring(14,2);
        $ss = $fileName.Substring(17,2);
        Write-Host "${targetFolder}\${y}${m}${d}_${hh}${mm}${ss}.mp4";
        Rename-Item -Path "${targetFolder}\${fileName}" -NewName "${targetFolder}\${y}${m}${d}_${hh}${mm}${ss}.mp4"
    }
}

実行方法

powershell -f sample1.ps1

 
 

mp4ファイルの更新日時を一括置換

名前が「yyyyMMdd_hhmmss.mp4」形式のファイルについて、作成日時、変更日時、アクセス日時を、一括変換するためのバッチファイルを生成する。
変換は「タイムスタンプ変更ツール」を使用する。

sample2.ps1

$scriptPath = $MyInvocation.MyCommand.Path
$targetFolder = Split-Path -Parent $scriptPath
$batFile = "タイムスタンプ一括置換.bat";
$itemList = Get-ChildItem $targetFolder;

if (Test-Path $batFile) {
    Remove-Item $batFile;
}
foreach($item in $itemList)
{
    if(! $item.PSIsContainer)
    {
        $fileName = $item.Name;
        $ext = (Get-ChildItem $fileName).Extension;
        if($ext -ne ".mp4"){
            # 拡張子がmp4以外の場合はエラー
            Write-Host "拡張子が異なります。($fileName)";
            continue; // スキップ
        }

        $baseName = (Get-ChildItem $item.Name).BaseName;
        if($baseName.Length -ne 15){
            # ファイル名(ベース名)が15桁でない場合はエラー
            Write-Host "ファイル名が15桁以外です。($fileName)";
            continue; // スキップ
        }

        $y = $fileName.Substring(0,4);
        $m = $fileName.Substring(4,2);
        $d = $fileName.Substring(6,2);
        $hh = $fileName.Substring(9,2);
        $mm = $fileName.Substring(11,2);
        $ss = $fileName.Substring(13,2);
        Write-Host "${fileName}  ${y}/${m}/${d} ${hh}:${mm}:${ss}";

        Write-Output "C:\temp\ChgTime.exe ${targetFolder}\${fileName} ""${y}/${m}/${d} ${hh}:${mm}:${ss}"" ""${y}/${m}/${d} ${hh}:${mm}:${ss}"" ""${y}/${m}/${d} ${hh}:${mm}:${ss}""" | Add-Content $batFile -Encoding Default
    }
}
Write-Output "pause" | Add-Content $batFile -Encoding Default

実行方法

powershell -f sample2.ps1

実行すると、”タイムスタンプ一括置換.bat”が作成される。
C:\temp配下にタイムスタンプ変更ツール(ChgTime.exe)を用意しておき、このバッチファイルを実行。

タイムスタンプ一括置換.bat

すると、タイムスタンプが一括変更される。
 

ちょっと苦しいけど、これで日時の変更は完了。

 
 

もう1つおまけ。

ファイル名を変更日時に一括置換

*.MPGファイルのファイル名を、更新日時の名前に一括変換するシェル。

Before After

 

chgFileName.ps1

# ファイル名をファイル変更日時形式の名前に一括置換

# 対象フォルダ(カレントパス)
$targetFolder = Convert-Path .

# 対象ファイルの拡張子
$targetExt = ".MPG"

# 対象フォルダ内の対象拡張子のファイルを一括処理
foreach($item in (Get-ChildItem $targetFolder))
{
    if($item.Extension -eq $targetExt){
        # ファイル更新日時をファイル名にする
        $fileName = '{0:yyyyMMdd_HHmmss}' -f $item.LastWriteTime + $item.Extension

        # ファイル名変更
        Rename-Item -Path $item.Name -NewName $fileName

        Write-Host ($item.Name + ' ⇒ ' + $fileName)
    }
}

実行方法

powershell -f chgFileName.ps1

 
 
 
 

と、まぁ、分割したり、変換したり、撮影日時やファイル日時、ファイル名変更したり、いろいろとあって想像していたより大変だった。

Googleフォトに保管しておけば、iPhoneが見えないファイルも勝手に変換して見えるようにしてくれるし、日付のソートとかも割と簡単にできるし便利だなぁーと思う。

あと、前にNASよりも簡単に写真&動画を管理できる「おもいでばこ」を買ったことがあったけど、これもアリかも知れない。

 
 

全力通販で探す。
おもいでばこ

 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


*