📄 module.audio-video.riff.php
字号:
unset($thisfile_audio['bitrate']); } } if (isset($ThisFileInfo['mpeg']['audio'])) { $thisfile_audio_dataformat = 'mp'.$ThisFileInfo['mpeg']['audio']['layer']; $thisfile_audio['sample_rate'] = $ThisFileInfo['mpeg']['audio']['sample_rate']; $thisfile_audio['channels'] = $ThisFileInfo['mpeg']['audio']['channels']; $thisfile_audio['bitrate'] = $ThisFileInfo['mpeg']['audio']['bitrate']; $thisfile_audio['bitrate_mode'] = strtolower($ThisFileInfo['mpeg']['audio']['bitrate_mode']); if (!empty($ThisFileInfo['mpeg']['audio']['codec'])) { $thisfile_audio['codec'] = $ThisFileInfo['mpeg']['audio']['codec'].' '.$thisfile_audio['codec']; } if (!empty($thisfile_audio['streams'])) { foreach ($thisfile_audio['streams'] as $streamnumber => $streamdata) { if ($streamdata['dataformat'] == $thisfile_audio_dataformat) { $thisfile_audio['streams'][$streamnumber]['sample_rate'] = $thisfile_audio['sample_rate']; $thisfile_audio['streams'][$streamnumber]['channels'] = $thisfile_audio['channels']; $thisfile_audio['streams'][$streamnumber]['bitrate'] = $thisfile_audio['bitrate']; $thisfile_audio['streams'][$streamnumber]['bitrate_mode'] = $thisfile_audio['bitrate_mode']; $thisfile_audio['streams'][$streamnumber]['codec'] = $thisfile_audio['codec']; } } } $thisfile_audio['encoder_options'] = getid3_mp3::GuessEncoderOptions($ThisFileInfo); } if (!empty($thisfile_riff_raw['fmt ']['wBitsPerSample']) && ($thisfile_riff_raw['fmt ']['wBitsPerSample'] > 0)) { switch ($thisfile_audio_dataformat) { case 'ac3': // ignore bits_per_sample break; default: $thisfile_audio['bits_per_sample'] = $thisfile_riff_raw['fmt ']['wBitsPerSample']; break; } } if (empty($thisfile_riff_raw)) { unset($thisfile_riff['raw']); } if (empty($thisfile_riff_audio)) { unset($thisfile_riff['audio']); } if (empty($thisfile_riff_video)) { unset($thisfile_riff['video']); } return true; } function RIFFcommentsParse(&$RIFFinfoArray, &$CommentsTargetArray) { $RIFFinfoKeyLookup = array( 'IARL'=>'archivallocation', 'IART'=>'artist', 'ICDS'=>'costumedesigner', 'ICMS'=>'commissionedby', 'ICMT'=>'comment', 'ICNT'=>'country', 'ICOP'=>'copyright', 'ICRD'=>'creationdate', 'IDIM'=>'dimensions', 'IDIT'=>'digitizationdate', 'IDPI'=>'resolution', 'IDST'=>'distributor', 'IEDT'=>'editor', 'IENG'=>'engineers', 'IFRM'=>'accountofparts', 'IGNR'=>'genre', 'IKEY'=>'keywords', 'ILGT'=>'lightness', 'ILNG'=>'language', 'IMED'=>'orignalmedium', 'IMUS'=>'composer', 'INAM'=>'title', 'IPDS'=>'productiondesigner', 'IPLT'=>'palette', 'IPRD'=>'product', 'IPRO'=>'producer', 'IPRT'=>'part', 'IRTD'=>'rating', 'ISBJ'=>'subject', 'ISFT'=>'software', 'ISGN'=>'secondarygenre', 'ISHP'=>'sharpness', 'ISRC'=>'sourcesupplier', 'ISRF'=>'digitizationsource', 'ISTD'=>'productionstudio', 'ISTR'=>'starring', 'ITCH'=>'encoded_by', 'IWEB'=>'url', 'IWRI'=>'writer' ); foreach ($RIFFinfoKeyLookup as $key => $value) { if (isset($RIFFinfoArray[$key])) { foreach ($RIFFinfoArray[$key] as $commentid => $commentdata) { if (trim($commentdata['data']) != '') { @$CommentsTargetArray[$value][] = trim($commentdata['data']); } } } } return true; } function ParseRIFF(&$fd, $startoffset, $maxoffset, &$ThisFileInfo) { $maxoffset = min($maxoffset, $ThisFileInfo['avdataend']); $RIFFchunk = false; fseek($fd, $startoffset, SEEK_SET); while (ftell($fd) < $maxoffset) { $chunkname = fread($fd, 4); if (strlen($chunkname) < 4) { $ThisFileInfo['error'][] = 'Expecting chunk name at offset '.(ftell($fd) - 4).' but found nothing. Aborting RIFF parsing.'; break; } $chunksize = getid3_riff::EitherEndian2Int($ThisFileInfo, fread($fd, 4)); if ($chunksize == 0) { $ThisFileInfo['error'][] = 'Chunk size at offset '.(ftell($fd) - 4).' is zero. Aborting RIFF parsing.'; break; } if (($chunksize % 2) != 0) { // all structures are packed on word boundaries $chunksize++; } switch ($chunkname) { case 'LIST': $listname = fread($fd, 4); switch ($listname) { case 'movi': case 'rec ': $RIFFchunk[$listname]['offset'] = ftell($fd) - 4; $RIFFchunk[$listname]['size'] = $chunksize; static $ParsedAudioStream = false; if ($ParsedAudioStream) { // skip over } else { $WhereWeWere = ftell($fd); $AudioChunkHeader = fread($fd, 12); $AudioChunkStreamNum = substr($AudioChunkHeader, 0, 2); $AudioChunkStreamType = substr($AudioChunkHeader, 2, 2); $AudioChunkSize = getid3_lib::LittleEndian2Int(substr($AudioChunkHeader, 4, 4)); if ($AudioChunkStreamType == 'wb') { $FirstFourBytes = substr($AudioChunkHeader, 8, 4); if (preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', $FirstFourBytes)) { // MP3 if (getid3_mp3::MPEGaudioHeaderBytesValid($FirstFourBytes)) { $dummy = $ThisFileInfo; $dummy['avdataoffset'] = ftell($fd) - 4; $dummy['avdataend'] = ftell($fd) + $AudioChunkSize; getid3_mp3::getOnlyMPEGaudioInfo($fd, $dummy, $dummy['avdataoffset'], false); if (isset($dummy['mpeg']['audio'])) { $ThisFileInfo = $dummy; $ThisFileInfo['audio']['dataformat'] = 'mp'.$ThisFileInfo['mpeg']['audio']['layer']; $ThisFileInfo['audio']['sample_rate'] = $ThisFileInfo['mpeg']['audio']['sample_rate']; $ThisFileInfo['audio']['channels'] = $ThisFileInfo['mpeg']['audio']['channels']; $ThisFileInfo['audio']['bitrate'] = $ThisFileInfo['mpeg']['audio']['bitrate']; $ThisFileInfo['bitrate'] = $ThisFileInfo['audio']['bitrate']; $ThisFileInfo['audio']['bitrate_mode'] = strtolower($ThisFileInfo['mpeg']['audio']['bitrate_mode']); } } } elseif (preg_match('/^\x0B\x77/s', $FirstFourBytes)) { // AC3 $GETID3_ERRORARRAY = &$ThisFileInfo['warning']; if (getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ac3.php', __FILE__, false)) { $dummy = $ThisFileInfo; $dummy['avdataoffset'] = ftell($fd) - 4; $dummy['avdataend'] = ftell($fd) + $AudioChunkSize; $dummy['error'] = array(); $ac3_tag = new getid3_ac3($fd, $dummy); if (empty($dummy['error'])) { $ThisFileInfo['audio'] = $dummy['audio']; $ThisFileInfo['ac3'] = $dummy['ac3']; $ThisFileInfo['warning'] = $dummy['warning']; } } } } $ParsedAudioStream = true; fseek($fd, $WhereWeWere, SEEK_SET); } fseek($fd, $chunksize - 4, SEEK_CUR); break; default: if (!isset($RIFFchunk[$listname])) { $RIFFchunk[$listname] = array(); } $LISTchunkParent = $listname; $LISTchunkMaxOffset = ftell($fd) - 4 + $chunksize; if ($parsedChunk = getid3_riff::ParseRIFF($fd, ftell($fd), ftell($fd) + $chunksize - 4, $ThisFileInfo)) { $RIFFchunk[$listname] = array_merge_recursive($RIFFchunk[$listname], $parsedChunk); } break; } break; default: $thisindex = 0; if (isset($RIFFchunk[$chunkname]) && is_array($RIFFchunk[$chunkname])) { $thisindex = count($RIFFchunk[$chunkname]); } $RIFFchunk[$chunkname][$thisindex]['offset'] = ftell($fd) - 8; $RIFFchunk[$chunkname][$thisindex]['size'] = $chunksize; switch ($chunkname) { case 'data': $ThisFileInfo['avdataoffset'] = ftell($fd); $ThisFileInfo['avdataend'] = $ThisFileInfo['avdataoffset'] + $chunksize; $RIFFdataChunkContentsTest = fread($fd, 36); if ((strlen($RIFFdataChunkContentsTest) > 0) && preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', substr($RIFFdataChunkContentsTest, 0, 4))) { // Probably is MP3 data i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -