duangsuse::Echo
719 subscribers
4.28K photos
130 videos
583 files
6.49K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
……不愧是 Tesseract OCR, 我用白色文字它就看不出
and... PIPE="__import__('re').sub('[\s,.,、。“”]','',it.strip())" ./timeline_ops.py merge frames/2020xjp.mp4/timeline.txt 0.55 | ./timeline_ops.py to-lrc 25.0 srt > 2020xjp.srt
2020xjp.srt
11.4 KB
累死了,我居然为了包子熬夜做了这个东西…… 仅仅是为了方便查找吐字而已,emmm
#Python #code createFile("a"); createFile("a.txt")
from os.path import isfile

def infRange(start, step = 1):
acc = start - step
while True: acc += step; yield acc

def createFile(name, mode = "w+"):
if not isfile(name): fp = name
else:
(base, ext) = splitFilename(name)
fp = next(filter(lambda fp: not isfile(fp), map(lambda i: f"{base}{i}{ext}", infRange(1))))
return open(fp, mode)

def splitFilename(name):
parts = name.rsplit(".")
return (parts[0], "" if len(parts) == 1 else "."+parts[1])


impreative equivalent:
def createFile(name):
if not isfile(name): fp = name
else:
(base, ext) = splitFilename(name)
acc = 1
def accFp():
nonlocal acc
f"{base}{acc}{ext}"
while isfile(accFp()): acc += 1
fp = accFp()
return open(fp, "w+")
Forwarded from 依云
判断路径是否存在用 exists 啊
刚才我大体想一下 Hachiko 用于声库创建的可能性,
发现取拼音的部分只需要一个 hanzi2pinyin 函数即可(不是特别困难也能兼容 a1 a2 这种文件名,因为处理的只是单个汉字的文件名),主要还是数据的问题,是在整个音频层面做处理还是先利用既成字幕划分成 [subtitle].ogg 这样的音频文件然后再让用户打出时间线划分为 [lyric].ogg ,UI 上面会费功夫
显然还是前者的输出更能保持信息量

我考虑了GUI 有一个 subtitle | start | duration 列表,然后点进去 guiReadPitch(subtitle, audio
[start:end])
最后再合并回来,可是后来想想我们已经有 srt2mid 这样可以创建 SRT / MID+Lyrics 的等价关系了,合并可以直接转 mid 用 SynthesizerV Editor 然后再 back srt…… 所以主要是添加一个开始时间命令行参数以及直接把列表在命令行指定的问题,UI 做多少另说

整理一下我发现除了要增强 Hachiko 目前的命令行可组合性(允许直接提供数据流以及录制的seek开始时间),还需要一个能按字幕切音频的脚本以及一个批量重命名的脚本

大致上工作流是这样:
1. 打开 GUI,选择一个 subtitle 以文本和开始时间启动 hachiko,接受它的输出吐字时间线 srt (添加 -o stdout 功能)
2. 前端要处理显式待录制状态的问题,随时允许用户输出合并后的 srt (srt2mid 也要添加 from-lyrics 功能了...)
3. 利用切字幕脚本按字幕切出每个波形采样,重名自动解决
4. 用批量重命名脚本按汉字规则 (pinyin(it[0]) + it[1:] ) 转换文件名

合理化一下文件模块,发现必要两个:

+ hachiko_segment GUI用于录制和合并所有字幕的吐字时间线,当然不是必要的(单纯利用 hachiko 和外部 mid lyrics 编辑也能合并出来)但会很方便
+ srt_segment / srt_segment rename 用于解决后两个流程
Audio
https://t.me/dsuse/14002 👆🏼 还记得上面的曲子吗?
好了,现在 srt2mid 已经可以用 mid 文件来表示 srt 文件里的时轴文字信息了…… 意味着你也可以用 Hachiko 来打字幕,如果你不想装 SynthV Editor 后期再填或者干脆没有音高的话
["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
发现也可以解析成 Tuple 的形式
Forwarded from duangsuse Throws
def readDazibao(text):
entries = map(str.strip, text.split("\n\n"))
for entry in entries:
entryMap = dict()
key = None; content = ""
for line in entry.split("\n"): # k: \n v
if line.endswith(":"):
if key != None: entryMap[key] = content; content = ""
key = line[:-1]; continue
else: content += f"{line}\n"
entryMap[key] = content
yield entryMap
a  = document.createElement("a");
a.innerText = "你好";
a.position = "absolute";
a.style.left = 100;
a.style.top = 100;

可以实现纵向:
a.style.writingMode = "tb-rl"
字号:
a.style.fontSize="100px"
a.style.fontWeight="bold"

@font-face {
font-family: '';
src: url() format();
}

var fileref = document.createElement("link");
fileref.rel = "stylesheet";
fileref.type = "text/css";
fileref.href = "filename";
document.getElementsByTagName("head")[0].appendChild(fileref)
https://font-converter.net/en
function cssFontFamilyDef(name, url) {
return `@font-face { font-family: ${name}; src: url(${url}) format('woff2'); }`;
}
function appendFont(url) {
document.head.appendChild(element("link",
configured(withAttr("rel", "stylesheet"), e => { e.innerHtml = cssFontFamilyDef(font_name.value, url); })
));
}

删掉的好代码…… 因为我看到了新的可用API
https://www.filamentgroup.com/lab/js-web-fonts.html
function* readSourceTable(text) { //< obsoleted
let entries = text.split("\n\n");
for (let entry of entries) {
let entryList = [];
let key = null; let content = "";
for (let line of entry.split("\n").map(it => it.trim())) {
if (line.length == 0) continue;
if (line.endsWith(":")) {
if (key != null) entryList.push([key, content]);
key = line.substring(0, line.length-1); content = "";
} else content += `${line}\n`;
}
entryList.push([key, content]);
yield entryList;
}
}
#JavaScript #web 丢掉的代码,虽然也不怎么厉害
sed 's/“/%E2%80%9C/g;s/”/%E2%80%9D/g' #linux

https://duangsuse-valid-projects.github.io/Share/HTMLs/文字图片模板化生成.html?img-url=https%3A%2F%2Fi.loli.net%2F2020%2F04%2F30%2F8GWwh4ZkPJD92lV.jpg&points=(115%2C380)(60%2C1000)(500%2C380)(430%2C1000)&fonts=(Serif%3A120%2Cbold%2Ccolor%3Dwhite%2Cwriting-mode%3Dvertical-lr)(Sans%3A20%2Cnormal%2Ccolor%3Dwhite%2Cwriting-mode%3Dhorizontal-tb%2Ctext-align%3Dcenter)&source-table=霸权威胁--暂停资助世卫组织%0A认为世卫组织应当听其指挥--%0A支持捐助--在前期向世卫组织捐款%0A2000万美元现汇的基础上%0A增加3000万美元现汇捐款%0A%3D%3D%0A政治污名--一些政客把新冠病毒称为%0A%E2%80%9C中国病毒%E2%80%9D--%0A理性应对--病毒没有国籍%0A病毒是全人类的敌人%0A%3D%3D%0A大搞阴谋论--炮制作%E2%80%9C病毒源与武汉病毒%0A研究所有关%E2%80%9D%0A等阴谋论,居心区测--%0A讲科学论证--新冠病毒源头和传播途径%0A是复杂的科学问题%0A应当交由科学家和医学专家去研究%0A%3D%3D%0A诋毁抹黑--%0A一些美政客指责中方掩盖疫情%0A要求对中方进行调查和索赔--%0A公开透明--第一时间向世界卫生组织报告疫情%0A第一时间同各国分享新冠病毒基因序列%0A%3D%3D%0A甩锅推责--一些政客散布有关中方防控工作%0A不实言论,准名宇身防控不力的责任--%0A全力抗疫--中国力量、中国效率、中国速度%0A受到国际社会广泛称赞%0A%3D%3D%0A充满傲慢--一度将新冠肺炎疫情比作%0A%E2%80%9C大号流感%E2%80%9D%0A无知傲慢导致漠视拖延,%0A浪费近两个月时间--%0A及时通报--中方自1月3日起%0A就开始向美方定期通报信息%0A美方从中方获取间情信息%0A和数据渠道畅通%0A%3D%3D%0A美国优先--公然抢劫多国口罩%0A意图独占德企正研制的疫苗等%0A%E2%80%9C民族自私主义%E2%80%9D展露无遗--%0A同舟共济--第一时间开展疫情防控专家%0A国际合作%0A第一时间向其他疫情爆发国家伸出援手%0A%3D%3D%0A颠倒是非--美政客称中国围积个人防护设备%0A牟取暴利--%0A竭尽所能--3月1日至4月17日,%0A中国对美所供各类口罩18.964亿只%0A仅以中国向美国提供的各类%0A抗疫物资为例,谎言就不攻自破%0A%3D%3D%0A言而无信--美官员曾经表示向包括中国在内的有关%0A国家提供1亿美元援助%0A而中方从未受到以美国政府名义%0A捐助的资金物资--%0A说到做到--向150多个国家国籍医疗组织提供医%0A疗物资援助%0A向多国派出医疗专家组,为各国%0A在华进行商业采购提供便利