WordPress Version: 6.1
/**
* Retrieves metadata from a video file's ID3 tags.
*
* @since 3.6.0
*
* @param string $file Path to file.
* @return array|false Returns array of metadata, if found.
*/
function wp_read_video_metadata($file)
{
if (!file_exists($file)) {
return false;
}
$metadata = array();
if (!defined('GETID3_TEMP_DIR')) {
define('GETID3_TEMP_DIR', get_temp_dir());
}
if (!class_exists('getID3', false)) {
require ABSPATH . WPINC . '/ID3/getid3.php';
}
$id3 = new getID3();
// Required to get the `created_timestamp` value.
$id3->options_audiovideo_quicktime_ReturnAtomData = true;
// phpcs:ignore WordPress.NamingConventions.ValidVariableName
$data = $id3->analyze($file);
if (isset($data['video']['lossless'])) {
$metadata['lossless'] = $data['video']['lossless'];
}
if (!empty($data['video']['bitrate'])) {
$metadata['bitrate'] = (int) $data['video']['bitrate'];
}
if (!empty($data['video']['bitrate_mode'])) {
$metadata['bitrate_mode'] = $data['video']['bitrate_mode'];
}
if (!empty($data['filesize'])) {
$metadata['filesize'] = (int) $data['filesize'];
}
if (!empty($data['mime_type'])) {
$metadata['mime_type'] = $data['mime_type'];
}
if (!empty($data['playtime_seconds'])) {
$metadata['length'] = (int) round($data['playtime_seconds']);
}
if (!empty($data['playtime_string'])) {
$metadata['length_formatted'] = $data['playtime_string'];
}
if (!empty($data['video']['resolution_x'])) {
$metadata['width'] = (int) $data['video']['resolution_x'];
}
if (!empty($data['video']['resolution_y'])) {
$metadata['height'] = (int) $data['video']['resolution_y'];
}
if (!empty($data['fileformat'])) {
$metadata['fileformat'] = $data['fileformat'];
}
if (!empty($data['video']['dataformat'])) {
$metadata['dataformat'] = $data['video']['dataformat'];
}
if (!empty($data['video']['encoder'])) {
$metadata['encoder'] = $data['video']['encoder'];
}
if (!empty($data['video']['codec'])) {
$metadata['codec'] = $data['video']['codec'];
}
if (!empty($data['audio'])) {
unset($data['audio']['streams']);
$metadata['audio'] = $data['audio'];
}
if (empty($metadata['created_timestamp'])) {
$created_timestamp = wp_get_media_creation_timestamp($data);
if (false !== $created_timestamp) {
$metadata['created_timestamp'] = $created_timestamp;
}
}
wp_add_id3_tag_data($metadata, $data);
$file_format = isset($metadata['fileformat']) ? $metadata['fileformat'] : null;
/**
* Filters the array of metadata retrieved from a video.
*
* In core, usually this selection is what is stored.
* More complete data can be parsed from the `$data` parameter.
*
* @since 4.9.0
*
* @param array $metadata Filtered video metadata.
* @param string $file Path to video file.
* @param string|null $file_format File format of video, as analyzed by getID3.
* Null if unknown.
* @param array $data Raw metadata from getID3.
*/
return apply_filters('wp_read_video_metadata', $metadata, $file, $file_format, $data);
}