添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

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?

It seems nobody knows or it is not currently possible to export the EPG information from a .ts file (which is a text file with extension .eit) and put it as metadata in a MP4. Really i have searched some hours on Internet and i found nothing. i think that that whould be the obvious and the best step to have a short description for a chapter in a serie. Technically seems easy but no tools support that. Joniale Apr 2, 2018 at 8:19 By they way there is a software called metaX ( danhinsley.com ) that can retrieve metadata from Internet and set the metadata for a .mp4 .mkv and etc. You only need to know the name of the serie/movie/show and you it will look for the data. Unfortunately, It doesn´t work with EPG information or .ts files and the software doesn´t work well for chapters in a serie. Something that can be solved if you can export the EPG data. Joniale Apr 2, 2018 at 9:14

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.

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. – matiasg Apr 18, 2013 at 20:24 I think this page is a little more informative that the one linked: ffmpeg.org/ffmpeg-formats.html#Metadata – davidkomer Jan 31, 2014 at 11:30 @DmitryShkuropatsky [mpegts @ 0000000002f6f2a0] PES packet size mismatch. Output file is empty, nothing was encoded. -------- Output content is: ;FFMETADATA1 encoder=Lavf56.40.101 – Dr.jacky Aug 1, 2015 at 6:49

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
                is there any Android version of exiftool , have searched on the website of exiftool but could not find.
– Krishna Oza
                May 7, 2018 at 11:18

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">
<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.

what mediainfo exports are not necessarily the "metadata" which ffmpeg shows, like title, artist, track, etc. – Meow Aug 7, 2015 at 3:39 To show in json format: ffprobe -print_format json -show_programs -show_format -show_streams "source.mp4" – the_RR Sep 3, 2022 at 16:20

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 .

Assume that i need the frame count and duration. To get this with MediaInfo cli, use this code.MediaInfo --inform="Video;%FrameCount%,%Duration/String4%" videoname.mp4

The out will be something like this - 63525,00:42:21:00

I combine bash, ffmpeg, sed to write to a file only the basic metadata information that interests me: file type and name, title(s), video-, audio- and subtitlestreams details. A single file or all files in a dir. Linux. Only tested on a bunch of mkv videos b.t.w.

script: ffmpeg_metadata.sh
output file: ffmpeg_metadata.txt

The sed commands do all kind of things to 'purify' the given ffmpeg output.

Hereby not the whole script but the code that does things (hope it renders satisfactory, cause I've had trouble with line breaks in this post)...

echo -e "File name(s) (specific or wildcard,
no spaces or special chars, except '-' '_')?"
read -p "" INPUT
for i in ${INPUT}; do ffmpeg -i "$i" -hide_banner; done |& tee ./ffmpeg_metadata.txt
sed -r -i "/Input|title|Stream/!d;s/[[:space:]]*[[:space:]]/ /g;s/^[[:space:]]//g;s/[[:space:]]:/:/g;s/Input/\n&/g;1i MULTIMEDIA METADATA" ./ffmpeg_metadata.txt

the /Input|title|Stream/!d says: don't delete the lines containing exactly these words aka strings. I.o.w. keep only those lines.

Here, for two mkv's, it results in:

MULTIMEDIA METADATA Input #0, matroska,webm, from 'film1.mkv': title: film1 Stream #0:0: Video: h264 (High), yuv420p(progressive), 1276x686 [SAR 1:1 DAR 638:343], SAR 343:359 DAR 638:359, 23.97 fps, 23.97 tbr, 1k tbn, 47.94 tbc (default) title: film1_Track Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp (default) title: film1_Track Input #0, matroska,webm, from 'film2.mkv': title: film2 Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc (default) title: film2_Track Stream #0:1(eng): Audio: aac (LC), 44100 Hz, stereo, fltp (default) title: film2_Track Stream #0:2(eng): Subtitle: ass (default) title: film2_Track Stream #0:3(es): Subtitle: subrip (default) title: film2_Track

Could be further reduced by leaving out the 'title' within sed. So, only file name and streams. Or, e.g., one could add the lines containing the word 'Duration', which also include the bitrate. Etcetera, etcetera. The day ffmpeg-development starts respelling words, this script will also need respelling :-D

Cheerio (not included in ouput file ;-) )!

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.