不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

先来看网上存在的一个ffmpeg脚本

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
35
36
37
38
39
40
41
#!/bin/bash
# Example of concatenating 3 mp4s together with 1-second transitions between them.

tpath="/ffmpeg/transitions/"
x264="-look_ahead 0 -ac 2 -c:v h264_qsv -profile:v high -level 3.1 -preset:v veryfast"
ki="-keyint_min 72 -g 72 -sc_threshold 0"
br="-b:v 3000k -minrate 3000k -maxrate 6000k -bufsize 6000k -b:a 128k"

ffmpeg -hide_banner \
-i 1.mp4 \
-i 2.mp4 \
-i 3.mp4 \
-filter_complex " \
[0:a] atrim=0:5 [a0]; \
[1:a] atrim=0:5 [a1]; \
[2:a] atrim=0:6 [a2]; \
\
[0:v] split [v000] [v010]; \
[1:v] split [v100] [v110]; \
[2:v] split [v200] [v210]; \
\
[v000] trim=0:5 [v001]; \
[v010] trim=5:6 [v011t]; \
[v011t] setpts=PTS-STARTPTS [v011]; \
\
[v100] trim=0:5 [v101]; \
[v110] trim=5:6 [v111t]; \
[v111t] setpts=PTS-STARTPTS [v111]; \
\
[v200] trim=0:5 [v201]; \
[v210] trim=5:6 [v211t]; \
[v211t] setpts=PTS-STARTPTS [v211]; \
\
[v011] [v101] gltransition=duration=1:source=${tpath}WaterDrop.glsl [vt0]; \
[v111] [v201] gltransition=duration=1:source=${tpath}crosswarp.glsl [vt1]; \
\
[v001] [vt0] [vt1] [v211] concat=n=4 [outv]; \
[a0] [a1] [a2] concat=n=3:v=0:a=1 [outa]" \
-map [outv] -map [outa] \
${x264} ${ki} ${br} \
-y ffmpeg-gl-transition-concat.mp4

流程简介

github上的脚本如下

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
#!/bin/bash
# Example of concatenating 3 mp4s together with 1-second transitions between them.

./ffmpeg \
-i media/0.mp4 \
-i media/1.mp4 \
-i media/2.mp4 \
-filter_complex " \
[0:v]split[v000][v010]; \
[1:v]split[v100][v110]; \
[2:v]split[v200][v210]; \
[v000]trim=0:3[v001]; \
[v010]trim=3:4[v011t]; \
[v011t]setpts=PTS-STARTPTS[v011]; \
[v100]trim=0:3[v101]; \
[v110]trim=3:4[v111t]; \
[v111t]setpts=PTS-STARTPTS[v111]; \
[v200]trim=0:3[v201]; \
[v210]trim=3:4[v211t]; \
[v211t]setpts=PTS-STARTPTS[v211]; \
[v011][v101]gltransition=duration=1:source=./crosswarp.glsl[vt0]; \
[v111][v201]gltransition=duration=1[vt1]; \
[v001][vt0][vt1][v211]concat=n=4[outv]" \
-map "[outv]" \
-c:v libx264 -profile:v baseline -preset slow -movflags faststart -pix_fmt yuv420p \
-y out.mp4
阅读全文 »

检测源流信息

1
ffmpeg -i 源流地址

推流

把A.MP4和B.mp4打包进同一个ts流,并推到本机的10003端口

1
ffmpeg -re -i A.mp4  -re -i B.mp4  -map 0:0 -map 0:1 -map 1:0 -map 1:1  -program program_num=1:title=videoA:st=0:st=1 -program program_num=3:title=videoB:st=2:st=3 -c copy -f mpegts udp://localhost:10003
阅读全文 »

第一次提离职,难免有些紧张,当我梳理好离职的话语,按下回车的那一刻,仿佛世界一下就安静了。

这些天来我反复对比离职的利与弊,却往往忽略的最重要的一点————那就是我的内心所思所想。我当然想每个月看到自己有好几千的收入,但是为了这收入,我需要忍受,仿佛这些收入就是来慰藉我这个月的委屈。

接下来就是交接工作,希望早点完成然后搬新家开始我自己的计划。

朋友问我后面打算怎么办,我就说先把今年考研过了,然后回趟家陪陪父母,明年3月联系好友帮忙内推BAT等大厂,当然前提也要我自己做足准备才行。

从小学-初中-高中-大学,我慢慢发现我的人生轨迹就是一个sin函数,在某一阶段会跌入低谷,陷入迷茫,无法自拔,然后等过上2-4个月就如同凤凰涅槃一样重获新生。

阅读全文 »

今天和@hanxu老友聊起以后想从事的工作,借此情形记录下来,不知未来十年或二十年可否实现。

我的理想生活,必须要自由,自由到不需要按时打卡上下班,不需要将自己的身躯固定在格子间里,不需要看某些人的脸色行事,不需要维持表面装出来的微笑表情,不需要整天盯着手机收发消息;

我的理想生活,必须要充实,充实到可以尽情做自己想做的事情,它带给我的快乐远远超过这件事的本身;

我的理想生活,必须要有它所存在的意义,而这样的意义我也在不停的寻找,六年的时间里,我放佛找到了些许轮廓:我可以尝试翻译国外的经典书籍,首先要要求自己的翻译水平达到一定的境界;我可以做多次不求回报的志愿者;我可以走遍千山万水,拍下别人只能在电视前看到的美景(比如抖音的韩船长);

我的理想生活,必须要与美食同行,我要吃遍大江南北的特色小吃,品尝奇特的酸甜苦辣咸,就像生活的各种滋味一样;

阅读全文 »

“离开你我才发现自己,那爱笑的眼睛,流过泪,像躲不过的暴风雨….” ————林俊杰《爱笑的眼睛》

离开学校

虽然离开学校已经两年了,但我偶尔还是会规划自己的暑假生活,想着7月去哪玩,8月去吃什么…等等,我不能做梦了,我已经没有寒暑假,oh shit !

我时常还是怀念上学的时光,没有人打扰的实验室 & 图书馆四楼的计算机专业书架和三楼的文学小说书架 & 800一年的宿舍和食堂5元的两荤一素一汤 & 良师益友…

离开家人

阅读全文 »

这个世界上,永远不存在——没有Bug的项目。

从2019年开始至今,在一个项目上做了快一年了,永远不存在——没有Bug的项目,这是我最终顿悟的。

从最初的服务架构设计->编码->调试->单元测试->联调测试->加大压力测试->改Bug->改需求->改代码->继续测试,不断循环往复,像一个永远不会break的循环语句,我慢慢体会到了时间流逝的太快,不知不觉我已经是一个工作经验有两年的职场人了。

这两年带给我最大的变化就是来自心态的变化,我仍记得我初入公司时,那种兴奋和好奇占据了我的灵魂,什么都想做,什么都想尝试,到慢慢的这具皮囊被迷茫和空虚所填满。

我一直想写出一个没有Bug的项目,然而当我发现,原来曾经的功能可以转化为现在的错误的时候,那么剩下我所做的一切都不重要了。

阅读全文 »

国庆期间去了一家新疆人开的新疆饭馆吃抓饭,一点也不正宗,尽是米饭,还是自己动手丰衣足食。

准备食材

红萝卜两根,(皮牙子)洋葱一个,鸡翅根7-8个,盛一碗米饭泡着。

红萝卜切成条,洋葱切成片,鸡肉切成块。

开炒

阅读全文 »

周末尝试下载书籍的方法,在此做一整理:

方法一,在亚马逊商城下载

只要kindle绑定了亚马逊账号,在亚马逊购买的书籍就可以在kindle上阅读。

方法二,用数据线

用和kindle匹配的数据线连接到电脑上,然后将电子书拖到kindle的文件盘里。

阅读全文 »

题目链接

https://leetcode-cn.com/problems/number-of-good-pairs/

题解

方法一,暴力法

先声明一个计数值count作为返回的结果,然后从数组下标0开始,挨个遍历下标0之后的值,接着做判断,如果两个值相等就将count加1,否则继续循环,直到结束返回count值即可。

阅读全文 »