Android Srt和Ass字幕解析器

简介

乐乐音乐播放器最近添加了MV功能,由于部分MV没有字幕,所以这里为乐乐音乐播放器添加一个外挂字幕的开源库,目前该开源库主要简单支持srt和ass字幕文件。

字幕显示方式

{\fn华文楷体\fs16\1c&H3CF1F3&\b1}影片壓制

转换

<font color="#F3F13C"><b>影片壓制</b></font>

显示方式主要是以html的方式显示,所以现在只支持读取字幕文本、html文本、颜色和加粗等基本功能,没有特效。

字幕格式解析

正则表达式

  • 时间标签

    \d+:\d+:\d+,\d+

  • 分隔出每一项font标签

      <font color="#F3F13C"榮譽出品==--</font>
    

    (<font[<]+>)(<[bius]>)*[<]+(</[bius]>)*(</font>)

  • 分隔出字幕内容

    <font color="#FF00FF"><b><u>http://cmct.cc</u></b></font>

    ((<font[^<]+>)(<[bius]>)|(</[bius]>)(</font>))

  • 分隔ass

     Dialogue: 0,0:00:02.00,0:00:07.00,Default,,0000,0000,0001,,{\fn华文楷体\fs16\1c&H3CF1F3&\b0}--==本影片由 {\1c&HFF8000&\b1}CMCT 团队{\fn华文楷体\1c&H3CF1F3&\b0} 荣誉出品==--\N更多精彩影视 请访问 {\fnCronos Pro Subhead\1c&HFF00FF&\b1}http://cmct.cc{\r}

Dialogue\S\s+\d+,\d+:\d+:\d+.\d+,\d+:\d+:\d+.\d+,\S+,

srt字幕

SRT字幕的颜色以及一些特效的设置

ass字幕

ASS字幕格式规范

预览图

srt字幕

image

ass字幕

image

Gradle

1.root build.gradle

`allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}`

2.app build.gradle

dependencies { implementation 'com.github.zhangliangming:Subtitle:v1.2' }

混淆注意

-keep class com.zlm.subtitlelibrary.** { *; }

调用Demo

链接: https://pan.baidu.com/s/1j-4wbtiNIfRhypb4uEnX6g 提取码: t8dj

声明

该项目的代码和内容仅用于学习用途

项目地址

https://github.com/zhangliangming/Subtitle.git

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在 Android 应用中显示 SRT 字幕,需要进行以下步骤: 1. 解析 SRT 文件:SRT 文件是一种简单的文本文件,可以使用 Java 中的 BufferedReader 和 InputStreamReader 类来读取文件并将其解析为字符串或其他格式。你可以使用正则表达式或字符串操作将每个字幕的时间戳、文本和样式等信息分离出来。 2. 将字幕与视频同步:要将字幕与视频同步,你需要使用视频播放器的 API 来确定当前播放位置,并将相应的字幕显示在屏幕上。你可以使用 Android 中的 MediaPlayer 类或 ExoPlayer 库来播放视频,并使用 Handler 或 Timer 来定期检查播放位置并更新字幕。 3. 显示字幕:一旦你获得了每个字幕的信息并将其与视频同步,你需要将其显示在屏幕上。你可以使用 Android 中的 TextView 或自定义视图来显示字幕,并使用 SpannableString 类来设置样式。 这里是一个简单的代码示例,演示了如何解析 SRT 文件并将其显示在 TextView 中: ``` private void displaySubtitles(String subtitlesFile) { try { BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(subtitlesFile), "UTF-8")); String line; StringBuilder subtitleText = new StringBuilder(); while ((line = reader.readLine()) != null) { if (line.matches("\\d+")) { // This is the subtitle index subtitleText.append("\n"); } else if (line.matches("\\d{2}:\\d{2}:\\d{2},\\d{3} --> \\d{2}:\\d{2}:\\d{2},\\d{3}")) { // This is the subtitle timecode } else if (!line.isEmpty()) { // This is the subtitle text subtitleText.append(line).append(" "); } else { // This is the end of the subtitle TextView subtitleView = findViewById(R.id.subtitle_view); SpannableString subtitleSpannable = new SpannableString(subtitleText.toString()); // Set the subtitle style here subtitleView.setText(subtitleSpannable); subtitleText = new StringBuilder(); } } reader.close(); } catch (IOException e) { e.printStackTrace(); } } ``` 请注意,此示例仅演示了如何解析 SRT 文件并将其显示在 TextView 中,并不包括与视频同步的代码。要将其与视频同步,你需要在适当的时间调用 `displaySubtitles()` 方法,并将相应的字幕显示在屏幕上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值