05 创建本条字幕的开始时间

版权声明:本文为博主原创文章,转载请保留原作者名和原文链接。 https://blog.csdn.net/Likianta/article/details/79341190

本文编写“起始”按钮被触发时的事件。

“起始”按钮触发逻辑图

详细代码 onBtn1Click()

下面会贴出完整的代码,详细的注解会在//中给出。如果需要回顾其他章节的函数或者理解更深入,可以参考本套教程附加的文档:

以及官方文档(结合文末的参考页码查阅):

  • JavaScript Tools Guide CC.pdf
  • After Effects CS6 Scripting Guide.pdf
{
    // LK字幕生成工具(LK Subtitle Generator)

    function LK_SubtitleGenerator(thisObj)
    { 
        ...

        function onBtn1Click() {
            // 主要目标:创建本条字幕的开始时间

            // 检查文本内容是否为空:
            // 当存在时赋予本条字幕内容并增加编号;若不存在则弹出警告并中止后面的操作
            content = edt.text; // 获取编辑框中的文本
            if (content == "") { // 文本为空,弹出警告
                alert("Please input some contents", "Warning");
            } else { // 文本存在,继续
                // 接下来我们从一条字幕被“生产”出来的角度来理解期间经过了什么变化

                // 首先,新建一条字幕,编号+1
                id += 1;

                // 如果id是个位数,为了看起来整齐一些,对它进行补零操作:01, 02, 03...
                if (id < 10) {
                    item = listbox.add('item','0' + id);
                } else {
                    item = listbox.add('item', id);
                }

                // 获取当前时间并赋值给`start`列
                s = app.project.item(INDEX).time; // 获取该合成视频的当前时间
                // ↑ 假设我们的时间位于视频大约30s处,其格式为“30.1134467801134”
                s = timeToCurrentFormat(s, FPS); // 对时间进行转制并应用static帧速率
                // ↑ 将时间转换成“00:00:30:02”的形式
                item.subItems[0].text = s; // 当前字幕的第一子列(也就是`start`列)显示时间
                item.subItems[2].text = content; // 第三子列(也就是`content`列)显示文本

                // 列表滚动到底部
                listbox.revealItem(item);
                //item.selected = true;

                // 接下来判断上一条字幕的“结束时间”是否为空
                // 若为空则将当前开始时间赋给上条字幕的结束时间
                if (id > 1 && last_time == '') {
                    last_item.subItems[1].text = s; 
                }              

                // 记得文字上屏后要把编辑框内的文字清空
                edt.text = "";

                // 记录此次操作的item和time,以供后续回调
                last_item = item;
                last_time = item.subItems[1].text;
            }
        }

        ...
    }


    LK_SubtitleGenerator(this); // 执行该函数
}

实际效果图如下,可以看到所有字幕的“end”列都被下一字幕的“start”列数据填上了:

下章链接:06 创建本条字幕的结束时间

猜你喜欢

转载自blog.csdn.net/Likianta/article/details/79341190
05
今日推荐