Hexo

  • Home

  • Tags

  • Archives

  • Search

ffmpeg基础

Posted on 2019-04-19 | Edited on 2021-12-13
Symbols count in article: 2.2k | Reading time ≈ 2 mins.

在工作中还是挺经常用到ffmpeg的,虽然多用于编解码和一些格式的转换,但很多时候确实需要用到一些特殊的用法,网络上比较少能查找到。顺便准备稍微系统学习一下ffmpeg知识,便于扩展和应用,没准自己有时候还要做一些定制化的处理。例如用NVIDIA加速的HDR10编解码、V210格式的编解码、加标签和文字用于demo、视频的裁剪和拼接。


ref

  • FFmpeg Basics 前期的计划准备以这本书展开,作为基础的巩固
  • 《FFmpeg Basics》中文版-目录 上一本书的中文翻译,初步看起来还可以,预计很多内容都来自这篇blog
  • An ffmpeg and SDL Tutorial or How to Write a Video Player in Less Than 1000 Lines 用ffmpeg写个播放器,后期参考
  • A FFmpeg Tutorial For Beginners 官网的一些简单介绍
  • Tutorial_FFMPEG 一个很简单的官网介绍,十一页

FFmpeg Basics的目录

  1. 简介
  2. FFmpeg基本介绍
  3. 帮助和特征信息
  4. 比特率/帧率/文件大小
  5. 调整和伸缩视频
  6. 裁剪视频
  7. 填充视频
  8. 翻转和旋转视频
  9. 模糊/锐化和其他去噪
  10. overlay-画中画
  11. 为视频添加文字
  12. 格式间转换
  13. 时间操作
  14. 数学函数
  15. 元数据和字幕
  16. 图像处理
  17. 数字音频
  18. 预设编解码器
  19. 视频的隔行扫描
  20. FFmpeg组件和项目
  21. 麦克风和摄像头
  22. 批处理文件
  23. 颜色修正
  24. 先进的技术点
  25. 网页视频
  26. 调试和测试
  27. 词汇表/关于作者的介绍

这本书主要是介绍调整大小、裁剪、填充、去燥和覆盖等基本的视频编辑功能,还包括一些复杂的处理和实验的指导内容。

ffmpeg的基本介绍

FFmpeg是根据GNU通用公共许可证获得许可的多媒体处理自由软件项目的名称。 该项目最受欢迎的部分是用于视频和音频编码/解码的ffmpeg命令行工具,其主要特点是速度快,输出质量高和文件大小比较小。 FFmpeg中的“FF”表示 媒体播放器上的表示“快进”的控制按钮,“mpeg”是Moving Pictures Experts Group的缩写。 FFmpeg标志包含Z形图案,这是图片中以8x8块图示的熵编码方案的特征。

ffmpeg命令行工具组件,我一般常用ffmpeg和ffprobe

ffmpeg 快速音频和视频编码器/解码器
ffplay 媒体播放器
ffprobe 显示媒体文件的特点
ffserver 使用HTTP和RTSP协议进行多媒体流的广播服务器

ffmpeg软件库,可以参考github的介绍
| | |
———- | ———-
libavcodec | 各种多媒体编解码器的软件库
libavdevice | 软件库的设备,提供了访问捕获和播放设备的一层抽象
libavfilter | 提供了通过一系列滤波去来更改解码后的音视频的手段
libavformat | 实现了流协议、容器格式和基本的IO操作
libavutil | 包含各种实用程序的软件库
libpostproc | 用于后期处理的软件库
libswresample | 用于音频重采样的软件库
libswscale | 用于媒体扩展的软件库

其中音频的编解码库libavcodec最常用,libavfilter也挺常用,用于不同YUV格式之间的转换、缩放等等的,都需要用滤波实现。

以上组件都是用C语言完成的,源码可以在Windows、Linux和Mac OS X上编译使用。

ffmpeg下载

  • Download FFmpeg 主要下载地址
  • FFmpeg Builds windows可以直接下载别人编译好的可执行文件,其实就是上面提供的路径

ffmpeg的基本语法格式

cmd的环境变量设置

set path=%path%;C:/media

使用ffplay预览

如果用ffmpeg会需要保存到一个文件中,但用ffplay则可以直接预览看效果,用法差不多只是不用再指定输出文件

在ffmpeg中使用si前缀

其实就是用m, k, g等代替千位符号等等的

ffmpeg中的转码

其实就是demuxer和decoder

滤波器

在多媒体处理中,滤波器通常指将编码前对输入文件进行修改的软件。ffmpeg中有多种内置的滤波器,可以通过复杂的语法直接连接,避免了多次编解码产生的PQ下降。libavfilter是ffmpeg的filtering API,可以使用-vf和-af进行处理

ffmpeg -i A.flv -vf hqdn3d,pad=2*iw output.mp4  # 先滤波降噪并填充变成3840x1080
ffmpeg -i output.mp4 -i A.flv -filter_complex overlay=w compare.mp4 # 填充另一个视频

# 上面等价于
ffplay -i A.flv -vf split[a][b];[a]pad=2*iw[A];[b]hqdn3d[B];[A][B]overlay=w # 直接使用filtergraph完成两路视频不同的处理并拼接

利用filtergraphs可以同时完成多路的滤波,实现比filter更复杂一些操作,如下是滤波器的典型用法

SICP_2.3

Posted on 2019-04-16 | Edited on 2021-12-13
Symbols count in article: 3.2k | Reading time ≈ 3 mins.

2.3 Symbolic Data

2.3.1 Quotation

本小结主要讲符号的引用,之前都是在对数字进行处理,现在要考虑对实际变量的处理。

eq?可以用于判断两个符号的是否相等。
从而可以定义memq,用于判断给定符号是否在特定list中,如果不是返回nil,否则返回以该符号为首的sublist。

(define (memq item x)
(cond ((null? x) false)
((eq? item (car x)) x)
(else (memq item (cdr x)))))

2.3.2 Example:Symbol Differentiation

本节用求微分举例,这种带符号的求导与抽象数据的处理不同,是带符号的。只利用了最简单的4个求导规则

首先定义如下基本操作

(define (variable? e)
(symbol? x))

(define (same-variable? v1 v2)
(and (varaible? v1) (variable? v2) (eq? v1 v2)))

(define (make-sum a1 a2)
(list '+ a1 a2))

(define (make-product m1 m2)
(list '* m1 m2))

(define (sum? x)
(and (pair? x) (eq? (car x) '+)))

(define (addend s)
(cadr s))

(define (augend s)
(caddr s)) ; 注意s是个list,所以要取caddr而不是cddr

(define (product? x)
(and (pair? x) (eq? (car x) '+)))

(define (multiplier p)
(cadr p))

(define (multiplicand p)
(caddr p))

随后就可以根据定义的求导法则递归展开

(define (deriv exp var)
(cond ((number? exp) 0)
((variable? exp)
(if (same-variable? exp var) 1 0)
((sum? exp)
(make-sum (deriv (addend exp) var)
(deriv (augend exp) var))
((product? exp)
(make-product (deriv (multiplier exp) var)
(deriv (multiplicand exp) var)))))
(else (error "unknown expression type -- DERIV" exp))))

以上会出现一个问题,就是并没有化简到最简单,比如

(define '(+ x 3) 'x)

的结果显示为

(+ 1 0)

解决这个问题在于改变make-sum的行为即可,deriv不用改变。

(define (make-sum a1 a2)
(cond ((=number? a1 0) a2)
((=number? a2 0) a1)
((and (number? a1) (number? a2)) (+ a1 a2))
(else (list '+ a1 a2))))


(define (make-product m1 m1)
(cond ((or (=number? m1 0) (=number? m2 0)) 0)
((=number? m1 1) m2)
((=number? m2 1) m1)
((and (number? m1) (number? m2)) (* m1 m2))
(else (list '* m1 m2))))

习题2.56 实现多项式求导规则

(define (deriv exp var)
(cond ((number? exp) 0)
((variable? exp)
(if (same-variable? exp var) 1 0)
((sum? exp)
(make-sum (deriv (addend exp) var)
(deriv (augend exp) var))
((product? exp)
(make-product (deriv (multiplier exp) var)
(deriv (multiplicand exp) var)))))
((exponentiation? exp) ; 需要新增获取基本元素的函数以及构造函数
(let ((n (exponent exp))
(u (base exp)))
(make-product
n
(make-product (make-exponentiation u (- n 1))
(deriv u var)))))
(else (error "unknown expression type -- DERIV" exp))))

(define (make-exmponentiation base exponent)
(cond ((= exponent 0)
1)
((= exponent 1)
base)
(else
(list '** base exponent))))

(define (exponent exp)
(caddr exp))

(define (base exp)
(cadr exp))

(define (exponentiation? exp)
(and (pair? exp) (eq? (car exp) `**)))

hexo使用小记

Posted on 2019-04-16 | Edited on 2021-12-13
Symbols count in article: 3.1k | Reading time ≈ 3 mins.

1. 常用的命令

hexo new tile_of_poster
hexo g # hexo generate
hexo s # hexo server
hexo d # hexo deploy

正常情况下要推送到网站使用,随后即可到www.github.io查看网页了。

hexo clean
hexo g
hexo d

要备份代码到github时

git push origin hexo # 因为master分支是用于备份网页文件的

2. 常见问题

  1. 数学公式
    在hexo中渲染数学公式需要Mathjax,可以参考hexo下LaTeX无法显示的解决方案
    [NexT]配置MathJax 参考这里也可以,注意per_page配置为true时,要在blog中主动带上mathjax: true
  2. hexo中支持的一些语法可以参考Hexo Markdown 简明语法手册
  3. Mathjax英文可以参考MathJax basic tutorial and quick reference,中文翻译参考Mathjax与LaTex公式简介
  4. Mathjax的docs,可以查到相关的语法支持情况hMathJax TeX and LaTeX Support
  5. 当前markdown渲染引擎不支持todolistPort todo list support from marked,有需要的话未来可以自己合并。
  6. 使用kramed需要在文档头中加mathjax: true
  7. Katex中不支持\label和\eqref,目前站点渲染这个也无法做到,但Mathjax应该可以做到。
  8. 代码不让它显示行数序号数字怎搞
  9. 取消hexo中的目录编号,可以使用vs中的toc功能加编号会更好些。
  10. 如何备份hexo的blog源代码
    可以参考使用hexo,如果换了电脑怎么更新博客?
    如果已经完成了blog的编写,可以在github上面新建一个hexo分支,并设置为默认分支,随后将远程分支下载下来,并用blog的源文件全部替换掉,在push即可。这样就可以将源代码备份到Github上面的hexo分支,而网页文件存储在master分支。
  11. NexT 自带的语法高亮插件支持的语言列表 注意shell应该使用sh会比较统一一些。
  12. TypeError: Cannot set property ‘lastIndex’ of undefined github
  13. 用Markdown写Hexo博客时如何转义竖杠 | ? 使用HTML字符修改
  14. 如何在hexo使用图片和提供附件下载 提供附件下载功能,其实就是开启在开启post_asset_folder后,在同名文件夹下面放附件就可以了,类似于图片

3. 添加gitalk评论系统

  • Hexo NexT主题中集成gitalk评论系统
  • Hexo中Gitalk配置使用教程-可能是目前最详细的教程
  • GITALK demo
  • OAuth Apps

主要参考了以上两个教程,但事实上目前(2019.4)在next主题中都已经集成了gitalk的相关配置了,直接启用即可,不需要像第一个blog那样需要完整添加很多配置文件。以后可以方便添加评论然后重新记录了。

  1. 先在github上注册新应用
    参数说明

    Application name: # 应用名称,随意
    Homepage URL: # 网站URL,如https://asdfv1929.github.io
    Application description # 描述,随意
    Authorization callback URL:# 网站URL,https://asdfv1929.github.io
  2. 点击注册后,页面跳转如下,其中Client ID和Client Secret在后面的配置中需要用到,到时复制粘贴即可

  3. 在主题配置文件next/_config.yml中添加如下内容:

    gitalk:
    enable: true
    github_id: astraywu # Github repo owner
    repo: astraywu.github.io # Repository name to store issues.
    client_id: Client ID # Github Application Client ID
    client_secret: Client Secret # Github Application Client Secret
    admin_user: astraywu # GitHub repo owner and collaborators, only these guys can initialize github issues
    distraction_free_mode: true # Facebook-like distraction free mode

4. next主题优化

4.1. 添加tag

hexo 下的分类和表签无法显示,怎么解决?

  1. 给文章加tag

    title: 一个人的狂欢
    date: 2016-11-11 13:09:04
    tags: [journal,think]
  2. 命令行输入hexo n page tags,会在sources/tags生成index.md文件

  3. 编辑index.md文件

    title: tags
    date: 2016-11-11 21:40:58
    type: "tags"
  4. 在主题配置文件themes\next\_config.yml的menu项目下打开tags页

    menu:
    home: / || home
    #about: /about/ || user
    tags: /tags/ || tags
    #categories: /categories/ || th
    archives: /archives/ || archive
    #schedule: /schedule/ || calendar
    #sitemap: /sitemap.xml || sitemap
    #commonweal: /404/ || heartbeat

4.2. 浏览页面的时候显示当前浏览进度

4.3. 添加顶部加载条

4.4. 本地搜索

4.5. 统计功能,统计功能,显示文章字数统计,阅读时长,总字数

4.6. 允许代码段拷贝

这里要使用npm install hexo-symbols-count-time --save

4.7. 给代码块添加复制功能

4.8. 修改行间距

文章内容较多时,next原来的间距太大了,要上下来回滚动。
修改themes\next\source\css\_variables\custom.styl,添加

$line-height-base           = 1.5

5. ref

  1. Hexo的Next主题详细配置
  2. 精于心,简于形 Next官网
  3. GitHub+Hexo 搭建个人网站详细教程 知乎的hexo建站笔记
  4. 利用vscode插件与git hook提升hexo编写部署体验
  5. Hexo博客搭建之在文章中插入图片
  6. 绝配:hexo+next主题及我走过的坑 搭建更多功能
  7. Hexo+Next主题优化
  8. Hexo-Next-主题优化(一) 应该是上面的ref,带有图片演示
  9. hexo指南

VSCode支持的markdown语法参考

Posted on 2019-04-16 | Edited on 2021-12-13
Symbols count in article: 5.8k | Reading time ≈ 5 mins.

主要记录下载使用vscode的markdown记录时,一些参考备注,可能集中在公式的支持上面。主要来源于参考资料,自己重新记录一遍便于回溯。


1. 参考资料与备注

  1. 主要参考资料VsCode支持的markdown语法参考
  2. Markdown PDF没有办法解决$\LaTeX$公式的渲染问题,暂时只能使用Markdown Preview Enhance来导出到html再另存为pdf格式。
  3. Markdown Preview Enhance也是可以配置css文件的。
  4. Markdown Preview Enhance可以配置多种流程图,但是渲染等需要再研究下。
  5. 关于$\LaTeX$公式是需要Markdown Math插件的,至于公式的许多用法请参考其他问题。
  6. 在公式环境中,不要轻易分行,容易导致公式渲染失败。
  7. 其他关于markdown渲染的问题,参考hexo使用小记。
  8. GitHub Flavored Markdown Spec
  9. 用Markdown写Hexo博客时如何转义竖杠 | ? 使用HTML字符修改
  10. 转义字符 gfm好像不支持竖线的转义,至少hexo不支持

2. 文本部分

2.1. 粗体、斜体和删除线

这是粗体

这是斜体

这是删除线

**这是粗体**
*这是斜体*
~~这是删除线~~

2.2. 分级标题

支持类似于HTM标签的标题,例如


这是一级标题
===

这是二级标题
---

# 这是一级标题
## 这是二级标题
### 这是三级标题

2.3. 标注

好像支持不了尾注和简单的上下标写法

  • 上标:30test

  • 下标:30test

- 上标:30<sup>test</sup>
- 下标:30<sub>test</sub>

2.4. 文字引用

在引用的文字前面加>即可,并且可以嵌套

这是引用

> 这是引用

2.5. 生成目录

需要使用Markdown TOC插件,不过这个插件可能会有问题,参考

  • VSCode如何为Markdown自动生成目录

  • VSCode中Markdown目录显示异常

2.6. 标签分类代码图像

2.7. 分类

好像不支持这个功能

2.8. 列表

支持有序列表和无序列表两种,无序列表用-+*都可以,无序和有序列表都要注意后面需要有一个空格。列表也可以嵌套,缩进3个空格即可。

  • 无序列表1
  • 无序列表2
  • 无序列表3
  • 无序列表4
- 无序列表1
- 无序列表2
- 无序列表3
- 无序列表4
  1. 有序列表项
  2. 有序列表项
  3. 有序列表项
1. 有序列表项
2. 有序列表项
3. 有序列表项

2.9. 超链接

用如下语法支持超链接,可以在括号中再添加字符串来给超链接加标题.

百度一下,你就知道
百度一下,你就知道

[百度一下,你就知道](www.baidu.com "给百度链接加标题")
[百度一下,你就知道](www.baidu.com)

2.10. 代码

2.11. 图像

使用 ![描述](图片链接地址) 插入图像。

2.12. 表格

可以使用:来对齐,左边加:表示文字居左;两边加:表示文字居中;右边的表示右对齐。
这里好像不支持>的跨表格功能。

Item Value Qty
Computer 1600 USD 5
Phone 12 USD 12
Pipe 1 USD 234
| Item     | Value     | Qty   |
| :------- | --------: | :---: |
| Computer | 1600 USD | 5 |
| Phone | 12 USD | 12 |
| Pipe | 1 USD | 234 |

2.13. TODO事项

注意方括号中间有空格,站点的渲染引擎暂不支持。

  • [ ] 要做的事情
  • [x] 已经做的事情
- [ ] 要做的事情
- [x] 已经做的事情

3. 数学公式与Latex

用$表示行内公式,例如 $a^2+b^2=c^2$

用$$$$表示整行公式,例如

用`$`表示行内公式,例如$a^2+b^2=c^2$

用`$$`表示整行公式,例如
$$
a^2+b^2=c^2
$$

这一块参考文档一份不太简短的$\LaTeX$介绍比较好,这里仅仅列可能会常用的模板或者不太容易找到的用法。

特殊符号

\int \prod \sum \lim_{x \to x} \sin x  \times \infty \equiv \approx \sim \log 2 \lg 5
\land \lor \lnot \lt \gt \le \ge = \neq
a \equiv b \pmod n
\vec x \hat x \dot x

省略号

a_1, a_2, \ldots, a_n \qquad a_1 + a_2 + \cdots a_n

矩阵

\mathbf{X} = \left(
\begin{array}{cccc}
x_{11} & x_{12} & \ldots & x_{1n}\\
x_{21} & x_{22} & \ldots & x_{2n}\\
\vdots & \vdots & \ddots & \vdots\\
x_{n1} & x_{n2} & \ldots & x_{nn}\\
\end{array} \right)
\mathbf{H}=
\begin{bmatrix}
\dfrac{\partial^2 f}{\partial x^2} &
\dfrac{\partial^2 f}
{\partial x \partial y} \\[8pt]
\dfrac{\partial^2 f}
{\partial x \partial y} &
\dfrac{\partial^2 f}{\partial y^2}
\end{bmatrix}
\begin{pmatrix}
1 & 2 \\
1 & 2 \\
\end{pmatrix}
\begin{bmatrix}
1 & 2 \\
1 & 2 \\
\end{bmatrix}
\begin{Bmatrix}
1 & 2 \\
1 & 2 \\
\end{Bmatrix}
\begin{vmatrix}
1 & 2 \\
1 & 2 \\
\end{vmatrix}
\begin{Vmatrix}
1 & 2 \\
1 & 2 \\
\end{Vmatrix}

多行公式

\begin{aligned}
a + b &= c \\
a &= c - b \\
0 &= c - b - a
\end{aligned}

间距

a \quad b \qquad cd \quad c \, d \quad c \: d \quad c \; d

微积分求导符号

\int_a^b f(x)\mathrm{d}x
\qquad
\int_a^b f(x)\,\mathrm{d}x
\qquad
\dfrac{\partial^2 f}{\partial x^2}

分段函数

 |x| =
\begin{cases}
-x & \text{if } x < 0,\\
0 & \text{if } x = 0,\\
x & \text{if } x > 0.
\end{cases}

字体
MathJax不支持\bm

\mathbf{d} x
\qquad \mathbf{\mu, M}
\qquad \boldsymbol{\mu, M}

括号手动调整

\bigg \{\Bigl\langle \bigl( (x) \bigr ) \Bigr \rangle \bigg \}

括号自适应调整

\left( \frac12 \right)
(\frac 1 2)

编号与标签

E=mc^2 \tag{tag}

行间距

\begin{aligned}
\sum_1^n i^2 \\[5ex]
\frac12 \\[2ex]
\frac {x^2}{y}
\end{aligned}

颜色

\color{black}{blackText} \color{yellow}{yellowText}

4. 流程图

这一小节需要插件支持,而且渲染的时候需要定义格式,暂时不弄

5. 转义字符

md支持下列字符的转义

\ 反斜杠
` 反引号
* 星号
_ 下划线
{} 大括号
[] 中括号
() 小括号
# 井号
+ 加号
- 减号
. 英文句号
! 感叹号

\\ 反斜杠
\` 反引号
\* 星号
\_ 下划线
\{\} 大括号
\[\] 中括号
\(\) 小括号
\# 井号
\+ 加号
\- 减号
\. 英文句号
\! 感叹号
123

Astray Wu

24 posts
2 tags
RSS
© 2021 Astray Wu | 80k | 1:13
Powered by Hexo v3.9.0
|
Theme – NexT.Muse v6.7.0
|
0%