Panasonicのビデオカメラで撮影した画像を、製品添付アプリケーションの「HD Writer」を使ってPCにコピーすると、動画ファイルの作成日時と更新日時が、撮影した日ではなくコピーした日時になります。まあ当たり前といえば当たり前なんですが、問題はこの動画をGoogleフォトにアップロードすると、コピー日時が動画の日時になってしまって、書き換えるのが大変ということです。
Googleフォトでは動画ファイルの更新日付を見ているようなので、こいつを書き換えてからアップロードしてやればOKです。カメラによっては(あるいは取り込み方法によっては)ファイル作成日時が撮影日時のままだったりするらしいのですが、今回は「HD Writer」による取り込み時にファイル名が撮影日時になる(2017-10-02_123456.m2tsのように)ことを利用しました。スクリプトでファイルをさらってファイル名から取得した撮影日時をファイルの更新日時にセットします。
動画をコピーする前に「Googleのバックアップと同期」を停止しておいて、動画をコピーしたらコピー先フォルダ名を上記スクリプトに渡して起動してください。スクリプトを適当な名前.jsとして保存して、動画フォルダをドラッグ&ドロップしてやればいいかと。
Googleフォトでは動画ファイルの更新日付を見ているようなので、こいつを書き換えてからアップロードしてやればOKです。カメラによっては(あるいは取り込み方法によっては)ファイル作成日時が撮影日時のままだったりするらしいのですが、今回は「HD Writer」による取り込み時にファイル名が撮影日時になる(2017-10-02_123456.m2tsのように)ことを利用しました。スクリプトでファイルをさらってファイル名から取得した撮影日時をファイルの更新日時にセットします。
var fileExp = /^(\d{4})-(\d{2})-(\d{2})_(\d{2})(\d{2})(\d{2}).m2ts$/;
var objShell = new ActiveXObject("shell.application");
function ProcessFolder(folder)
{
var num = 0;
for (var fc = new Enumerator(folder.Files); !fc.atEnd(); fc.moveNext())
{
var file = fc.item();
var match = fileExp.exec(file.Name);
if (match)
{
++num;
var objFolder = objShell.NameSpace(folder.Path);
var objFolderItem = objFolder.ParseName(file.Name);
var date = match[1] + "/" + match[2] + "/" + match[3];
var time = match[4] + ":" + match[5] + ":" + match[6];
objFolderItem.ModifyDate = date + " " + time;
}
}
for (var fc = new Enumerator(folder.SubFolders); !fc.atEnd(); fc.moveNext())
{
var sub = fc.item();
num += ProcessFolder(sub);
}
return num;
}
if (WScript.Arguments.length == 0)
{
WScript.Echo("フォルダ名を指定してください。");
WScript.Quit(1);
}
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folder;
try
{
folder = fso.GetFolder(WScript.Arguments(0));
}
catch (ex)
{
WScript.Echo(WScript.Arguments(0) + "をフォルダとして開けませんでした。");
WScript.Quit(1);
}
var num = ProcessFolder(folder);
WScript.Echo(num + "個のファイルを処理しました。");
動画をコピーする前に「Googleのバックアップと同期」を停止しておいて、動画をコピーしたらコピー先フォルダ名を上記スクリプトに渡して起動してください。スクリプトを適当な名前.jsとして保存して、動画フォルダをドラッグ&ドロップしてやればいいかと。