=h($m['title'])?>
=h($m['description'])?>
=h(round($size/1048576,1))?> MB
nice_title($base), 'date' => date('Y-m-d', filemtime($path)), 'location' => '', 'description' => '']; if (preg_match('/^(\d{4})(\d{2})(\d{2})[_-](.+)$/', $base, $m)) { $meta['date'] = "$m[1]-$m[2]-$m[3]"; $meta['title'] = nice_title($m[4]); } foreach ([dirname($path).'/'.$base.'.txt', dirname($path).'/'.$base.'.data.txt'] as $sidecar) { if (!is_file($sidecar)) continue; foreach (file($sidecar, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) { if (!str_contains($line, ':')) continue; [$k, $v] = array_map('trim', explode(':', $line, 2)); $k = strtolower($k); if (in_array($k, ['title','date','location','place','description'], true)) $meta[$k === 'place' ? 'location' : $k] = $v; } } $ffprobe = trim((string)shell_exec('command -v ffprobe 2>/dev/null')); if ($ffprobe !== '') { $json = shell_exec(escapeshellarg($ffprobe).' -v quiet -print_format json -show_entries format_tags '.escapeshellarg($path).' 2>/dev/null'); $data = json_decode((string)$json, true); $tags = $data['format']['tags'] ?? []; $lower = []; foreach ($tags as $k => $v) $lower[strtolower($k)] = $v; if (!empty($lower['title'])) $meta['title'] = $lower['title']; if (!empty($lower['date'])) { $meta['date'] = $lower['date']; } elseif (!empty($lower['creation_time'])) { $meta['date'] = substr($lower['creation_time'], 0, 10); } foreach (['location','place','location-eng','com.apple.quicktime.location.name','com.apple.quicktime.location.iso6709'] as $k) { if (!empty($lower[$k])) { $meta['location'] = $lower[$k]; break; } } foreach (['description','synopsis'] as $k) { if (!empty($lower[$k])) { $meta['description'] = $lower[$k]; break; } } } return $meta; } $videos = glob($config['videos_dir'].'/*.{mp4,webm,mov,m4v}', GLOB_BRACE) ?: []; usort($videos, fn($a,$b)=>filemtime($b)<=>filemtime($a)); $page=max(1,(int)($_GET['page']??1)); $per=$config['items_per_page']; $total=count($videos); $pages=max(1,(int)ceil($total/$per)); $page=min($page,$pages); $slice=array_slice($videos,($page-1)*$per,$per); ?>
No videos yet.
=h($m['description'])?>
=h(round($size/1048576,1))?> MB