我正在try 添加字幕到我的Ploly Dash视频播放器,即VTT字幕覆盖,在Python中.我找不到任何关于这方面的例子或说明.

from dash import Dash, dcc, html, Input, Output, State
import dash_player

在某个地方的html Div中:

dash_player.DashPlayer(
                    id='vid1',
                    controls = True,
                    url = "http://86.47.173.33:1935/playlist.m3u8",
                    width='100%',
                    style={'margin-top':'20px','margin-bottom':'20px'},
                    playing= True,
                    muted= True
                )

在文档中,DashPlayer对象没有处理字幕轨道的方法.也许这是可以在css中处理的事情?

寻找一些Reaction球员的例子.

推荐答案

最后,我的策略是在布局中创建一个div(‘字幕-容器’)作为DashPlayer的sibling 项:

dash_player.DashPlayer(
    id='vid',
    controls = True,
    url = None,
    style={'margin-top':'20px','margin-bottom':'20px', 'margin-left':'10px'},
    playing= False,
    muted= False
),
html.Div(
    id='subtitle-container',
    children=[html.P("subtitle text")],
    style={}
),

我使用DashPlayer的‘Current-Time’回调在字幕容器中实现了自己的逻辑来显示字幕.

 @app.callback([Output('subtitle-container','children'),Output('subtitle-container', 'style')],
              [Input('vid', 'currentTime')])
def update_subtitles(current_time):

    subtitle_text = get_subtitle_for_time(current_time)

    # Determine whether subtitles are being displayed
    subtitles_displayed = bool(subtitle_text)

    # Set the alpha value based on whether subtitles are being displayed
    alpha_value = 0 if not subtitles_displayed else 0.5

    # Update subtitle container style
    subtitle_style={
                'position':'absolute',
                'bottom':'6%',
                'left': '25%',
                'width':'50%',
                'background-color':f'rgba(30,30,30, {alpha_value})',
                'padding':'5px',
                'whiteSpace':'pre-wrap',
                'color':'white',
                'text-align':'center'
                }

    return subtitle_text, subtitle_style

该回调根据播放器的当前时间返回相应的字幕,显示在‘subtitle-tainer’中.我还实现了确定字幕样式的逻辑,当字幕存在时是半透明的黑色背景,而当没有字幕时没有背景(Alpha=0).

为了最初收集所有字幕,我解析了一个SRT文件,以生成一个字幕项列表.每个标题项都是3个项目的列表,即开始时间、结束时间和标题文本.例如

[1185.65, 1193.74, "You're the one who was frowning.\nFrisco. San Francisco. Exactly.']. 

计时已从原始SRT时间戳转换而来.

获得球员当前时间的适当提示很简单:

def get_subtitle_for_time(current_time):
    for caption in captions:
        if current_time <= caption[1]:
            if current_time >= caption[0]:
                return caption[2]
            return ''

subtitle container overlayed of DashPlayer

Python相关问答推荐

从收件箱获取特定列中的重复行

使用regex分析具有特定字符的字符串(如果它们存在)

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

有症状地 destruct 了Python中的regex?

_repr_html_实现自定义__getattr_时未显示

将输入管道传输到正在运行的Python脚本中

如何使用数组的最小条目拆分数组

Julia CSV for Python中的等效性Pandas index_col参数

在np数组上实现无重叠的二维滑动窗口

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

使用groupby方法移除公共子字符串

从嵌套的yaml创建一个嵌套字符串,后面跟着点

索引到 torch 张量,沿轴具有可变长度索引

名为__main__. py的Python模块在导入时不运行'

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

用渐近模计算含符号的矩阵乘法

Flash只从html表单中获取一个值

python sklearn ValueError:使用序列设置数组元素

Cython无法识别Numpy类型

Pandas—堆栈多索引头,但不包括第一列