📄 module.audio-video.quicktime.php
字号:
case 'vmhd': // Video Media information HeaDer atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); $atomstructure['graphics_mode'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 2)); $atomstructure['opcolor_red'] = getid3_lib::BigEndian2Int(substr($atomdata, 6, 2)); $atomstructure['opcolor_green'] = getid3_lib::BigEndian2Int(substr($atomdata, 8, 2)); $atomstructure['opcolor_blue'] = getid3_lib::BigEndian2Int(substr($atomdata, 10, 2)); $atomstructure['flags']['no_lean_ahead'] = (bool) ($atomstructure['flags_raw'] & 0x001); break; case 'hdlr': // HanDLeR reference atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['component_type'] = substr($atomdata, 4, 4); $atomstructure['component_subtype'] = substr($atomdata, 8, 4); $atomstructure['component_manufacturer'] = substr($atomdata, 12, 4); $atomstructure['component_flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 16, 4)); $atomstructure['component_flags_mask'] = getid3_lib::BigEndian2Int(substr($atomdata, 20, 4)); $atomstructure['component_name'] = $this->Pascal2String(substr($atomdata, 24)); if (($atomstructure['component_subtype'] == 'STpn') && ($atomstructure['component_manufacturer'] == 'zzzz')) { $ThisFileInfo['video']['dataformat'] = 'quicktimevr'; } break; case 'mdhd': // MeDia HeaDer atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['creation_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 4)); $atomstructure['modify_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 8, 4)); $atomstructure['time_scale'] = getid3_lib::BigEndian2Int(substr($atomdata, 12, 4)); $atomstructure['duration'] = getid3_lib::BigEndian2Int(substr($atomdata, 16, 4)); $atomstructure['language_id'] = getid3_lib::BigEndian2Int(substr($atomdata, 20, 2)); $atomstructure['quality'] = getid3_lib::BigEndian2Int(substr($atomdata, 22, 2)); if ($atomstructure['time_scale'] == 0) { $ThisFileInfo['error'][] = 'Corrupt Quicktime file: mdhd.time_scale == zero'; return false; } $atomstructure['creation_time_unix'] = getid3_lib::DateMac2Unix($atomstructure['creation_time']); $atomstructure['modify_time_unix'] = getid3_lib::DateMac2Unix($atomstructure['modify_time']); $atomstructure['playtime_seconds'] = $atomstructure['duration'] / $atomstructure['time_scale']; $atomstructure['language'] = $this->QuicktimeLanguageLookup($atomstructure['language_id']); if (empty($ThisFileInfo['comments']['language']) || (!in_array($atomstructure['language'], $ThisFileInfo['comments']['language']))) { $ThisFileInfo['comments']['language'][] = $atomstructure['language']; } break; case 'pnot': // Preview atom $atomstructure['modification_date'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 4)); // "standard Macintosh format" $atomstructure['version_number'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 2)); // hardcoded: 0x00 $atomstructure['atom_type'] = substr($atomdata, 6, 4); // usually: 'PICT' $atomstructure['atom_index'] = getid3_lib::BigEndian2Int(substr($atomdata, 10, 2)); // usually: 0x01 $atomstructure['modification_date_unix'] = getid3_lib::DateMac2Unix($atomstructure['modification_date']); break; case 'crgn': // Clipping ReGioN atom $atomstructure['region_size'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 2)); // The Region size, Region boundary box, $atomstructure['boundary_box'] = getid3_lib::BigEndian2Int(substr($atomdata, 2, 8)); // and Clipping region data fields $atomstructure['clipping_data'] = substr($atomdata, 10); // constitute a QuickDraw region. break; case 'load': // track LOAD settings atom $atomstructure['preload_start_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 4)); $atomstructure['preload_duration'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 4)); $atomstructure['preload_flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 8, 4)); $atomstructure['default_hints_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 12, 4)); $atomstructure['default_hints']['double_buffer'] = (bool) ($atomstructure['default_hints_raw'] & 0x0020); $atomstructure['default_hints']['high_quality'] = (bool) ($atomstructure['default_hints_raw'] & 0x0100); break; case 'tmcd': // TiMe CoDe atom case 'chap': // CHAPter list atom case 'sync': // SYNChronization atom case 'scpt': // tranSCriPT atom case 'ssrc': // non-primary SouRCe atom for ($i = 0; $i < (strlen($atomdata) % 4); $i++) { $atomstructure['track_id'][$i] = getid3_lib::BigEndian2Int(substr($atomdata, $i * 4, 4)); } break; case 'elst': // Edit LiST atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['number_entries'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 4)); for ($i = 0; $i < $atomstructure['number_entries']; $i++ ) { $atomstructure['edit_list'][$i]['track_duration'] = getid3_lib::BigEndian2Int(substr($atomdata, 8 + ($i * 12) + 0, 4)); $atomstructure['edit_list'][$i]['media_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 8 + ($i * 12) + 4, 4)); $atomstructure['edit_list'][$i]['media_rate'] = getid3_lib::BigEndian2Int(substr($atomdata, 8 + ($i * 12) + 8, 4)); } break; case 'kmat': // compressed MATte atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['matte_data_raw'] = substr($atomdata, 4); break; case 'ctab': // Color TABle atom $atomstructure['color_table_seed'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 4)); // hardcoded: 0x00000000 $atomstructure['color_table_flags'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 2)); // hardcoded: 0x8000 $atomstructure['color_table_size'] = getid3_lib::BigEndian2Int(substr($atomdata, 6, 2)) + 1; for ($colortableentry = 0; $colortableentry < $atomstructure['color_table_size']; $colortableentry++) { $atomstructure['color_table'][$colortableentry]['alpha'] = getid3_lib::BigEndian2Int(substr($atomdata, 8 + ($colortableentry * 8) + 0, 2)); $atomstructure['color_table'][$colortableentry]['red'] = getid3_lib::BigEndian2Int(substr($atomdata, 8 + ($colortableentry * 8) + 2, 2)); $atomstructure['color_table'][$colortableentry]['green'] = getid3_lib::BigEndian2Int(substr($atomdata, 8 + ($colortableentry * 8) + 4, 2)); $atomstructure['color_table'][$colortableentry]['blue'] = getid3_lib::BigEndian2Int(substr($atomdata, 8 + ($colortableentry * 8) + 6, 2)); } break; case 'mvhd': // MoVie HeaDer atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); $atomstructure['creation_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 4)); $atomstructure['modify_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 8, 4)); $atomstructure['time_scale'] = getid3_lib::BigEndian2Int(substr($atomdata, 12, 4)); $atomstructure['duration'] = getid3_lib::BigEndian2Int(substr($atomdata, 16, 4)); $atomstructure['preferred_rate'] = getid3_lib::FixedPoint16_16(substr($atomdata, 20, 4)); $atomstructure['preferred_volume'] = getid3_lib::FixedPoint8_8(substr($atomdata, 24, 2)); $atomstructure['reserved'] = substr($atomdata, 26, 10); $atomstructure['matrix_a'] = getid3_lib::FixedPoint16_16(substr($atomdata, 36, 4)); $atomstructure['matrix_b'] = getid3_lib::FixedPoint16_16(substr($atomdata, 40, 4)); $atomstructure['matrix_u'] = getid3_lib::FixedPoint16_16(substr($atomdata, 44, 4)); $atomstructure['matrix_c'] = getid3_lib::FixedPoint16_16(substr($atomdata, 48, 4)); $atomstructure['matrix_v'] = getid3_lib::FixedPoint16_16(substr($atomdata, 52, 4)); $atomstructure['matrix_d'] = getid3_lib::FixedPoint16_16(substr($atomdata, 56, 4)); $atomstructure['matrix_x'] = getid3_lib::FixedPoint2_30(substr($atomdata, 60, 4)); $atomstructure['matrix_y'] = getid3_lib::FixedPoint2_30(substr($atomdata, 64, 4)); $atomstructure['matrix_w'] = getid3_lib::FixedPoint2_30(substr($atomdata, 68, 4)); $atomstructure['preview_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 72, 4)); $atomstructure['preview_duration'] = getid3_lib::BigEndian2Int(substr($atomdata, 76, 4)); $atomstructure['poster_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 80, 4)); $atomstructure['selection_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 84, 4)); $atomstructure['selection_duration'] = getid3_lib::BigEndian2Int(substr($atomdata, 88, 4)); $atomstructure['current_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 92, 4)); $atomstructure['next_track_id'] = getid3_lib::BigEndian2Int(substr($atomdata, 96, 4)); if ($atomstructure['time_scale'] == 0) { $ThisFileInfo['error'][] = 'Corrupt Quicktime file: mvhd.time_scale == zero'; return false; } $atomstructure['creation_time_unix'] = getid3_lib::DateMac2Unix($atomstructure['creation_time']); $atomstructure['modify_time_unix'] = getid3_lib::DateMac2Unix($atomstructure['modify_time']); $ThisFileInfo['quicktime']['time_scale'] = $atomstructure['time_scale']; $ThisFileInfo['quicktime']['display_scale'] = $atomstructure['matrix_a']; $ThisFileInfo['playtime_seconds'] = $atomstructure['duration'] / $atomstructure['time_scale']; break; case 'tkhd': // TracK HeaDer atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); $atomstructure['creation_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 4)); $atomstructure['modify_time'] = getid3_lib::BigEndian2Int(substr($atomdata, 8, 4)); $atomstructure['trackid'] = getid3_lib::BigEndian2Int(substr($atomdata, 12, 4)); $atomstructure['reserved1'] = getid3_lib::BigEndian2Int(substr($atomdata, 16, 4)); $atomstructure['duration'] = getid3_lib::BigEndian2Int(substr($atomdata, 20, 4)); $atomstructure['reserved2'] = getid3_lib::BigEndian2Int(substr($atomdata, 24, 8)); $atomstructure['layer'] = getid3_lib::BigEndian2Int(substr($atomdata, 32, 2)); $atomstructure['alternate_group'] = getid3_lib::BigEndian2Int(substr($atomdata, 34, 2)); $atomstructure['volume'] = getid3_lib::FixedPoint8_8(substr($atomdata, 36, 2)); $atomstructure['reserved3'] = getid3_lib::BigEndian2Int(substr($atomdata, 38, 2)); $atomstructure['matrix_a'] = getid3_lib::FixedPoint16_16(substr($atomdata, 40, 4)); $atomstructure['matrix_b'] = getid3_lib::FixedPoint16_16(substr($atomdata, 44, 4)); $atomstructure['matrix_u'] = getid3_lib::FixedPoint16_16(substr($atomdata, 48, 4)); $atomstructure['matrix_c'] = getid3_lib::FixedPoint16_16(substr($atomdata, 52, 4)); $atomstructure['matrix_v'] = getid3_lib::FixedPoint16_16(substr($atomdata, 56, 4)); $atomstructure['matrix_d'] = getid3_lib::FixedPoint16_16(substr($atomdata, 60, 4)); $atomstructure['matrix_x'] = getid3_lib::FixedPoint2_30(substr($atomdata, 64, 4)); $atomstructure['matrix_y'] = getid3_lib::FixedPoint2_30(substr($atomdata, 68, 4)); $atomstructure['matrix_w'] = getid3_lib::FixedPoint2_30(substr($atomdata, 72, 4)); $atomstructure['width'] = getid3_lib::FixedPoint16_16(substr($atomdata, 76, 4)); $atomstructure['height'] = getid3_lib::FixedPoint16_16(substr($atomdata, 80, 4)); $atomstructure['flags']['enabled'] = (bool) ($atomstructure['flags_raw'] & 0x0001); $atomstructure['flags']['in_movie'] = (bool) ($atomstructure['flags_raw'] & 0x0002); $atomstructure['flags']['in_preview'] = (bool) ($atomstructure['flags_raw'] & 0x0004); $atomstructure['flags']['in_poster'] = (bool) ($atomstructure['flags_raw'] & 0x0008); $atomstructure['creation_time_unix'] = getid3_lib::DateMac2Unix($atomstructure['creation_time']); $atomstructure['modify_time_unix'] = getid3_lib::DateMac2Unix($atomstructure['modify_time']); if (!isset($ThisFileInfo['video']['resolution_x']) || !isset($ThisFileInfo['video']['resolution_y'])) { $ThisFileInfo['video']['resolution_x'] = $atomstructure['width']; $ThisFileInfo['video']['resolution_y'] = $atomstructure['height']; } $ThisFileInfo['video']['resolution_x'] = max($ThisFileInfo['video']['resolution_x'], $atomstructure['width']); $ThisFileInfo['video']['resolution_y'] = max($ThisFileInfo['video']['resolution_y'], $atomstructure['height']); if (!empty($ThisFileInfo['video']['resolution_x']) && !empty($ThisFileInfo['video']['resolution_y'])) { $ThisFileInfo['quicktime']['video']['resolution_x'] = $ThisFileInfo['video']['resolution_x']; $ThisFileInfo['quicktime']['video']['resolution_y'] = $ThisFileInfo['video']['resolution_y']; } else { unset($ThisFileInfo['video']['resolution_x']); unset($ThisFileInfo['video']['resolution_y']); unset($ThisFileInfo['quicktime']['video']); } break; case 'meta': // METAdata atom // http://www.geocities.com/xhelmboyx/quicktime/formats/qti-layout.txt $NextTagPosition = strpos($atomdata, '
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -