ljx3916190 发表于 2019-4-24 22:41:35

有人可以把这个网站的歌词生成ass外挂字幕嘛

本帖最后由 ljx3916190 于 2019-4-24 22:43 编辑

https://www.jpmarumaru.com/tw/JPSongPlay-642.html
这个网站用来学歌超好用 双语字幕还带假名注音
但是每次都要重新加载 视频又是外挂youtobe的每次都要翻墙
重要的是木有办法整出来一个歌单一起放+.+
于素想下载下来听+.+
youtobe的视频这边自己能有办法
但是歌词写ass实在不会 T.T
检查元素能看到每句歌词的时间...
理论上知道怎么写ass的话整一个算法能把检查元素提取出来的东西编成ass+.+
又或者大佬们教窝肿么写ass 程序窝可以自己编
比如第一句这里 时间 假名 汉字 都有了 写成外挂字幕是啥样子+.+
<li lang="ja" class="li1"><span class="LyricsYomi" pk="25646" sn="0" st="00:00:12.148" style=""><ruby><rb>放</rb><rt>はな</rt></ruby>て! <ruby><rb>心</rb><rt>こころ</rt></ruby>に<ruby><rb>刻</rb><rt>きざ</rt></ruby>んだ<ruby><rb>夢</rb><rt>ゆめ</rt></ruby>を <ruby><rb>未来</rb><rt>みらい</rt></ruby>さえ<ruby><rb>置</rb><rt>お</rt></ruby>き<ruby><rb>去</rb><rt>ざ</rt></ruby>りにして</span><span class="LyricsYomiKana" pk="25646" style="display: none;">はなて! こころにきざんだゆめを みらいさえおきざりにして</span></li>
    <li class="li2"><span class="Translate_zh" pk="25646">放飛 心靈深處的夢想!與未來一起拋棄</span></li>

又或者dalao们有哪里可以获取大量像这样双语加假名注音的外挂歌词的+.+

拜谢

阿木良良荡漾 发表于 2019-4-24 23:34:57

写ass的话有三行,感觉一个难点在于 假名注音的对应位置

ljx3916190 发表于 2019-4-25 03:51:22

http://docs.aegisub.org/manual/Furigana_karaoke
搜了一下
这里好像有自动注音的
但是要标每个字的时间...
琢磨了半天没整出来不要每个字时间怎么注音@.@

hchdjp 发表于 2019-4-25 10:23:05

本帖最后由 hchdjp 于 2019-4-25 10:46 编辑

以前在tcax论坛找到过一份lua脚本,不过最近上不去tcax,忘了来源了。用法大概是(万事屋,よろずや)这样,选中之后自动化就可以了。不过我记得一年前用的时候可能按照需求魔改过,貌似会有bug,不过最近没时间修{:11_833:}

--[[
檔案名稱:kage_autoRuby.lua
腳本製作:影kage
自動上小字特效(非卡拉OK)

*請將文件放到Aegisub\automation\autoload資料夾內方可使用
*每次調完參數請到[自動化腳本管理]去[重新整理]
*套用的字幕樣式

Copyright (c) 2013-2014,Kage Maboroshi/TUcaptions, All rights reserved.

this script is a modifer of kage ruby sciprt

]]

--以下資料請不要亂動--

require "karaskel"

script_name = "自動上小字特效(非Karaoke)"
script_description = "自動上小字特效,使用方法(文字,小字) for ASS字幕研習社"
script_author = "Kage Maboroshi(影kage)"
script_modifer_author = "KiNen";
script_version = 1.0

--參數設定--
rubypadding = 0 --小字間距
rubyscale = 0.5 --小字縮放比例
fstyle = "TEXT_JP-furigana" --小字style


meta = nil;
styles = nil;

function Ruby(subs, sel)
      meta, styles = karaskel.collect_head(subs);
      -- for z, i in ipairs(sel) do
      --         local l = subs
      --         processline(subs,l,i);
      --         local l2 = subs;
      --               l2.comment = true;
      --                   subs = l2;
      -- end
      local n = 0
      local x = 0      
      for z, i in ipairs(sel) do
                n = n+x
                local l = subs
                x = processline(subs,l,i+n);
                if x == 1 then
                        x = 0;
                else      
                        local l2 = subs;
                        l2.comment = true;                        
                        subs = l2;
                end
      end
      aegisub.set_undo_point(script_name)
end

function processline(subs,line,li)
    line.comment = false;
      local originline = table.copy(line);
      
      local ktag="{\\k0}";
      local stylefs = styles[ line.style ].fontsize;
      local rubbyfs = stylefs * rubyscale;
      line.text = string.gsub(line.text,"%((.-),(.-)%)",ktag.."%1".."|".."%2"..ktag);
    local vl = table.copy(line);
      karaskel.preproc_line(subs, meta, styles, vl);
      
      originline.text = string.gsub(originline.text,"%((.-),(.-)%)","%1");
      originline.text = string.format("{\\pos(%d,%d)}",vl.x,vl.y)..originline.text;
      subs.insert(li+1,originline);
      
      for i = 1, vl.furi.n do
                local fl = table.copy(line)
                local rlx = vl.left + vl.kara.i].center;
                local rly = vl.top - rubbyfs/2 - rubypadding;
                fl.style = fstyle;
                fl.text = string.format("{\\an5\\fs%d\\pos(%d,%d)}%s",rubbyfs,rlx,rly,vl.furi.text);
                subs.insert(li+1+i,fl);
      end
      return vl.furi.n + 1;
end


aegisub.register_macro(script_name, script_description, Ruby)

ljx3916190 发表于 2019-4-25 11:37:31

本帖最后由 ljx3916190 于 2019-4-25 13:31 编辑

琢磨了一下还是没整明白
用那个karaoke的自动化脚本的时候
一开始要输这两行

Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template syl,{\pos(!line.left+syl.center!,!line.middle!)\an5\k!syl.start_time/10!\k$kdur}
Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,template furi,{\pos(!line.left+syl.center!,!line.middle-line.height!)\an5\k!syl.start_time/10!\k$kdur}

然后是{\k××时间}汉字|假名

这个脚本是怎么调用的...
搞定啦
Comment: 0,00:00:12.148,0:00:19.148,Default,,0,0,0,,(放,はな)て! (心,こころ)に(刻,きざ)んだ(夢,ゆめ)を(未来,みらい)さえ(置,お)き(去,ざ)りにして应该是论坛这个代码复制粘贴的问题
缩进的tab载入不了一直error
这下问题就变成从检查元素的txt里找本句时间,下句时间,<ruby>变成(),<rt>变成, 窝去找个东西做文字处理+.+

ljx3916190 发表于 2019-4-25 21:01:59

bat好蠢啊 又是<又是!各种报错
T.T

NoobNeo 发表于 2019-4-26 00:04:14

本帖最后由 NoobNeo 于 2019-4-26 00:05 编辑

大概是这样的吧


注音脚本用的@hchdjp提供的

ljx3916190 发表于 2019-4-26 04:45:16

不知道怎么搞了
提取文字跟时间自己总算是整出来了
但是字体头好大
好不容易在电脑上注音能对齐了 ass文件朝爪机上一发 就歪了
ls内位仁兄的ass在爪机上也没歪
应该还是哪里姿势不对
dalao们教教窝肿么整吧T.T


NoobNeo 发表于 2019-4-26 07:22:52

本帖最后由 NoobNeo 于 2019-4-26 07:42 编辑

附上源码
python要3.0及以上

代码简单注释了一下, 楼主想要批量处理的话, 自己再稍微改造下吧
# -*- coding: UTF-8 -*-
import codecs
import json
import requests

# 字幕保存路径, {}用于替换文件名
format_path = 'D:/youtube-dl/{}.ass'


# song_pk: 歌曲PK
def api(song_pk):
    # 样式名修改的话这里也要修改
    format_ass = 'Dialogue: 0,{},{},Jp,,0,0,0,,{}\r\n'
    format_tr_ass = 'Dialogue: 0,{},{},Tr,,0,0,0,,{}\r\n'
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'
    referer = 'https://www.jpmarumaru.com/tw/JPSongPlay-' + str(song_pk) + '.html'
    api_url = 'https://www.jpmarumaru.com/tw/api/json_JPSongTrack.asp'
    song_data = 'SongPK=' + str(song_pk)
    # api headers
    headers = {
      'Connection': 'Keep-alive',
      'User-Agent': user_agent,
      'Referer': referer,
      'Origin': 'https://www.jpmarumaru.com',
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    }
    req = requests.post(api_url, headers=headers, data=song_data)
    js = json.loads(req.text)
    ass_file = codecs.open(format_path.format(js['Name']), 'w', 'utf-8')
    # ass Header
    ass_file.write('\r\n'
                   '; Script generated by Aegisub 3.2.2\r\n'
                   '; http://www.aegisub.org/\r\n'
                   'Title: Default Aegisub file\r\n'
                   'ScriptType: v4.00+\r\n'
                   'WrapStyle: 0\r\n'
                   'ScaledBorderAndShadow: yes\r\n'
                   'YCbCr Matrix: None\r\n'
                   '\r\n'
                   'Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\r\n'
                   # 日文样式
                   'Style: Jp,Noto Sans CJK SC Medium,36,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1,0,2,10,10,20,1\r\n'
                   # 译文样式
                   'Style: Tr,Noto Sans CJK SC Medium,36,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1,0,8,10,10,20,1\r\n'
                   # 注音样式
                   'Style: TEXT_JP-furigana,Noto Sans CJK SC Medium,36,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1,0,8,10,10,20,1\r\n'
                   '\r\n'
                   'Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\r\n')
    start_time = js['StartTime']
    end_time = js['EndTime']
    ass_yomi = []
    ass_tr = js['Translate_zh']

    for i in js['LyricsYomi']:
      ass_yomi.append(i.replace('<ruby><rb>', '(').replace('</rb><rt>', ',').replace('</rt></ruby>', ')'))
    # 先写入日文歌词, 方便后期自动化时选定
    for index in range(0, len(ass_yomi)):
      ass_file.write(format_ass.format(start_time, end_time, ass_yomi))
    # 再写入译文歌词, 不需要的话注解掉
    for index in range(0, len(ass_tr)):
      ass_file.write(format_tr_ass.format(start_time, end_time, ass_tr))

    ass_file.close()


# Demo
api(642)




ljx3916190 发表于 2019-4-26 09:06:16

NoobNeo 发表于 2019-4-26 07:22
附上源码
python要3.0及以上



虽然我很鸡的跑去用了pascal
但是感觉应该不是代码的问题啊
Comment: 0,0:00:12.14,0:00:19.07,Jp,,0,0,0,,(放,はな)て! (心,こころ)に(刻,きざ)んだ(夢,ゆめ)を (未来,みらい)さえ(置,お)き(去,ざ)りにして
同样的一句
我跟你这里差的只有自己之后调轴调了提前0.5秒还有小写的jp
但是后面生成的注音位置就不一样了
一个是311 一个是400



这个是我的

这个是ls的


神奇的是我这里点一下自动化出来的是388

我得知道自己是哪里姿势不对T.T
难受...
页: [1] 2
查看完整版本: 有人可以把这个网站的歌词生成ass外挂字幕嘛