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
我没有 Google 帐号也没 Google Drive ,根本不知道有什么办法可以匿名以压缩包形式发布这种东西……
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from VOPeditor Bot
好的,收到。我们以为你希望给那个频道引流人气所以发了频道链接,没事你说一下就改了~
应该不用被拉清单了,啊,这个感觉又放心又憋屈
可以鬼畜人民主席,但不需要负责,但是你不应该在道德上随便鬼畜一个人,但是中国法律也不需要理由实际搞你…… 不过鬼畜维尼熊的理由 🤔 一大堆好像
为什么要祈翠(习习卒)呢…… 疲劳倒车换档驾驶不知休息,当然要祈祷司机同志早日暴毙方便稍微好点的换班喽
[DuangSUSE@duangsuse]~/音乐% youtube-dl --proxy http://localhost:12333 -f 140 'https://www.youtube.com/watch?v=3uWW2kNE1Bo'
[youtube] 3uWW2kNE1Bo: Downloading webpage
[download] Destination: [中国新闻] 国家主席习近平发表二〇二〇年新年贺词 _ CCTV中文国际-3uWW2kNE1Bo.m4a
[download] 100% of 13.77MiB in 03:40
[ffmpeg] Correcting container in "[中国新闻] 国家主席习近平发表二〇二〇年新年贺词 _ CCTV中文国际-3uWW2kNE1Bo.m4a"

待会我亲自来提取字幕
🤔 感觉 Hachiko 的 timeline scrape 可以泛化一点,变成可以收一个任意值的流的GUI函数,其实这就是一个 realtime pitch 是否 enable 的问题而已,如果发现 nextPitch() 的返回类型不支持就不放音高好了
这样也可以给 reducer 提供一个 context 参数,方便操作文字绘制? (
./extract_subtitles.py --use-sharp -lang chi_sim -filter-code '~cvInGrayRange(it, 0xaa, 0xff)' -crop '0(0,0)[1,1] 1321(382,620)[536,53]' 2020xjp.mp4 --draw-plot --crop-debug
OSError: [Errno 24] Too many open files: 'frames/2020xjp.mp4/subtitle_191.png'
🌚 草,PIL 根本不是为 data statics 使用的
OSError: [Errno 24] Too many open files: 'frames/2020xjp.mp4/subtitle_1920.png'
sudo 也只能开这么多?

ulimit -Hn 查一下,接着
ulimit -n 200000 ...
……不愧是 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 后期再填或者干脆没有音高的话