🤔开启了
--use-sharp 后真的把时轴打得非常好./extract_subtitles.py --crop-debug -crop '(1106,905)(680,62)' -filter-code '~cvInGrayRange(it, 0x00, 0xaa)' -lang chi_sim --draw-plot --use-sharp --chunk-size 1200 HxN.mkv
./timeline_ops.py merge frames/timeline_HxN.mkv.txt 0.25 |./timeline_ops.py to-lrc 60 srt >mux.srtThis media is not supported in your browser
VIEW IN TELEGRAM
#GitHub #Python #project duangsuse/extract-subtitles (a fork) 内嵌字幕提取(白字为提取后的字幕,半自动需要手工修改部分文本和设置优化滤镜Python代码) 视频来源YouTube
#DontKnow 🤔早上我起床前问了下duangsuse (自言自语)
代码风格上,为什么要把 ES6 generator 的 * 直接贴在 function 的后面呢
回答说,因为这样语义更明确, generator function 就是
那 C++ 里为什么要写
“语义更明确,指针当然要贴着类型”
等等……
“🤪看来以后得区别对待 C 和 ES6 的星号了”
代码风格上,为什么要把 ES6 generator 的 * 直接贴在 function 的后面呢
回答说,因为这样语义更明确, generator function 就是
function*。那 C++ 里为什么要写
Ui::MainWindow* ui; 呢?“语义更明确,指针当然要贴着类型”
等等……
int *a, *b; 呢“🤪看来以后得区别对待 C 和 ES6 的星号了”
为了在 #Python 里在保证类型安全的同时尽量减少开销,我决定新特性 "multi-crop" 直接这样实现:
参数输入上,外部利用 argparse 的
直接在主程序进行列表的填充工作。不过,我们会为
大致意图上是这样,在 make extractor 和 call extractor 里都得加逻辑,分支都不止两个,比较麻烦
不用额外判断的原因是直接利用 Python 的方法解析,传递不同 class 的对象进去
-crop "0 (x,y)(w,h)" -crop "233 (x,y)(w,h)" 参数输入上,外部利用 argparse 的
nargs="*" 来进行,内部使用 List<Rect>? (index=frame_no) 来进行表达。直接在主程序进行列表的填充工作。不过,我们会为
len(cfg.crop) == 1 的情况进行特殊处理,让每帧处理时不必显式判断是否要 index 这个 list。len_crop = len(cfg.crop)
(SimpleExtract if len_prop <= 1 else ComplexExtract) (None if len_crop == 0 else cfg.prop) 大致意图上是这样,在 make extractor 和 call extractor 里都得加逻辑,分支都不止两个,比较麻烦
不用额外判断的原因是直接利用 Python 的方法解析,传递不同 class 的对象进去
from itertools import repeat
def zipWithNext(xs: list):
for i in range(1, len(xs)):
yield (xs[i-1], xs[i])
def expandStartList(size, entries, key = lambda it: it[0], value = lambda it: it[1]):
sorted_entries = sorted(entries, key=key)
items = list(repeat(None, size))
def assignRange(start, stop, value):
items[start:stop] = repeat(value, stop - start)
for (a, b) in zipWithNext(sorted_entries):
assignRange(key(a), key(b), value(a))
last_item = sorted_entries[-1]
assignRange(key(last_item), size, value(last_item))
return items
duangsuse::Echo
看起来大功告成
现在终于大功告成了
In [18]: expandStartList(10, [(3, 5), (9, 1)])
Out[18]: [None, None, None, 5, 5, 5, 5, 5, 5, 1]
In [18]: expandStartList(10, [(3, 5), (9, 1)])
Out[18]: [None, None, None, 5, 5, 5, 5, 5, 5, 1]