Retrieving and Saving media metadata using FFmpeg

166,123

Solution 1

You can save the global metadata to a text file using the -f ffmetadata option as follows:

ffmpeg -i in.mp4 -f ffmetadata in.txt

If you also need metadata from the video and audio streams (for example if the global metadata does not contain the creation time) use:

ffmpeg -i in.mp4 -c copy -map_metadata 0 -map_metadata:s:v 0:s:v -map_metadata:s:a 0:s:a -f ffmetadata in.txt

For details, see Metadata section in ffmpeg documentation.

For restoring metadata from a file see https://stackoverflow.com/a/50580239/2235831.

Solution 2

I prefer using exiftool which offers me more outputs than ffmpeg. take a example (a file from iphone):

exiftool IMG_0014.MOV >a.txt

the output is


ExifTool Version Number         : 8.60
File Name                       : IMG_0014.MOV
Directory                       : .
File Size                       : 19 MB
File Modification Date/Time     : 2013:07:19 12:03:22-10:00
File Permissions                : rw-r--r--
File Type                       : MOV
MIME Type                       : video/quicktime
Major Brand                     : Apple QuickTime (.MOV/QT)
Minor Version                   : 0.0.0
Compatible Brands               : qt
Movie Data Size                 : 19979709
Movie Header Version            : 0
Modify Date                     : 2013:07:19 22:03:21
Time Scale                      : 600
Duration                        : 7.27 s
Preferred Rate                  : 1
Preferred Volume                : 100.00%
Preview Time                    : 0 s
Preview Duration                : 0 s
Poster Time                     : 0 s
Selection Time                  : 0 s
Selection Duration              : 0 s
Current Time                    : 0 s
Next Track ID                   : 3
Track Header Version            : 0
Track Create Date               : 2013:07:19 22:03:13
Track Modify Date               : 2013:07:19 22:03:21
Track ID                        : 1
Track Duration                  : 7.27 s
Track Layer                     : 0
Track Volume                    : 0.00%
Image Width                     : 1920
Image Height                    : 1080
Graphics Mode                   : ditherCopy
Op Color                        : 32768 32768 32768
Compressor ID                   : avc1
Source Image Width              : 1920
Source Image Height             : 1080
X Resolution                    : 72
Y Resolution                    : 72
Compressor Name                 : H.264
Bit Depth                       : 24
Video Frame Rate                : 27.011
Camera Identifier               : Back
Frame Readout Time              : 28512 microseconds
Matrix Structure                : 1 0 0 0 1 0 0 0 1
Media Header Version            : 0
Media Create Date               : 2013:07:19 22:03:13
Media Modify Date               : 2013:07:19 22:03:21
Media Time Scale                : 44100
Media Duration                  : 7.31 s
Media Language Code             : und
Balance                         : 0
Handler Class                   : Data Handler
Handler Vendor ID               : Apple
Handler Description             : Core Media Data Handler
Audio Channels                  : 1
Audio Bits Per Sample           : 16
Audio Sample Rate               : 44100
Audio Format                    : chan
Model                           : iPhone 4S
Software Version                : 6.1.3
Create Date                     : 2013:07:20 08:03:13+10:00
Make                            : Apple
Handler Type                    : Metadata Tags
Make (und-AU)                   : Apple
Creation Date (und-AU)          : 2013:07:20 08:03:13+10:00
Software (und-AU)               : 6.1.3
Model (und-AU)                  : iPhone 4S
Avg Bitrate                     : 22 Mbps
Image Size                      : 1920x1080
Rotation                        : 90

while if i use ffmpeg

 ffmpeg -i IMG_0014.MOV -f ffmetadata metadata.txt

the output is

;FFMETADATA1
major_brand=qt  
minor_version=0
compatible_brands=qt  
date-eng=2013-07-20T08:03:13+1000
encoder=6.1.3
encoder-eng=6.1.3
date=2013-07-20T08:03:13+1000

Solution 3

You can use ffprobe (which comes with ffmpeg) for gathering information about multimedia files. For information about overall content of a multimedia file use

ffprobe -show_streams -show_format DV06xx.avi 

and for information about each single frame in a video file use

ffprobe -show_frames DV06xx.avi 

However, ffprobedoes not retrieve as much information as my favorite tool, Mediainfo, does, e.g., 'ffprobe' does not display the time code of first frame of the video (although the man page claims otherwise) or the recording date.

If you run mediainfo on the command line, you can even request output in XML format:

mediainfo --OUTPUT=XML DV06xx.avi 

In my example the output is:

<?xml version="1.0" encoding="UTF-8"?>
<Mediainfo version="0.7.63">
<File>
<track type="General">
<Complete_name>DV06xx.avi</Complete_name>
<Format>AVI</Format>
<Format_Info>Audio Video Interleave</Format_Info>
<Commercial_name>DVCPRO</Commercial_name>
<Format_profile>OpenDML</Format_profile>
<File_size>13.3 GiB</File_size>
<Duration>1h 2mn</Duration>
<Overall_bit_rate_mode>Constant</Overall_bit_rate_mode>
<Overall_bit_rate>30.5 Mbps</Overall_bit_rate>
<Recorded_date>2004-03-28 15:42:35.000</Recorded_date>
</track>

<track type="Video">
<ID>0</ID>
<Format>DV</Format>
<Commercial_name>DVCPRO</Commercial_name>
<Codec_ID>dvsd</Codec_ID>
<Codec_ID_Hint>Sony</Codec_ID_Hint>
<Duration>1h 2mn</Duration>
<Bit_rate_mode>Constant</Bit_rate_mode>
<Bit_rate>24.4 Mbps</Bit_rate>
<Encoded_bit_rate>28.8 Mbps</Encoded_bit_rate>
<Width>720 pixels</Width>
<Height>576 pixels</Height>
<Display_aspect_ratio>4:3</Display_aspect_ratio>
<Frame_rate_mode>Constant</Frame_rate_mode>
<Frame_rate>25.000 fps</Frame_rate>
<Standard>PAL</Standard>
<Color_space>YUV</Color_space>
<Chroma_subsampling>4:2:0</Chroma_subsampling>
<Bit_depth>8 bits</Bit_depth>
<Scan_type>Interlaced</Scan_type>
<Scan_order>Bottom Field First</Scan_order>
<Compression_mode>Lossy</Compression_mode>
<Bits__Pixel_Frame_>2.357</Bits__Pixel_Frame_>
<Time_code_of_first_frame>00:00:01:10</Time_code_of_first_frame>
<Time_code_source>Subcode time code</Time_code_source>
<Stream_size>12.6 GiB (94%)</Stream_size>
<Encoding_settings>ae mode=full automatic / wb mode=automatic / white balance= / fcm=manual focus</Encoding_settings>
</track>

<track type="Audio">
<ID>1</ID>
<Format>PCM</Format>
<Format_settings__Endianness>Little</Format_settings__Endianness>
<Format_settings__Sign>Signed</Format_settings__Sign>
<Codec_ID>1</Codec_ID>
<Duration>1h 2mn</Duration>
<Bit_rate_mode>Constant</Bit_rate_mode>
<Bit_rate>1 536 Kbps</Bit_rate>
<Channel_s_>2 channels</Channel_s_>
<Sampling_rate>48.0 KHz</Sampling_rate>
<Bit_depth>16 bits</Bit_depth>
<Stream_size>688 MiB (5%)</Stream_size>
<Alignment>Aligned on interleaves</Alignment>
<Interleave__duration>40 ms (1.00 video frame)</Interleave__duration>
<Interleave__preload_duration>40 ms</Interleave__preload_duration>
</track>

</File>
</Mediainfo>

Adding the optional parameter -f will produce even more detailed information.

Solution 4

You can set the metadata on video, below mention set album_artist

ffmpeg -i source.mp4 -metadata album_artist='stack developer' -y -r 1 -acodec copy -vcodec copy destination.mp4

And retreive the meta tag as:

ffmpeg -i destination.mp4

Use this on command line .

Share:
166,123
Rahul Patwa
Author by

Rahul Patwa

Looking to strengthen my skills in HTML5, CSS3, JS, PHP, ActionScript, Node.js &amp; Databases . I hope to learn a lot from other 'Stackers'. To all the geeky and not so geeky coders, cheers! ;)

Updated on July 08, 2022

Comments

  • Rahul Patwa
    Rahul Patwa almost 2 years

    I want to read the metadata in media files and then save that metadata in a text/xml file, so that I can later insert that data in my database. I would prefer to use ffmpeg.

    Also is the same thing possible with MediaInfo?? I know I can get the metadata for individual tracks using MediaInfo, but I would want to automate it; as in whenever a new media file is found, read its metadata and then store it in a txt/xml file.

    Or, is there any other tool/utility/API that I can use for this?

  • matiasg
    matiasg about 11 years
    I've found that avprobe prints more info (it comes along with ffmpeg). Something like "avprobe -show_format input_video -v 0" might be helpful.
  • Filipe Correia
    Filipe Correia almost 11 years
    Unfortunately, exiftool doesn't allow to save metadata back to video files.
  • davidkomer
    davidkomer over 10 years
    I think this page is a little more informative that the one linked: ffmpeg.org/ffmpeg-formats.html#Metadata
  • Micah Elliott
    Micah Elliott over 9 years
    If you don't have avprobe on your system, it might exist as ffprobe.
  • Dr.jacky
    Dr.jacky almost 9 years
    @DmitryShkuropatsky [mpegts @ 0000000002f6f2a0] PES packet size mismatch. Output file is empty, nothing was encoded. -------- Output content is: ;FFMETADATA1 encoder=Lavf56.40.101
  • Dr.jacky
    Dr.jacky almost 9 years
    And how to get Program Guide (EPG) via ffmpeg?!
  • Dr.jacky
    Dr.jacky almost 9 years
    And how to get Program Guide (EPG) via ffmpeg?!
  • Dr.jacky
    Dr.jacky almost 9 years
    And how to get Program Guide (EPG) via ffmpeg?!
  • Meow
    Meow almost 9 years
    what mediainfo exports are not necessarily the "metadata" which ffmpeg shows, like title, artist, track, etc.
  • Krishna Oza
    Krishna Oza about 6 years
    is there any Android version of exiftool , have searched on the website of exiftool but could not find.
  • Frank Breitling
    Frank Breitling about 6 years
    Add -map_metadata:s:v 0:s:v -map_metadata:s:a 0:s:a if you want to save metadata from video and audio, too. I will edit the answer accordingly.
  • J. Does
    J. Does over 5 years
    @DmitryShkuropatsky By any chance, do you know how to auto-increment metadata name? (Or simply, set the title so it take the same value than the file name? stackoverflow.com/questions/53961568/…
  • David N. Jafferian
    David N. Jafferian over 4 years
    @Filipe Correia, the NAME line of the exiftool man page says, "exiftool - Read and write meta information in files" so can you be more specific about why you made your comment ?
  • Filipe Correia
    Filipe Correia over 4 years
    @DavidN.Jafferian the comment is from 2013, but since then exiftool has gained the ability to write metadata to video files too
  • k06a
    k06a over 3 years
    Using exiftool -v I see all global metadata was nested into UserData (SubDirectory), this prevents Apple software to detect camera type and GPS coordinates. Any idea on solving this?
  • Jay Taylor
    Jay Taylor over 2 years
    Note about avprobe: Works great, but for ubuntu 18.04 the binary command is called ffprobe.