【问题标题】:YouTube auto generated caption file has non sequential timingYouTube 自动生成的字幕文件具有非连续时序
【发布时间】:2017-03-20 05:37:59
【问题描述】:

我正在使用 YouTube API 3 上传视频,然后根据自动字幕请求他们的字幕文件,我得到了以下非连续时间的文件


1

00:00:00,000 --> 00:00:06,629

周末愉快,我的周末过得怎么样

2

00:00:05,549 --> 00:00:14,960

别这样我们是

3

00:00:06,629 --> 00:00:14,960

是的,这很好,罗马是的,我得去


示例视频:https://youtu.be/F2TVsMD_bDQ

那么为什么每个字幕槽的结尾不是下一个的第一个?

【问题讨论】:

标签: java youtube youtube-api


【解决方案1】:

在搜索了几天并在 YouTube 文档上进行挖掘之后,我发现没有任何东西可以解决这个问题,所以我自己解决了这个问题我使用正则表达式创建了代码来修复字幕时间顺序我已经针对 5 个视频测试了它并且它有效完美:

/**
 *
 * @author youans
 */
public class SubtitleCorrector {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            String fileContent = null;
            File inFile = new File("/IN_DIRECTORY/Test Video Bad Format.srt");
            BufferedReader br = new BufferedReader(new FileReader(inFile));
            try {
                StringBuilder sb = new StringBuilder();
                String line = br.readLine();

                while (line != null) {
                    sb.append(line);
                    sb.append("\n");
                    line = br.readLine();
                }
                fileContent = sb.toString();
            } finally {
                br.close();
            }
            String ragex = "\\d{2}:\\d{2}:\\d{2},\\d{3}";
            List<String> slotsTiming = new ArrayList(new TreeSet(getAllMatches(fileContent, ragex)));

            System.out.println(slotsTiming.size());

            String timingRagex = "(((^1\n)|(\\n\\d+\n))(\\d{2}:\\d{2}:\\d{2},\\d{3}.*\\d{2}:\\d{2}:\\d{2},\\d{3}))";
            ragex = timingRagex + "[A-Za-z-,;'\"\\s]+";

            List<String> subtitleSlots = getAllMatches(fileContent, ragex);
            List<String> textOnlySlots = new ArrayList();

            for (String subtitleSlot : subtitleSlots) {
                textOnlySlots.add(subtitleSlot.replaceAll(timingRagex + "|\n", ""));
            }
            StringBuilder sb = new StringBuilder("");

            for (int i = 0; i < textOnlySlots.size(); i++) {
                sb.append((i + 1)).append("\n").append(slotsTiming.get(i)).append(" --> ").append(slotsTiming.get(i + 1)).append("\n").append(textOnlySlots.get(i)).append("\n\n");
            }

            File outFile = new File("/OUT_DIRECTOR/" + inFile.getName().replaceFirst("[.][^.]+$|bad format", "") + "_edited.SRT");
            PrintWriter pw = new PrintWriter(outFile);

            pw.write(sb.toString());
            pw.flush();
            pw.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

    public static List<String> getAllMatches(String text, String regex) {
        List matches = new ArrayList<>();
        Matcher m = Pattern.compile("(?=(" + regex + "))").matcher(text);
        while (m.find()) {
            matches.add(m.group(1));
        }
        return matches;
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 2017-08-12
    • 2013-03-03
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多