(Batch) converting a video while keeping the original time stamp/creation date

batchtimestampvideo conversion

I need an easy way to convert videos to h264 while keeping the original creation date.

Right now I'm doing it manually (encode, then edit the date), but it's a super boring task to do when I have 10+ videos.

Is there a way to do it automatically?

A conversion program with a "keep original file date" option, a batch, a script: i'm open to any solution on any OS.

Best Answer

TESTING Copy your video directory to a new directory, then follow instruction below.

PowerShell Script

PowerShell come with Windows 7, no download needed. (Start->All Programs->Accessories->Windows PowerShell).

Start PowerShell as administrator.

You have to do following for the first time before you can run any script(you only have to do it once)

Set-ExecutionPolicy RemoteSigned

Answer "Y".

Put following 2 scripts in your video directory. Open PowerShell and cd to your video directory. .ps1 is PowerShell script extension.

SaveTime.ps1 (before video conversion)

Save following script as SaveTime.ps1 in your video directory. Run this script in PowerShell before your video conversion.

The script will create OldTime-record.ps1 in the same directory.

The script WILL NOT OVERWRITE OldTime-record.ps1. It will only append to the end if the file already exist.

So no worry if you run it by accident and losing your original time-stamp. Just use notepad to remove the extra lines. I added an example of this situation at the end.

# SaveTime.ps1 - Start 
$file = get-item *

write-output "`$file = New-Object string`[`] $($file.count)" >> OldTime-record.ps1
write-output "`$time = New-Object string`[`] $($file.count)" >> OldTime-record.ps1

$time = New-Object string[] $file.count

for ($i = 0; $i -lt $file.count; $i++) {
    write-output "`$file`[$i`]=`'$($file[$i].fullname)`'" >> OldTime-record.ps1
    write-output "`$time`[$i`]=`'$($file[$i].CreationTimeUTC.tostring('o'))`'" >> OldTime-record.ps1
}
# SaveTime.ps1 - End

OldTime.ps1 (after video conversion)

Save following script as OldTime.ps1 in your video directory. Run this script in PowerShell after video conversion. This script will read OldTime-record.ps1 and change file creation time accordingly.

# OldTime.ps1 - Start
. .\OldTime-record.ps1

for($i = 0; $i -lt $file.count; $i++) {
    write-output "$($file[$i])"
    write-output "$($time[$i])"
    Set-ItemProperty -Path $($file[$i]) -Name CreationTimeUTC -Value $($time[$i])
}
# OldTime.ps1 - End

Oldtime-record.ps1

This file hold file name and creation time records. Following shows what it look like if you open it in notepad.

$file = New-Object string[] 9
$time = New-Object string[] 9
$file[0]='E:\Downloads\test\New Folder'
$time[0]='2012-11-13T03:11:11.4504830Z'
$file[1]='E:\Downloads\test\file1'
$time[1]='2012-11-10T01:12:14.6126918Z'
$file[2]='E:\Downloads\test\file2'
$time[2]='2012-11-10T01:12:14.6646918Z'
$file[3]='E:\Downloads\test\file3'
$time[3]='2012-11-10T01:12:14.7276918Z'
$file[4]='E:\Downloads\test\cover.jpg'
$time[4]='2012-11-10T01:12:14.7886918Z'
$file[5]='E:\Downloads\test\OldTime.ps1'
$time[5]='2012-11-13T05:22:18.2124830Z'
$file[6]='E:\Downloads\test\SaveTime.ps1'
$time[6]='2012-11-13T05:44:22.8514830Z'
$file[7]='E:\Downloads\test\test.ps1'
$time[7]='2012-11-13T03:26:28.7084830Z'
$file[8]='E:\Downloads\test\test.time.ps1'
$time[8]='2012-11-13T05:32:51.8204830Z'

Following is what happen if you run SaveTime.ps1 by accident. It just append the new records at the end. To fix it, just delete all lines starting from the second occurrence of $file = New-Object string[].

$file = New-Object string[] 9
$time = New-Object string[] 9
$file[0]='E:\Downloads\test\New Folder'
$time[0]='2012-11-13T03:11:11.4504830Z'
$file[1]='E:\Downloads\test\file1'
$time[1]='2012-11-10T01:12:14.6126918Z'
$file[2]='E:\Downloads\test\file2'
$time[2]='2012-11-10T01:12:14.6646918Z'
$file[3]='E:\Downloads\test\file3'
$time[3]='2012-11-10T01:12:14.7276918Z'
$file[4]='E:\Downloads\test\cover.jpg'
$time[4]='2012-11-10T01:12:14.7886918Z'
$file[5]='E:\Downloads\test\OldTime.ps1'
$time[5]='2012-11-13T05:22:18.2124830Z'
$file[6]='E:\Downloads\test\SaveTime.ps1'
$time[6]='2012-11-13T05:44:22.8514830Z'
$file[7]='E:\Downloads\test\test.ps1'
$time[7]='2012-11-13T03:26:28.7084830Z'
$file[8]='E:\Downloads\test\test.time.ps1'
$time[8]='2012-11-13T05:32:51.8204830Z'
$file = New-Object string[] 11
$time = New-Object string[] 11
$file[0]='E:\Downloads\test\New Folder'
$time[0]='2012-11-13T03:11:11.4504830Z'
$file[1]='E:\Downloads\test\file1'
$time[1]='2012-11-10T01:12:14.6126918Z'
$file[2]='E:\Downloads\test\file2'
$time[2]='2012-11-10T01:12:14.6646918Z'
$file[3]='E:\Downloads\test\file3'
$time[3]='2012-11-10T01:12:14.7276918Z'
$file[4]='E:\Downloads\test\cover.jpg'
$time[4]='2012-11-10T01:12:14.7886918Z'
$file[5]='E:\Downloads\test\new  3.txt'
$time[5]='2012-11-13T06:47:05.4784830Z'
$file[6]='E:\Downloads\test\OldTime-record.ps1'
$time[6]='2012-11-13T05:50:11.7044830Z'
$file[7]='E:\Downloads\test\OldTime.ps1'
$time[7]='2012-11-13T05:22:18.2124830Z'
$file[8]='E:\Downloads\test\SaveTime.ps1'
$time[8]='2012-11-13T05:44:22.8514830Z'
$file[9]='E:\Downloads\test\test.ps1'
$time[9]='2012-11-13T03:26:28.7084830Z'
$file[10]='E:\Downloads\test\test.time.ps1'
$time[10]='2012-11-13T05:32:51.8204830Z'
Related Question