最新公告
  • 欢迎您光临源码资源下载站,一个优质的网站源码和小程序源码分享基地。
  • php 将lrc文件的歌词转换为str字幕

    正文概述 建站知识   2023-12-15 21:16:54  
    该函数是一段将歌词文件转换为SRT字幕文件的PHP代码。具体实现过程如下:
    去除多余的空白行,使用正则表达式 preg_replace("/^s*$/m", "", $lrc)。
    将歌词文本按行分割,使用 explode("n", $lrc)。
    循环每一行歌词内容,使用正则表达式 preg_match_all("/[(d{2}):(d{2})(?:.(d{2,3}))?]/", $lines[$i], $matches) 匹配时间标签和歌词内容。
    如果匹配到时间标签,则获取开始时间和结束时间。其中,若歌词内容直接跟在最后一个时间标签之后的情况,需要根据下一行的时间标签计算结束时间;否则,将结束时间设为开始时间+5秒。
    根据开始和结束时间以及歌词内容构建SRT字幕内容,并将其存入 $srt 字符串中。
    返回 $srt 字符串。
    这个函数的主要作用是将 LRC 格式的歌词转换为 SRT 格式的字幕,以便于在视频播放器中显示歌词。
    代码:
    function lrc2srt($lrc) {
        // print_r($lrc);
        // 去除多余的空白行
        $lrc = preg_replace("/^s*$/m", "", $lrc);
        
        // 按行分割
        $lines = explode("n", $lrc);
        $count = count($lines);
        // print_r($lines);
        $srt = '';
        $index = 1;
        for ($i = 0; $i < $count; $i++) {
            // 匹配时间标签和歌词内容
            preg_match_all("/[(d{2}):(d{2})(?:.(d{2,3}))?]/", $lines[$i], $matches);
            // print_r($matches);
            if (!empty($matches[0])) {
                // 获取时间标签
                $startHour = intval($matches[1][0]);
                $startMinute = intval($matches[2][0]);
                $startSecond = intval($matches[3][0]);
                // $startTime = sprintf("%02d:%02d:%02d,%03d", 0,$startHour, $startMinute, $startSecond);
                $startTime = sprintf('%02d:%02d:%02d,%03d', 0, $startHour, $startMinute, $startSecond * 10);
                // 获取歌词内容
                if (strpos($lines[$i], ']') === false) {
                    // 特殊情况:歌词内容直接跟在最后一个时间标签之后的情况
                    $lyric = trim(substr($lines[$i], strlen($matches[0][0])));
                    if ($i < $count - 1 && strpos($lines[$i + 1], '[') !== false) {
                        // 下一行是新的时间标签,计算结束时间
                        preg_match_all("/[(d{2}):(d{2})(?:.(d{2,3}))?]/", $lines[$i + 1], $nextMatches);
                        $endHour = intval($nextMatches[1][0]);
                        $endMinute = intval($nextMatches[2][0]);
                        $endSecond = intval($nextMatches[3][0]);
                    } else {
                        // 下一行无新的时间标签,将结束时间设为开始时间+5秒
                        $endHour = $startHour;
                        $endMinute = $startMinute;
                        $endSecond = $startSecond + 5;
                    }
                } else {
                    $lyric = trim(preg_replace("/[(d{2}):(d{2})(?:.(d{2,3}))?]/", "", $lines[$i]));
                    // 获取下一行的时间标签
                    preg_match_all("/[(d{2}):(d{2})(?:.(d{2,3}))?]/", $lines[$i + 1], $nextMatches);
                    if (!empty($nextMatches[0])) {
                        // 计算结束时间
                        $endHour = intval($nextMatches[1][0]);
                        $endMinute = intval($nextMatches[2][0]);
                        $endSecond = intval($nextMatches[3][0]);
                    } else if ($i !== $count - 1) {
                        // 下一行无时间标签,将结束时间设为开始时间+5秒
                        $endHour = $startHour;
                        $endMinute = $startMinute;
                        $endSecond = $startSecond + 5;
                    }
                }
                // 计算结束时间
                // $endTime = sprintf("%02d:%02d:%02d,%03d", 0, $endHour, $endMinute, $endSecond);
                $endTime = sprintf('%02d:%02d:%02d,%03d', 0, $endHour, $endMinute, ($endSecond - 5) * 10);
                if(!empty($lyric)){
                    // 构建SRT字幕内容
                    $srt .= $index . "n";
                    $srt .= $startTime . ' --> ' . $endTime . "n";
                    $srt .= $lyric . "nn";
        
                    $index++;
                }
            }
        }
        return $srt;
    }
    } php 将lrc文件的歌词转换为str字幕
    皓玉源码网,一个优质的源码资源平台!
    皓玉源码网 » php 将lrc文件的歌词转换为str字幕