Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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.

There is 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.

share|improve this question
    
Solutions for any os are OK, I have Windows 7, OS X 10.7.4 and Debian 6 –  Magnetic_dud Oct 3 '12 at 17:17
    
I found this reviews.handbrake.fr/r/55/diff/1 , unfortunately, after many tries, I can't make it compile correctly (I can compile revision 3818, but I can't compile the diff...) –  Magnetic_dud Oct 3 '12 at 22:08

4 Answers 4

up vote 2 down vote accepted
+50

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'
share|improve this answer
    
Awesome! If I also want to change the modification date, I just add Set-ItemProperty -Path $($file[$i]) -Name LastWriteTime -Value $($time[$i]) in the FOR cycle, right? –  Magnetic_dud Nov 14 '12 at 0:35
    
Yes, just make sure you use the UTC version of the time function. That will keep you away from any time zone issue. –  John Siu Nov 14 '12 at 1:18
    
With LastWriteTimeUTC –  Magnetic_dud Nov 14 '12 at 9:22
    
Yes. That is correct :D –  John Siu Nov 14 '12 at 17:44

Another solution for Windows I just found for those who don't want to have to deal with a ton of scripting:

Convert and Date Preserve

Once you download it, the program itself is located in MultipleAviConvDatePreserve\bin\Release\MultipleAviConvDatePreserve.exe

And you can use it with any converter that allows command-line (such as handbrake). Not the easiest program to use, but easier than the posted solution.

Because I had some trouble getting the program to work myself, I thought some specific directions on how to use the program might be helpful.

Open Handbrake (or some command-line enabled video encoder) and setup a file for encode like you normally would (with all the preferences you want) and then add it to the queue. Then open the queue and click the "Queue" button and "Generate Batch Script" as shown in the screen shot below:
Generate Batch Script Then open the batch script in notepad and copy the contents (we will use it later). Next open up MultipleAviConvDatePreserve.exe And click the "Set SCRIPT" button Set SCRIPT
Then paste the contents of the batch script generated by Handbrake into the script text box but replace the source and destination in the script to %source and %dest: Enter script
I couldn't get the RunAsDate.exe to work, but you can try it out - it supposedly makes it so the system date doesn't need to be changed. After this, click OK and return to the main window. Then click the "Select DIR" and choose the directory with the video files you want to convert while preserving the original creation date. Then enter the EXACT (case-sensitive) file extension for the source under radio button "source Extension" after which you should see some files appear in the list (if you don't see any files, then the extension is wrong). Then select the files you want to convert (select them all by clicking the first one and then shift-clicking the last file). Then press "GO!" and everything should be self-explanatory from there.

share|improve this answer
    
It doesn't work for me - I think it can only work in Windows XP because it changes the system date before the conversion (not so safe) –  Magnetic_dud Dec 1 '12 at 14:24
    
I'm using Windows 8 64-bit and it works...the program isn't exactly user friendly. Did you select the video files in the list before you tried to convert? –  Nathan Dec 2 '12 at 1:48
    
I added instructions in case that helps :) –  Nathan Dec 2 '12 at 7:30

You said “creation date”.  If “modification date” is good enough for you, read on:

You didn’t say what OS you’re using.  If it’s *nix, use the touch command:

touch –r old_file new_file ...

sets new_file’s modification date/time to be the same as old_file’s.

This is available in some Unix emulation packages, like Subsystem for UNIX-based Applications (SUA).  ISTR this is a free download from Microsoft.

share|improve this answer
    
To add to that, to my knowledge there is no way to modify ctime, only mtime. Hope that helps. –  UtahJarhead Oct 3 '12 at 15:38
    
modification date is not ok, because almost all video editing software will sort by creation date :( –  Magnetic_dud Oct 3 '12 at 16:44
    
In Linux, ctime is change time, which should always has the same value of mtime (modify time). Ext4 (filesystem) has crtime, which is creation time. However, using debugfs and stat on 2 different systems, I did not get expected result. –  John Siu Nov 10 '12 at 7:37
    
@John: It sounds like your Linux system might be non-standard. On most *nix systems, chmod’ing a file, or creating (or deleting) a hard link to it, will update ctime but not mtime. –  Scott Nov 13 '12 at 23:47

Which OS? There are touch utilities (both command-line and GUI-based) that will allow you to modify the creation, modification and access date of your files.

For example, here's one for Windows (BulkFileChanger):

NirSoft BFC

share|improve this answer
    
Yes, i use this to change manually the date. The problem is that when I have to change 10+ files, it's boring... –  Magnetic_dud Oct 3 '12 at 17:16
    
Like I said above, plenty of other command-line touch utilities as well: Windows recursive touch commands‌​. Plus of course if you want to set the same date/time for multiple files, the program above is not called BulkFileChanger for nothing. :) –  Karan Oct 3 '12 at 17:37

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.