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.

Handbrake is an awesome video compression tool, but it doesn't seem to preserve the original capture time after a video is compressed. Any idea how to fix this?

share|improve this question
    
@slhck Yes I mean Creation Time. I use Lightroom to manage my videos and after compression, the Capture/Creation time becomes Modified Time. –  pixelfreak Dec 23 '12 at 22:08
add comment

3 Answers

You can copy the existing metadata from one file to another without needing to re-encode the video using FFmpeg. It basically takes one second. To do this, let's assume three files:

  • in.mp4 – the original file before conversion
  • out.mp4 – the file after Handbrake conversion
  • fixed.mp4 – the file with "corrected" metadata

The FFmpeg command to copy the complete metadata record to the new file would then be:

ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4

Explanation of syntax:

To break it down, this does the following:

  • Take two input files (in.mp4 and out.mp4), which are assigned the IDs 0 and 1, respectively.
  • Map only the video/audio/subtitle streams from file 1 to the output (-map 1), so we take the bitstreams that are already converted
  • Map only the metadata from file 0 to the output (-map_metadata 0)
  • Use the copy codec (-c copy) to copy all the bitstreams instead of re-encoding the video.

After that, you could obviously rename fixed.mp4 to out.mp4.


Proof:

As an example, here's part of the metadata record of my original file:

$ mediainfo in.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19

Here's the file after Handbrake conversion:

$ mediainfo out.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-12-24 11:39:35

Here's the final file after mapping the metadata:

$ ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4
[…]

$ mediainfo fixed.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19    

If you want to do all with FFmpeg:

Actually, you don't really need to use Handbrake if you can use FFmpeg, which Handbrake relies on anyway. In the simplest case you can do your conversion like this:

ffmpeg -i in.mp4 -c:v libx264 -crf 23 -c:a libfaac -q:a 100 -map_metadata 0 out.mp4

This will convert the input with the x264 encoder and FAAC audio to an output file, copying the original metadata. In order to change the quality of the output, you can:

  • Change the CRF value for video. Lower means better quality. 23 is default, and anything below 18 will probably be visually lossless.
  • Change the Q parameter for audio. Higher means better, and 100% is the default.

Read the x264 encoding guide on the FFmpeg wiki for more, and check our our Super User blog entry about FFmpeg for some general guides and links to useful answers.

share|improve this answer
    
Wow, that's a cool workaround, looks a bit daunting though, I wish Handbrake does this behind-the-scene. Thanks! –  pixelfreak Dec 28 '12 at 18:31
add comment
up vote 1 down vote accepted

I found an easier way to do this, using a different software called Adapter: http://www.macroplant.com/adapter/

It doesn't have all the advanced settings like HandBrake but it does the job (also using ffmpeg) and retains the metadata I need.

share|improve this answer
    
I don't think Adapter is able to do this. I've just tested the newest version and can't find the setting for retaining metadata anywhere. Additionally, it doesn't seem to convert all video file types, such as MTS, etc. –  jjj Jul 5 at 11:35
add comment

Unfortunately it seems handbrake can't do it on its own, but similarly to the ffmpeg example, the timestamps can be copied from the original after compression by using the touch unix command:

touch -r MVI_1234.MOV compressed_MVI_1234.m4v

this will set the timestamp on the compressed file to the same as the given reference file.

share|improve this answer
    
It will set the timestamp for the file, yes, but only in the filesystem. The EXIF data will not have the correct "Date/Time Original" timestamp. –  Stephen Schrauger Jan 15 at 18:40
add comment

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.