WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

getid3_ogg::Analyze() public WP 1.0

Это метод класса: getid3_ogg{}

Хуков нет.

Возвращает

true/false.

Использование

$getid3_ogg = new getid3_ogg();
$getid3_ogg->Analyze();

Код getid3_ogg::Analyze() WP 5.5.1

wp-includes/ID3/module.audio.ogg.php
<?php
public function Analyze() {
	$info = &$this->getid3->info;

	$info['fileformat'] = 'ogg';

	// Warn about illegal tags - only vorbiscomments are allowed
	if (isset($info['id3v2'])) {
		$this->warning('Illegal ID3v2 tag present.');
	}
	if (isset($info['id3v1'])) {
		$this->warning('Illegal ID3v1 tag present.');
	}
	if (isset($info['ape'])) {
		$this->warning('Illegal APE tag present.');
	}


	// Page 1 - Stream Header

	$this->fseek($info['avdataoffset']);

	$oggpageinfo = $this->ParseOggPageHeader();
	$info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo;

	if ($this->ftell() >= $this->getid3->fread_buffer_size()) {
		$this->error('Could not find start of Ogg page in the first '.$this->getid3->fread_buffer_size().' bytes (this might not be an Ogg-Vorbis file?)');
		unset($info['fileformat']);
		unset($info['ogg']);
		return false;
	}

	$filedata = $this->fread($oggpageinfo['page_length']);
	$filedataoffset = 0;

	if (substr($filedata, 0, 4) == 'fLaC') {

		$info['audio']['dataformat']   = 'flac';
		$info['audio']['bitrate_mode'] = 'vbr';
		$info['audio']['lossless']     = true;

	} elseif (substr($filedata, 1, 6) == 'vorbis') {

		$this->ParseVorbisPageHeader($filedata, $filedataoffset, $oggpageinfo);

	} elseif (substr($filedata, 0, 8) == 'OpusHead') {

		if ($this->ParseOpusPageHeader($filedata, $filedataoffset, $oggpageinfo) === false) {
			return false;
		}

	} elseif (substr($filedata, 0, 8) == 'Speex   ') {

		// http://www.speex.org/manual/node10.html

		$info['audio']['dataformat']   = 'speex';
		$info['mime_type']             = 'audio/speex';
		$info['audio']['bitrate_mode'] = 'abr';
		$info['audio']['lossless']     = false;

		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_string']           =                              substr($filedata, $filedataoffset, 8); // hard-coded to 'Speex   '
		$filedataoffset += 8;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_version']          =                              substr($filedata, $filedataoffset, 20);
		$filedataoffset += 20;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_version_id']       = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['header_size']            = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['rate']                   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['mode']                   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['mode_bitstream_version'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['nb_channels']            = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['bitrate']                = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['framesize']              = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['vbr']                    = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['frames_per_packet']      = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['extra_headers']          = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['reserved1']              = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['reserved2']              = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;

		$info['speex']['speex_version'] = trim($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_version']);
		$info['speex']['sample_rate']   = $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['rate'];
		$info['speex']['channels']      = $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['nb_channels'];
		$info['speex']['vbr']           = (bool) $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['vbr'];
		$info['speex']['band_type']     = $this->SpeexBandModeLookup($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['mode']);

		$info['audio']['sample_rate']   = $info['speex']['sample_rate'];
		$info['audio']['channels']      = $info['speex']['channels'];
		if ($info['speex']['vbr']) {
			$info['audio']['bitrate_mode'] = 'vbr';
		}

	} elseif (substr($filedata, 0, 7) == "\x80".'theora') {

		// http://www.theora.org/doc/Theora.pdf (section 6.2)

		$info['ogg']['pageheader']['theora']['theora_magic']             =                           substr($filedata, $filedataoffset,  7); // hard-coded to "\x80.'theora'
		$filedataoffset += 7;
		$info['ogg']['pageheader']['theora']['version_major']            = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
		$filedataoffset += 1;
		$info['ogg']['pageheader']['theora']['version_minor']            = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
		$filedataoffset += 1;
		$info['ogg']['pageheader']['theora']['version_revision']         = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
		$filedataoffset += 1;
		$info['ogg']['pageheader']['theora']['frame_width_macroblocks']  = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  2));
		$filedataoffset += 2;
		$info['ogg']['pageheader']['theora']['frame_height_macroblocks'] = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  2));
		$filedataoffset += 2;
		$info['ogg']['pageheader']['theora']['resolution_x']             = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
		$filedataoffset += 3;
		$info['ogg']['pageheader']['theora']['resolution_y']             = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
		$filedataoffset += 3;
		$info['ogg']['pageheader']['theora']['picture_offset_x']         = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
		$filedataoffset += 1;
		$info['ogg']['pageheader']['theora']['picture_offset_y']         = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
		$filedataoffset += 1;
		$info['ogg']['pageheader']['theora']['frame_rate_numerator']     = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  4));
		$filedataoffset += 4;
		$info['ogg']['pageheader']['theora']['frame_rate_denominator']   = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  4));
		$filedataoffset += 4;
		$info['ogg']['pageheader']['theora']['pixel_aspect_numerator']   = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
		$filedataoffset += 3;
		$info['ogg']['pageheader']['theora']['pixel_aspect_denominator'] = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
		$filedataoffset += 3;
		$info['ogg']['pageheader']['theora']['color_space_id']           = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
		$filedataoffset += 1;
		$info['ogg']['pageheader']['theora']['nominal_bitrate']          = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
		$filedataoffset += 3;
		$info['ogg']['pageheader']['theora']['flags']                    = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  2));
		$filedataoffset += 2;

		$info['ogg']['pageheader']['theora']['quality']         = ($info['ogg']['pageheader']['theora']['flags'] & 0xFC00) >> 10;
		$info['ogg']['pageheader']['theora']['kfg_shift']       = ($info['ogg']['pageheader']['theora']['flags'] & 0x03E0) >>  5;
		$info['ogg']['pageheader']['theora']['pixel_format_id'] = ($info['ogg']['pageheader']['theora']['flags'] & 0x0018) >>  3;
		$info['ogg']['pageheader']['theora']['reserved']        = ($info['ogg']['pageheader']['theora']['flags'] & 0x0007) >>  0; // should be 0
		$info['ogg']['pageheader']['theora']['color_space']     = self::TheoraColorSpace($info['ogg']['pageheader']['theora']['color_space_id']);
		$info['ogg']['pageheader']['theora']['pixel_format']    = self::TheoraPixelFormat($info['ogg']['pageheader']['theora']['pixel_format_id']);

		$info['video']['dataformat']   = 'theora';
		$info['mime_type']             = 'video/ogg';
		//$info['audio']['bitrate_mode'] = 'abr';
		//$info['audio']['lossless']     = false;
		$info['video']['resolution_x'] = $info['ogg']['pageheader']['theora']['resolution_x'];
		$info['video']['resolution_y'] = $info['ogg']['pageheader']['theora']['resolution_y'];
		if ($info['ogg']['pageheader']['theora']['frame_rate_denominator'] > 0) {
			$info['video']['frame_rate'] = (float) $info['ogg']['pageheader']['theora']['frame_rate_numerator'] / $info['ogg']['pageheader']['theora']['frame_rate_denominator'];
		}
		if ($info['ogg']['pageheader']['theora']['pixel_aspect_denominator'] > 0) {
			$info['video']['pixel_aspect_ratio'] = (float) $info['ogg']['pageheader']['theora']['pixel_aspect_numerator'] / $info['ogg']['pageheader']['theora']['pixel_aspect_denominator'];
		}
		$this->warning('Ogg Theora (v3) not fully supported in this version of getID3 ['.$this->getid3->version().'] -- bitrate, playtime and all audio data are currently unavailable');


	} elseif (substr($filedata, 0, 8) == "fishead\x00") {

		// Ogg Skeleton version 3.0 Format Specification
		// http://xiph.org/ogg/doc/skeleton.html
		$filedataoffset += 8;
		$info['ogg']['skeleton']['fishead']['raw']['version_major']                = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  2));
		$filedataoffset += 2;
		$info['ogg']['skeleton']['fishead']['raw']['version_minor']                = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  2));
		$filedataoffset += 2;
		$info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
		$filedataoffset += 8;
		$info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
		$filedataoffset += 8;
		$info['ogg']['skeleton']['fishead']['raw']['basetime_numerator']           = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
		$filedataoffset += 8;
		$info['ogg']['skeleton']['fishead']['raw']['basetime_denominator']         = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
		$filedataoffset += 8;
		$info['ogg']['skeleton']['fishead']['raw']['utc']                          = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 20));
		$filedataoffset += 20;

		$info['ogg']['skeleton']['fishead']['version']          = $info['ogg']['skeleton']['fishead']['raw']['version_major'].'.'.$info['ogg']['skeleton']['fishead']['raw']['version_minor'];
		$info['ogg']['skeleton']['fishead']['presentationtime'] = $info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator'] / $info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator'];
		$info['ogg']['skeleton']['fishead']['basetime']         = $info['ogg']['skeleton']['fishead']['raw']['basetime_numerator']         / $info['ogg']['skeleton']['fishead']['raw']['basetime_denominator'];
		$info['ogg']['skeleton']['fishead']['utc']              = $info['ogg']['skeleton']['fishead']['raw']['utc'];


		$counter = 0;
		do {
			$oggpageinfo = $this->ParseOggPageHeader();
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno'].'.'.$counter++] = $oggpageinfo;
			$filedata = $this->fread($oggpageinfo['page_length']);
			$this->fseek($oggpageinfo['page_end_offset']);

			if (substr($filedata, 0, 8) == "fisbone\x00") {

				$filedataoffset = 8;
				$info['ogg']['skeleton']['fisbone']['raw']['message_header_offset']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  4));
				$filedataoffset += 4;
				$info['ogg']['skeleton']['fisbone']['raw']['serial_number']           = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  4));
				$filedataoffset += 4;
				$info['ogg']['skeleton']['fisbone']['raw']['number_header_packets']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  4));
				$filedataoffset += 4;
				$info['ogg']['skeleton']['fisbone']['raw']['granulerate_numerator']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
				$filedataoffset += 8;
				$info['ogg']['skeleton']['fisbone']['raw']['granulerate_denominator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
				$filedataoffset += 8;
				$info['ogg']['skeleton']['fisbone']['raw']['basegranule']             = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
				$filedataoffset += 8;
				$info['ogg']['skeleton']['fisbone']['raw']['preroll']                 = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  4));
				$filedataoffset += 4;
				$info['ogg']['skeleton']['fisbone']['raw']['granuleshift']            = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  1));
				$filedataoffset += 1;
				$info['ogg']['skeleton']['fisbone']['raw']['padding']                 =                              substr($filedata, $filedataoffset,  3);
				$filedataoffset += 3;

			} elseif (substr($filedata, 1, 6) == 'theora') {

				$info['video']['dataformat'] = 'theora1';
				$this->error('Ogg Theora (v1) not correctly handled in this version of getID3 ['.$this->getid3->version().']');
				//break;

			} elseif (substr($filedata, 1, 6) == 'vorbis') {

				$this->ParseVorbisPageHeader($filedata, $filedataoffset, $oggpageinfo);

			} else {
				$this->error('unexpected');
				//break;
			}
		//} while ($oggpageinfo['page_seqno'] == 0);
		} while (($oggpageinfo['page_seqno'] == 0) && (substr($filedata, 0, 8) != "fisbone\x00"));

		$this->fseek($oggpageinfo['page_start_offset']);

		$this->error('Ogg Skeleton not correctly handled in this version of getID3 ['.$this->getid3->version().']');
		//return false;

	} elseif (substr($filedata, 0, 5) == "\x7F".'FLAC') {
		// https://xiph.org/flac/ogg_mapping.html

		$info['audio']['dataformat']   = 'flac';
		$info['audio']['bitrate_mode'] = 'vbr';
		$info['audio']['lossless']     = true;

		$info['ogg']['flac']['header']['version_major']  =                         ord(substr($filedata,  5, 1));
		$info['ogg']['flac']['header']['version_minor']  =                         ord(substr($filedata,  6, 1));
		$info['ogg']['flac']['header']['header_packets'] =   getid3_lib::BigEndian2Int(substr($filedata,  7, 2)) + 1; // "A two-byte, big-endian binary number signifying the number of header (non-audio) packets, not including this one. This number may be zero (0x0000) to signify 'unknown' but be aware that some decoders may not be able to handle such streams."
		$info['ogg']['flac']['header']['magic']          =                             substr($filedata,  9, 4);
		if ($info['ogg']['flac']['header']['magic'] != 'fLaC') {
			$this->error('Ogg-FLAC expecting "fLaC", found "'.$info['ogg']['flac']['header']['magic'].'" ('.trim(getid3_lib::PrintHexBytes($info['ogg']['flac']['header']['magic'])).')');
			return false;
		}
		$info['ogg']['flac']['header']['STREAMINFO_bytes'] = getid3_lib::BigEndian2Int(substr($filedata, 13, 4));
		$info['flac']['STREAMINFO'] = getid3_flac::parseSTREAMINFOdata(substr($filedata, 17, 34));
		if (!empty($info['flac']['STREAMINFO']['sample_rate'])) {
			$info['audio']['bitrate_mode']    = 'vbr';
			$info['audio']['sample_rate']     = $info['flac']['STREAMINFO']['sample_rate'];
			$info['audio']['channels']        = $info['flac']['STREAMINFO']['channels'];
			$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample'];
			$info['playtime_seconds']         = $info['flac']['STREAMINFO']['samples_stream'] / $info['flac']['STREAMINFO']['sample_rate'];
		}

	} else {

		$this->error('Expecting one of "vorbis", "Speex", "OpusHead", "vorbis", "fishhead", "theora", "fLaC" identifier strings, found "'.substr($filedata, 0, 8).'"');
		unset($info['ogg']);
		unset($info['mime_type']);
		return false;

	}

	// Page 2 - Comment Header
	$oggpageinfo = $this->ParseOggPageHeader();
	$info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo;

	switch ($info['audio']['dataformat']) {
		case 'vorbis':
			$filedata = $this->fread($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']);
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['packet_type'] = getid3_lib::LittleEndian2Int(substr($filedata, 0, 1));
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['stream_type'] =                              substr($filedata, 1, 6); // hard-coded to 'vorbis'

			$this->ParseVorbisComments();
			break;

		case 'flac':
			$flac = new getid3_flac($this->getid3);
			if (!$flac->parseMETAdata()) {
				$this->error('Failed to parse FLAC headers');
				return false;
			}
			unset($flac);
			break;

		case 'speex':
			$this->fseek($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length'], SEEK_CUR);
			$this->ParseVorbisComments();
			break;

		case 'opus':
			$filedata = $this->fread($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']);
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['stream_type'] = substr($filedata, 0, 8); // hard-coded to 'OpusTags'
			if(substr($filedata, 0, 8)  != 'OpusTags') {
				$this->error('Expected "OpusTags" as header but got "'.substr($filedata, 0, 8).'"');
				return false;
			}

			$this->ParseVorbisComments();
			break;

	}

	// Last Page - Number of Samples
	if (!getid3_lib::intValueSupported($info['avdataend'])) {

		$this->warning('Unable to parse Ogg end chunk file (PHP does not support file operations beyond '.round(PHP_INT_MAX / 1073741824).'GB)');

	} else {

		$this->fseek(max($info['avdataend'] - $this->getid3->fread_buffer_size(), 0));
		$LastChunkOfOgg = strrev($this->fread($this->getid3->fread_buffer_size()));
		if ($LastOggSpostion = strpos($LastChunkOfOgg, 'SggO')) {
			$this->fseek($info['avdataend'] - ($LastOggSpostion + strlen('SggO')));
			$info['avdataend'] = $this->ftell();
			$info['ogg']['pageheader']['eos'] = $this->ParseOggPageHeader();
			$info['ogg']['samples']   = $info['ogg']['pageheader']['eos']['pcm_abs_position'];
			if ($info['ogg']['samples'] == 0) {
				$this->error('Corrupt Ogg file: eos.number of samples == zero');
				return false;
			}
			if (!empty($info['audio']['sample_rate'])) {
				$info['ogg']['bitrate_average'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / ($info['ogg']['samples'] / $info['audio']['sample_rate']);
			}
		}

	}

	if (!empty($info['ogg']['bitrate_average'])) {
		$info['audio']['bitrate'] = $info['ogg']['bitrate_average'];
	} elseif (!empty($info['ogg']['bitrate_nominal'])) {
		$info['audio']['bitrate'] = $info['ogg']['bitrate_nominal'];
	} elseif (!empty($info['ogg']['bitrate_min']) && !empty($info['ogg']['bitrate_max'])) {
		$info['audio']['bitrate'] = ($info['ogg']['bitrate_min'] + $info['ogg']['bitrate_max']) / 2;
	}
	if (isset($info['audio']['bitrate']) && !isset($info['playtime_seconds'])) {
		if ($info['audio']['bitrate'] == 0) {
			$this->error('Corrupt Ogg file: bitrate_audio == zero');
			return false;
		}
		$info['playtime_seconds'] = (float) ((($info['avdataend'] - $info['avdataoffset']) * 8) / $info['audio']['bitrate']);
	}

	if (isset($info['ogg']['vendor'])) {
		$info['audio']['encoder'] = preg_replace('/^Encoded with /', '', $info['ogg']['vendor']);

		// Vorbis only
		if ($info['audio']['dataformat'] == 'vorbis') {

			// Vorbis 1.0 starts with Xiph.Org
			if  (preg_match('/^Xiph.Org/', $info['audio']['encoder'])) {

				if ($info['audio']['bitrate_mode'] == 'abr') {

					// Set -b 128 on abr files
					$info['audio']['encoder_options'] = '-b '.round($info['ogg']['bitrate_nominal'] / 1000);

				} elseif (($info['audio']['bitrate_mode'] == 'vbr') && ($info['audio']['channels'] == 2) && ($info['audio']['sample_rate'] >= 44100) && ($info['audio']['sample_rate'] <= 48000)) {
					// Set -q N on vbr files
					$info['audio']['encoder_options'] = '-q '.$this->get_quality_from_nominal_bitrate($info['ogg']['bitrate_nominal']);

				}
			}

			if (empty($info['audio']['encoder_options']) && !empty($info['ogg']['bitrate_nominal'])) {
				$info['audio']['encoder_options'] = 'Nominal bitrate: '.intval(round($info['ogg']['bitrate_nominal'] / 1000)).'kbps';
			}
		}
	}

	return true;
}