有人可以把这个网站的歌词生成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们有哪里可以获取大量像这样双语加假名注音的外挂歌词的+.+
拜谢
写ass的话有三行,感觉一个难点在于 假名注音的对应位置 http://docs.aegisub.org/manual/Furigana_karaoke
搜了一下
这里好像有自动注音的
但是要标每个字的时间...
琢磨了半天没整出来不要每个字时间怎么注音@.@
本帖最后由 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 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>变成, 窝去找个东西做文字处理+.+
bat好蠢啊 又是<又是!各种报错
T.T 本帖最后由 NoobNeo 于 2019-4-26 00:05 编辑
大概是这样的吧
注音脚本用的@hchdjp提供的 不知道怎么搞了
提取文字跟时间自己总算是整出来了
但是字体头好大
好不容易在电脑上注音能对齐了 ass文件朝爪机上一发 就歪了
ls内位仁兄的ass在爪机上也没歪
应该还是哪里姿势不对
dalao们教教窝肿么整吧T.T
本帖最后由 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)
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