Je souhaite lire les métadonnées dans les fichiers multimédias, puis les enregistrer dans un fichier texte/xml afin de pouvoir les insérer ultérieurement dans ma base de données. Je préférerais utiliser ffmpeg.
Est également la même chose possible avec MediaInfo? Je sais que je peux obtenir les métadonnées de pistes individuelles à l’aide de MediaInfo, mais je souhaiterais l’automatiser; comme lorsqu’un nouveau fichier multimédia est trouvé, lisez ses métadonnées, puis stockez-les dans un fichier txt/xml.
Ou, y a-t-il un autre outil/utilitaire/API que je peux utiliser pour cela?
Vous pouvez enregistrer les métadonnées globales dans un fichier texte à l'aide de l'option -f ffmetadata
comme suit:
ffmpeg -i in.mp4 -f ffmetadata in.txt
Si vous avez également besoin de métadonnées provenant des flux vidéo et audio (par exemple, si les métadonnées globales ne contiennent pas l'heure de création), utilisez:
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
Pour plus de détails, voir Metadata section dans la documentation de ffmpeg.
Pour restaurer les métadonnées à partir d’un fichier, voir https://stackoverflow.com/a/50580239/2235831 .
Je préfère utiliser exiftool qui m'offre plus de sorties que ffmpeg. Prenons un exemple (un fichier de l'iphone):
exiftool IMG_0014.MOV >a.txt
la sortie est
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
pendant que si j'utilise 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
Vous pouvez utiliser ffprobe
(fourni avec ffmpeg
) pour collecter des informations sur les fichiers multimédia. Pour plus d'informations sur le contenu global d'un fichier multimédia
ffprobe -show_streams -show_format DV06xx.avi
et pour obtenir des informations sur chaque image d'un fichier vidéo,
ffprobe -show_frames DV06xx.avi
Cependant, ffprobe
ne récupère pas autant d'informations que mon outil préféré, Mediainfo , par exemple, 'ffprobe' n'affiche pas le code temporel de la première image de la vidéo (bien que la page de manuel le prétende autrement) ou le date d'enregistrement.
Si vous exécutez mediainfo
sur la ligne de commande, vous pouvez même demander une sortie au format XML:
mediainfo --OUTPUT=XML DV06xx.avi
Dans mon exemple, la sortie est:
<?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>
L'ajout du paramètre facultatif -f
produira des informations encore plus détaillées.
Il y a aussi atomicparsley for MPEG-4 fichiers.
Vous pouvez définir les métadonnées sur une vidéo, sous la mention set album_artist
ffmpeg -i source.mp4 -metadata album_artist='stack developer' -y -r 1 -acodec copy -vcodec copy destination.mp4
Et récupérez la balise META en tant que:
ffmpeg -i destination.mp4
Utilisez ceci en ligne de commande.