41

I want to use ffmpeg to copy all meta data not associated with core aspects of a video (frame rate, resolution) from one video to another. Is there a simple way to do this with a single command?

5 Answers 5

43

Use -map_metadata.

In this example the global and stream metadata will be copied from in0.mkv. The video and audio streams will be stream copied from in1.mkv:

ffmpeg -i in0.mkv -i in1.mkv -map 1 -c copy \
# copies all global metadata from in0.mkv to out.mkv  
-map_metadata 0 \
# copies video stream metadata from in0.mkv to out.mkv
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from in0.mkv to out.mkv
-map_metadata:s:a 0:s:a \
out.mkv

This will result in something like:

Output #0, matroska, to 'out.mkv':
  Metadata:
    title           : Global Title
    AUTHOR          : Global Author
    Stream #0:0: Video: h264
    Metadata:
      title           : Stream 0 Title
    Stream #0:1: Audio: vorbis
    Metadata:
      title           : Stream 1 Title

By default global metadata is copied from the first input file, so -map_metadata 0 could probably be omitted.

9
  • 4
    If your source video is a .mov file you need to also add the flag -movflags use_metadata_tags or the output video won't contain the metadata. Commented Aug 28, 2019 at 20:55
  • It overwrites the output file.. Output file contains video from the input file now.. I would expect to leave the contents of the output file, just copy the metadata of the input file to output file.
    – hipokito
    Commented Feb 11, 2021 at 21:17
  • @hipokito ffmpeg can't perform in-place editing. A new file must be created, and it will ask you if you want to overwrite any existing files.
    – llogan
    Commented Feb 12, 2021 at 0:09
  • Is map_metadata still required with ffmpeg 4.4 when there is only 1 input file? (For example if you want to optimise mp4 files with movflag +faststart while ensuring all metadata is also copied over tot he new file)?
    – sfxedit
    Commented Oct 20, 2021 at 3:12
  • 1
    @sfxedit No, you don't need -map_metadata for a single file. ffmepg will attempt to copy all metadata. I should update this old answer to make it more clear.
    – llogan
    Commented Oct 20, 2021 at 5:53
3

From the comment in the answer How to make Handbrake preserve capture time / creation time?

A full command line adding the option to copy special tags will be:

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

0

For decoding Flac to AIFF whilst preserving metadata, this answer worked better for me: Covert FLAC to AIFF while saving tags/metadata

0

When using ffmpeg at a file which has metadata (like a title) in its streams, you need to use -map_metadata again, as it will not hold those metadata in the new output

1
  • nope. not right. wrong even. Commented Jan 6 at 2:31
-3

If all you need is the basics (creation date, etc), then touch -r FILE1 FILE2 Will work as a charm coping metadata from FILE1 to FILE2

1
  • 3
    If you read the question, the objective is the video meta data, not the file meta data.
    – fixer1234
    Commented Oct 27, 2016 at 20:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .