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

Rah*_*twa 62 media metadata ffmpeg

我想读取媒体文件中的元数据,然后将该元数据保存在text/xml文件中,以便稍后我可以在我的数据库中插入该数据.我更愿意使用ffmpeg.

与MediaInfo一样可能吗?我知道我可以使用MediaInfo获取各个曲目的元数据,但我想自动化它; 就像在找到新媒体文件时一样,读取其元数据,然后将其存储在txt/xml文件中.

或者,我可以使用其他任何工具/实用程序/ API吗?

Dmi*_*sky 78

您可以使用以下-f ffmetadata选项将全局元数据保存到文本文件:

ffmpeg -i in.mp4 -f ffmetadata in.txt
Run Code Online (Sandbox Code Playgroud)

如果您还需要来自视频和音频流的元数据(例如,如果全局元数据不包含创建时间),请使用:

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
Run Code Online (Sandbox Code Playgroud)

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

要从文件恢复元数据,请参阅/sf/answers/3540616761/.

  • 我发现avprobe打印了更多信息(它随ffmpeg一起提供).像"avprobe -show_format input_video -v 0"这样的东西可能会有所帮助. (8认同)
  • 如果您的系统上没有`avprobe`,它可能以`ffprobe`存在. (4认同)

Che*_*ang 34

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

exiftool IMG_0014.MOV >a.txt
Run Code Online (Sandbox Code Playgroud)

输出是


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
Run Code Online (Sandbox Code Playgroud)

而如果我使用ffmpeg

 ffmpeg -i IMG_0014.MOV -f ffmetadata metadata.txt
Run Code Online (Sandbox Code Playgroud)

输出是

;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
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,exiftool不允许将元数据保存回视频文件. (3认同)
  • 以及如何通过 ffmpeg 获取节目指南 (EPG)?! (2认同)

Dan*_* K. 10

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

ffprobe -show_streams -show_format DV06xx.avi 
Run Code Online (Sandbox Code Playgroud)

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

ffprobe -show_frames DV06xx.avi 
Run Code Online (Sandbox Code Playgroud)

但是,ffprobe不能检索与我最喜欢的工具Mediainfo一样多的信息,例如,'ffprobe'不显示视频第一帧的时间码(尽管手册页另有说明)或录制日期.

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

mediainfo --OUTPUT=XML DV06xx.avi 
Run Code Online (Sandbox Code Playgroud)

在我的例子中,输出是:

<?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>
Run Code Online (Sandbox Code Playgroud)

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