duangsuse Throws
#Haha #anal .... 昏睡可乐.... (喷)hhhhh 这么恶臭的东西就不要混进活跃的青春系动漫里来了(绝望),不知道到时候会不会风评被害?(
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse Throws
#Haha #anal .... 昏睡可乐.... (喷)hhhhh 这么恶臭的东西就不要混进活跃的青春系动漫里来了(绝望),不知道到时候会不会风评被害?(
本来想把这些 PV 剪辑一下的,后来发现没啥可剪的。我 ffmpeg 压制一下方便你们看了,当然以后想在电影院或者网上看也好(原动漫、其他形式的创作同人)
duangsuse Throws
#Haha #acg hhhhhh 昏睡可乐 笑死我了 不过有点尬膜的意思了🤣:cola:
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse Throws
本来想把这些 PV 剪辑一下的,后来发现没啥可剪的。我 ffmpeg 压制一下方便你们看了,当然以后想在电影院或者网上看也好(原动漫、其他形式的创作同人)
ffmpeg 的压制是有效的,第一个视频在质量几乎没有人眼可见任何损失的情况下压制了 MP4(libh264、libaac)到相同的流编码(h.264, aac)和相同的容器(MP4)
体积足足缩小了一半
体积足足缩小了一半
duangsuse Throws
ffmpeg 的压制是有效的,第一个视频在质量几乎没有人眼可见任何损失的情况下压制了 MP4(libh264、libaac)到相同的流编码(h.264, aac)和相同的容器(MP4) 体积足足缩小了一半
严重怀疑 ffmpeg 压制是高度智能化的,会推导出你想要的压制选项参数,自动帮你完成低质量损失的压制,我只提供了输入输出文件居然比我手动指定
crf 和 preset 的输出文件体积都要小
duangsuse Throws
严重怀疑 ffmpeg 压制是高度智能化的,会推导出你想要的压制选项参数,自动帮你完成低质量损失的压制,我只提供了输入输出文件居然比我手动指定 crf 和 preset 的输出文件体积都要小
视频压制算法是很复杂的,其中往往涉及到难懂的人工智能 人工神经网络、Fourier 傅里叶变换、线性规划、动态规划算法(臆测)
实际上,我一直以为「数学性复杂」的算法和「逻辑复杂」「简单」的算法之间最大的区别就是「数学性复杂」的算法往往先在纸上模拟和设计比较简单
逻辑复杂的往往是写伪代码、debug printf 和使用调试器调试起来比较简单
简单的算法往往不需要写伪代码、不需要在纸上演练即可使用,有 bug 最多一个 debug print 即可找到问题所在,而且单看看也不难
实际上,我一直以为「数学性复杂」的算法和「逻辑复杂」「简单」的算法之间最大的区别就是「数学性复杂」的算法往往先在纸上模拟和设计比较简单
逻辑复杂的往往是写伪代码、debug printf 和使用调试器调试起来比较简单
简单的算法往往不需要写伪代码、不需要在纸上演练即可使用,有 bug 最多一个 debug print 即可找到问题所在,而且单看看也不难
duangsuse Throws
视频压制算法是很复杂的,其中往往涉及到难懂的人工智能 人工神经网络、Fourier 傅里叶变换、线性规划、动态规划算法(臆测) 实际上,我一直以为「数学性复杂」的算法和「逻辑复杂」「简单」的算法之间最大的区别就是「数学性复杂」的算法往往先在纸上模拟和设计比较简单 逻辑复杂的往往是写伪代码、debug printf 和使用调试器调试起来比较简单 简单的算法往往不需要写伪代码、不需要在纸上演练即可使用,有 bug 最多一个 debug print 即可找到问题所在,而且单看看也不难
数学上一些复杂的东西即便是尽可能使用简单具体而不是简洁短篇幅的语言描述,也是要花些功夫才能学会理解的
举个例子(orz 跑题了)
这是 foldl(fold aka. reduce) 在 ES6 的实现方式
上面说的那个 foldl 呢,在 Haskell 这样面向篇理论派的语言里实现起来是非常简洁的,不过使用递归比较「自然」但是对小白来说不易懂就是了
举个例子(orz 跑题了)
这是 foldl(fold aka. reduce) 在 ES6 的实现方式
function foldl(op, init, list) {
let accumlator = init;
for (let i of list)
accumlator = op(accumlator, i);
return accumlator;
}
foldl((a, b) => a + b, 0, [1, 2, 3]) //=> 6
虽然逻辑也很简单嘛,但是少说理解起来会比这个容易:['2', '2.5', '3.0'].map(Number.parseFloat) //=> [2, 2.5, 3.0]一个“惊人”的实事是,貌似偏向小白的工业界(因为他们还是有 JavaEE 这种偏向理论化抽象的东西)写的代码大部分都不会比这个复杂多少... ABC(Assignment、Branch、Conditions)值不会超过 10 的东西...
上面说的那个 foldl 呢,在 Haskell 这样面向篇理论派的语言里实现起来是非常简洁的,不过使用递归比较「自然」但是对小白来说不易懂就是了
myFoldl [] = init好吧,上面那个我第一次写的是错的,类型推导失败
myFoldl op init (x : xs) = op(myFoldl xs x)
foldl f z [] = z约等于
foldl f z (x:xs) = foldl f (f z x) xs
myFoldl op init [] = init往递归的无限嵌套倒影里望去,看到的就是... 看不到 emmm
myFoldl op init (x : xs) = myFoldl op (op init x) xs
Forwarded from KK 的键盘侠日常
明天就是双十一了。你在万达买一堆东西,王健林不会记住你,你在腾讯充一堆点券,马化腾不会记住你,你在淘宝大肆购物,马云不会记住你。但是你转我100,我一定会记住你,还会回复你,还会说谢谢大哥。