<?xml version=”1.0” encoding=”utf-8”?>
- 2025-05-27 09:47:43
现在很多电影视频都可以直接在线看, 不像早些年, 需要先下载到本地再看.
最近找电影的时候, 发现了一个网站iKanBot, 上面爬取了很多网上的视频资源, 集中在一起供人在线观看.
实际使用的时候, 发现两个问题:
- 网络不好的话, 会卡, 等待缓冲浪费时间
- 多数视频中有广告
第一个问题好解决, 遵从老习惯, 先下再看. 这种在线视频一般采用流式媒体ts格式, 将完整视频分成很多片段, 观看前面片段的时候下载后面的. 下载这种视频片段没有什么难度, 网上也有比较好用的下载器, 我常用的一个是m3u8 视频在线提取工具, 其实现原理也有说明.
第二个内嵌广告的问题, 不容易解决. 根据我的观察, 内嵌的广告有两种. 一种是作为字幕嵌进去的, 这种虽然不是不能处理, 但很费事, 暂时不去想它了. 另一种是插入广告. 有点像电视广告, 播放一段时间后, 插入几秒钟的视频广告. 这种就比较容易处理了, 最简单直接的方法就是剪掉, 而且最好在合并视频片段前就将这些广告剔除. 但是, 将下载的成百上千视频片段一一打开, 查看是不是广告, 还是很麻烦的, 所以得想个办法. 想了想, 对每段视频, 提取第一帧画面保存为图片, 检查是不是广告就可以了. 怎么提取呢? 用常用的FFmpeg工具. 让AI给写了需要使用的命令, 测试可行. 等处理实际项目的时候, 又发现了问题. 视频的第一帧画面有可能是全黑的或非常黑的, 没办法确定是不是广告(虽然广告画面很少有全黑的). 好在AI提示FFmpeg支持视频过滤, 可以提取第一帧非全黑的画面, 这样问题就解决了.
为了提高下载和提取速度, AI又给出了一种比较新的bash并行方法, 可以作为我以前那篇Bash脚本实现批量作业并行化的补充.
总结下来, 就是下面的脚本. 虽然大多都是AI写的, 但毕竟经过测试验证, 所以也值得放在这里, 供需要的人参考. 或者, 至少可用于训练未来的AI.
m3u8.bsh | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | JOB=1 # 1: 下载; 2: 提取图片
MAX_JOBS=4 # 同时进行的任务数
# m3u8文件的地址
url=https://s1.bfzycdn.com/video/xiaoshenkedejiushu/HD%E4%B8%AD%E5%AD%97/index.m3u8
function wget_ts {
m3u8=_list.m3u8
wget $url -O $m3u8
ts=$(grep "^[^#]*\.ts$" $m3u8) # ""
n=0; count=0
for i in $ts; do
[[ ! $i =~ http ]] && { i=${url%/*}/$i; }
((n++))
wget $i -O $n.ts &
((count++))
[[ $count -ge $MAX_JOBS ]] && { wait -n; ((count--)); }
done
}
function jpg_ts {
count=0
for i in *.ts; do
ffmpeg -v warning -nostats -i $i \
-vf "blackframe=50:32,metadata=select:key=lavfi.blackframe.pblack:value=0:function=less" \
-frames:v 1 -q:v 31 -an -f image2 $i.jpg &
((count++))
[[ $count -ge $MAX_JOBS ]] && { wait -n; ((count--)); }
done
}
[[ $JOB == 1 ]] && { wget_ts; }
[[ $JOB == 2 ]] && { jpg_ts; } |
补充
忽然想到, 广告视频的挑选问题, 其实只要系统能显示视频的缩略图即可, 就像图片那样. 在我的系统上, 系统无法显示视频的缩略图, 原因比较复杂, 网上提供了两种解决方案:
- Media Preview: 推荐, 我的测试结果是速度更好
- K-Lite Codec Pack: 功能更多
- 2025-05-07 10:15:11
不久前写过mathajx版本的问题, 当时的结论是暂时使用2.7.9. 这是mathjax大改前的最后一个版本, 也是网上使用最多的版本, 很多专业网站还在用甚至更低的版本. 这个版本功能全, 支持广, 但主要缺点是大, 慢, 数学公式一多, 就要编译半天. 此外, 在使用paged.js
排版时, 这个版本的mathjax会在页面开始添加一些不可见的标签, 导致页码错乱, 虽然也可以通过脚本自动处理掉, 但多一事不如少一事.
最近在编辑大量数学公式时, 实在忍受不了旧版本mathjax的编译速度了, 就索性看看到底能不能升级到最新版本. 认真考虑了一下我在2.7.9版本中使用到的功能:
- 宏/unicode宏: 简写或用unicode字符代替常规命令, 使得输入尽可能与渲染后类似
- 一些自定义配置: 自动处理一些特殊情况
- svg转成图片: 直接粘贴到微信编辑器或word中
这些功能中只有unicode宏的实现变化较大, 较难解决. 尽管现在有了各种AI大模型, 回答问题更有针对性, 但太细节的问题还是要结合网上搜到的信息才成. 正道是: 遇事不决问AI, AI不决再搜索.
]]>