首页 文章

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

提问于
浏览
50

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

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

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

5 回答

  • 64

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

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

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

    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
    

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

    要从文件恢复元数据,请参阅https://stackoverflow.com/a/50580239/2235831 .

  • 8

    我更喜欢使用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
    

  • 0

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

    ffprobe -show_streams -show_format DV06xx.avi
    

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

    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.

    如果在命令行上运行 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 将生成更详细的信息 .

  • 0

    MPEG-4文件也有atomicparsley .

  • 25

    您可以在视频上设置元数据,下面提到设置album_artist

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

    并将元标记检索为:

    ffmpeg -i destination.mp4
    

    在命令行上使用它 .

相关问题