使用FFmpeg检索和保存媒体元数据

我想读取媒体文件中的元数据,然后将这些元数据保存在文本/ xml文件中,以便稍后可以将该数据插入到我的数据库中。 我宁愿使用ffmpeg。

MediaInfo也可能是同样的事情? 我知道我可以使用MediaInfo获取单个曲目的元数据,但是我想将其自动化; 就像每当find新的媒体文件一样,读取其元数据,然后将其存储在txt / xml文件中。

或者,有没有其他的工具/实用程序/ API,我可以使用这个?

您可以使用-f ffmetadata选项将媒体文件元数据保存到文本文件,如下所示:

 ffmpeg -i input_video -f ffmetadata metadata.txt 

有关详细信息,请参阅ffmpeg文档中的元数据部分。

我更喜欢使用exiftool,它提供了比ffmpeg更多的输出。 举一个例子(来自iPhone的一个文件):

 exiftool IMG_0014.MOV >a.txt 

输出是


 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 

而如果我使用ffmpeg

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

输出是

 ;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 

您可以使用ffprobe (与ffmpeg )收集有关多媒体文件的信息。 有关多媒体文件使用的整体内容的信息

 ffprobe -show_streams -show_format DV06xx.avi 

以及有关video文件中每个单帧使用的信息

 ffprobe -show_frames DV06xx.avi 

然而, ffprobe并不像我最喜欢的工具ffprobe那样获取尽可能多的信息,例如'ffprobe'不显示video第一帧的时间码(尽pipe手册页另有说明)或录制date。

如果您在命令行上运行mediainfo ,您甚至可以以XML格式请求输出:

 mediainfo --OUTPUT=XML DV06xx.avi 

在我的例子中,输出是:

 <?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> 

添加可选参数-f将产生更详细的信息。

还有MPEG-4文件的atomicparsley 。