Получение и сохранение метаданных мультимедиа с помощью FFmpeg
Я хочу прочитать метаданные в медиа-файлах, а затем сохранить эти метаданные в текстовом / xml-файле, чтобы позже я мог вставить эти данные в свою базу данных. Я бы предпочел использовать ffmpeg.
также возможно ли то же самое с MediaInfo?? Я знаю, что могу получить метаданные для отдельных треков с помощью MediaInfo, но я хотел бы автоматизировать его; как и всякий раз, когда новый медиа-файл найден, прочитайте его метаданные, а затем сохраните его в файле txt/xml.
или, есть ли другой инструмент/утилита/API, который я могу использовать для этого?
5 ответов
вы можете сохранить глобальные метаданные в текстовый файл с помощью следующим образом:
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.
для восстановления метаданных из файла см. https://stackoverflow.com/a/50580239/2235831.
Я предпочитаю использовать 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
и для получения информации о каждом отдельном кадре в видеофайле используйте
ffprobe -show_frames DV06xx.avi
, ffprobe
не получает столько информации, сколько мой любимый инструмент, Mediainfo, например, 'ffprobe' не отображает код времени первого кадра видео (хотя страница man утверждает обратное) или дату записи.
если вы запустите 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
произведет даже более подробную информацию.
вы можете установить метаданные на видео, ниже упомянуть набор album_artist
ffmpeg -i source.mp4 -metadata album_artist='stack developer' -y -r 1 -acodec copy -vcodec copy destination.mp4
и retreive метатег как:
ffmpeg -i destination.mp4
использовать это в командной строке .