跳至内容

Markdown语法

Markdown语法

标题

使用#标记1~6级标题

语法

# H1
## H2
### H3
#### H4
##### H5
###### H6

说明

#+空格+标题内容
可以添加六级标题
一般正文字体默认比四级标题大一号

使用=和-分别标记一级、二级标题

语法

一级标题 =====
二级标题 -----

缩进、换行、空行、对齐方式

缩进

 或  //全角
输入两个空格
 或  //半角
输入一个空格
 或   //半角之半角
输入一个空格

换行

  • 部分markdown编辑器
    在一行字后面,直接换行回车
  • Visual Studio Code
    必须在一行字后面空两个格子才行

空行

只要这一行只有回车或者space没有其他的字符就算空行

对齐方式

  • 行中心对齐
<center>内容</center>
<div align=center> 内容 </div>
  • 行左对齐
<p align="left">左对齐</p>
  • 行右对齐
<p align="right">右对齐</p>

任务列表

已做任务

- [x][空格]文字

未做任务

- [ ][空格]文字

列表

无序列表

* 无序列表项 一
+ 无序列表项 二
- 无序列表项 三

有序列表

1. 有序列表项 一 2. 有序列表项 二 3. 有序列表项 三

文本样式

强调

**加粗**

倾斜

*斜体*
_斜体_

删除线

~~删除线~~

下划线

<u>下划线</u>

底纹

`底纹`

背景高亮

==背景高亮==

多级引用

语法

> 请问 Markdwon 怎么用? - 小白 >> 自己看教程! - 愤青 >>> 教程在哪? - 小白 >>>>   
> 最后

说明

引用需要在被引用的文本前加上>符号和空格,允许多层嵌套,也允许你偷懒只在整个段落的第一行最前面加上 >,最后一个符号与前一个之间空五格后面的文字会变成代码块类型。

代码块

方法一

语法

    public static void main(String[] args) {
        System.out.println("Hello, Markdown);     
    }

说明

将每一行都缩进 4 个空格或者 1 个水平制表符。

方法二

语法

```java This is a code block. ```

说明

```后可添加编程语言类型,如java, c, c++, python, javascript等,将标识出语言关键字

图片

本地图片,相对路径

假设要插入的图片与 md 文件位于同级目录

语法

![相对路径的图片](./example.png)

本地图片,绝对路径

假设要插入的图片位于D:/picture/example.png

语法

![绝对路径的图片](D:/picture/example.png)

网络图片

假设我们在百度图片上找到一张图片,通过右键单击图片-> 复制图片地址可以获得图片网络地址,https://t7.baidu.com/it/u=1956604245,3662848045&fm=193&f=GIF

语法

![网络图片地址](https://t7.baidu.com/it/u=1956604245,3662848045&fm=193&f=GIF)
<div> <img src="https://meiyan.tech/rest/file/get/leaf_bg.jpg"> </div>

链接

行内式

语法

欢迎阅读 [musescore-translate](https://github.com/xiaxi626/musescore-translate "xiaxi626")

说明

[]里写链接文字,()里写链接地址, ()中的"“中可以为链接指定title属性,title属性可加可不加。title属性的效果是鼠标悬停在链接上会出现指定的 title文字,链接地址与title前有一个空格。

参考式

第一种

我经常去的几个网站[Google][1]、[Leanote][2]。  [1]:http://www.google.com  [2]:http://www.leanote.com

第二种

我经常去的几个网站[Google][]、[Leanote][]。  [Google]:http://www.google.com  [Leanote]:http://www.leanote.com

说明

参考式链接分为两部分,文中的写法 [链接文字][链接标记],在文本的任意位置添加[链接标记]:链接地址。 如果链接文字本身可以做为链接标记,你也可以写成[链接文字][] [链接文字]:链接地址的形式,见代码的最后一行。

注脚

语法

使用 Markdown[^1]可以效率的书写文档, 直接转换成 HTML[^2]。  [^1]:Markdown是一种纯文本标记语言  [^2]:HyperText Markup Language 超文本标记语言

说明

在需要添加注脚的文字后加上脚注名字[^注脚名字],称为加注。 然后在文本的任意位置(一般在最后)添加脚注,脚注前必须有对应的脚注名字。 注意:经测试注脚与注脚之间必须空一行,不然会失效。成功后会发现,即使你没有把注脚写在文末,经Markdown转换后,也会自动归类到文章的最后。

锚点(页内超链接)

语法

## 0. 目录{#index}

说明

网页中,锚点其实就是页内超链接,也就是链接本文档内部的某些元素,实现当前页面中的跳转。比如我这里写下一个锚点,点击回到目录,就能跳转到目录。 在目录中点击这一节,就能跳过来。还有下一节的注脚。这些根本上都是用锚点来实现的,只支持在标题后插入锚点,其它地方无效。如果本页面没有锚点所指位置,当你点击该锚点时,会自动移动浏览页面使该位置在最上方。

自动链接

语法

<https://github.com/xiaxi626/> 
<address@example.com>

说明

Markdown 支持以比较简短的自动链接形式来处理网址和电子邮件信箱,只要是用<>包起来, Markdown 就会自动把它转成链接。一般网址的链接文字就和链接地址一样

公式、矩阵、方程式 、条件表达式、数组与表格 、连分数、交换图标 ,一些特殊的注意事项

【史上最全Markdown语法手册.pdf-原创力文档】
写得不错,完整内容需付费观看

分隔线

* * *
***
*****
- - -
-----------
___

表格

语法

| 表头 | 表头 | | ---- | ----- | | 单元格 | 单元格 | | 单元格 | 单元格 |
| Align left | Align center  | Align Right | | :------------ |:---------------:| -----:| | col 3 is      | some wordy text | $1600 | | col 2 is      | centered        |   $12 | | zebra stripes | are neat        |    $1 |

说明

不管是哪种方式,第一行为表头,第二行分隔表头和主体部分,第三行开始每一行为一个表格行。 列于列之间用管道符|隔开。原生方式的表格每一行的两边也要有管道符。 第二行还可以为不同的列指定对齐方向。默认为左对齐,在-右边加上:就右对齐。 - 左对齐(或者:-),:-: 中心对齐,-: 右对齐

公式(仅供参考)

Inline math expression such as

$C_n^2$, $\vec a$, $\overrightarrow{xy}$, $\mathbb{A}$, $10^10+10^{10}$, $\left(\frac{x}{y}\right)$

Cn2C_n^2, a\vec a, xy\overrightarrow{xy}, A\mathbb{A}, 1010+101010^10+10^{10}, (xy)\left(\frac{x}{y}\right)

And more complicated ones, for example

$\sum_{i=0}^N\int_{a}^{b}g(t,i)\text{d}t$, $\int_0^\infty{fxdx}$ and $\sqrt[x]{y}$

i=0Nabg(t,i)dt\sum_{i=0}^N\int_{a}^{b}g(t,i)\text{d}t, 0fxdx\int_0^\infty{fxdx} and yx\sqrt[x]{y}

Also, the single line math expressions, such as

$$\begin{matrix} 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{matrix}$$
$$\sin x,\ln x,\max(A,B,C)$$
$$\begin{bmatrix} {a_{11}}&{a_{12}}&{\cdots}&{a_{1n}}\\ {a_{21}}&{a_{22}}&{\cdots}&{a_{2n}}\\ {\vdots}&{\vdots}&{\ddots}&{\vdots}\\ {a_{m1}}&{a_{m2}}&{\cdots}&{a_{mn}}\\ \end{bmatrix}$$
$$\begin{array}{c|lll} {↓}&{a}&{b}&{c}\\ \hline {R_1}&{c}&{b}&{a}\\ {R_2}&{b}&{c}&{c}\\ \end{array}$$
$$\begin{cases} a_1x+b_1y+c_1z=d_1\\ a_2x+b_2y+c_2z=d_2\\ a_3x+b_3y+c_3z=d_3\\ \end{cases} $$
100010001\begin{matrix} 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{matrix}[a11a12a1na21a22a2nam1am2amn]\begin{bmatrix} {a_{11}}&{a_{12}}&{\cdots}&{a_{1n}}\\ {a_{21}}&{a_{22}}&{\cdots}&{a_{2n}}\\ {\vdots}&{\vdots}&{\ddots}&{\vdots}\\ {a_{m1}}&{a_{m2}}&{\cdots}&{a_{mn}}\\ \end{bmatrix}{a1x+b1y+c1z=d1a2x+b2y+c2z=d2a3x+b3y+c3z=d3\begin{cases} a_1x+b_1y+c_1z=d_1\\ a_2x+b_2y+c_2z=d_2\\ a_3x+b_3y+c_3z=d_3\\ \end{cases}

空格符

语法

中&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;国

说明

文字之间插入&nbsp;

小于号

大于号

和号

人民币

版权

©

注册商标

®

摄氏度

正负号

±

乘号

×

除号

÷

上标

语法

x^2^

说明

^(编辑文字/符号)^

下标

语法

x~2~

说明

~(编辑文字/符号)~

更多特殊字符





∴/∴
%/‰
……

Markdown-mermaid语法 转载自:https://blog.csdn.net /ftswsfb/article/details/119523080

Mermaid语法文档:About Mermaid (mermaid-js.github.io)

流程图(Flowchart)

graph TD; A-->B; A-->C; B-->D; C-->D;

时序图(Sequence diagram)

sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts <br/>prevail! John-->>Alice: Great! John->>Bob: How about you? Bob-->>John: Jolly good!

状态图(State diagrams)

stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*]

类图(Class diagram)

classDiagram Class01 <|-- AveryLongClass : Cool Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 --> C2 : Where am i? Class09 --* C3 Class09 --|> Class07 Class07 : equals() Class07 : Object[] elementData Class01 : size() Class01 : int chimp Class01 : int gorilla Class08 <--> C2: Cool label

甘特图(Gantt diagram)

gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid excludes weekends %% (excludes accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".) section A section Completed task :done, des1, 2014-01-06,2014-01-08 Active task :active, des2, 2014-01-09, 3d Future task : des3, after des2, 5d Future task2 : des4, after des3, 5d section Critical tasks Completed task in the critical line :crit, done, 2014-01-06,24h Implement parser and jison :crit, done, after des1, 2d Create tests for parser :crit, active, 3d Future task in critical line :crit, 5d Create tests for renderer :2d Add to mermaid :1d section Documentation Describe gantt syntax :active, a1, after des1, 3d Add gantt diagram to demo page :after a1 , 20h Add another diagram to demo page :doc1, after a1 , 48h section Last section Describe gantt syntax :after doc1, 3d Add gantt diagram to demo page :20h Add another diagram to demo page :48h

Git图(Git graph)

gitGraph: options { "nodeSpacing": 20, "nodeRadius": 5 } end commit branch newbranch branch branch1 branch branch2 checkout newbranch commit commit checkout branch1 commit commit checkout master commit commit merge newbranch

饼图(Pie chart)

pie title Pets adopted by volunteers "Dogs" : 386 "Cats" : 85 "Rats" : 15

转义字符,字体, 字号,颜色 ,背景色……

转义字符

Markdown中的转义字符为\,转义的有: \ 反斜杠 ` 反引号 * 星号 _ 下划线 {} 大括号 [] 中括号 () 小括号  # 井号 + 加号 - 减号 . 英文句号 ! 感叹号

颜色

浅红色文字:<font color="#dd0000">浅红色文字:</font><br />  深红色文字:<font color="#660000">深红色文字</font><br />  浅绿色文字:<font color="#00dd00">浅绿色文字</font><br />  深绿色文字:<font color="#006600">深绿色文字</font><br />  浅蓝色文字:<font color="#0000dd">浅蓝色文字</font><br />  深蓝色文字:<font color="#000066">深蓝色文字</font><br />  浅黄色文字:<font color="#dddd00">浅黄色文字</font><br />  深黄色文字:<font color="#666600">深黄色文字</font><br />  浅青色文字:<font color="#00dddd">浅青色文字</font><br />  深青色文字:<font color="#006666">深青色文字</font><br />  浅紫色文字:<font color="#dd00dd">浅紫色文字</font><br />  深紫色文字:<font color="#660066">深紫色文字</font><br />

浅红色文字:浅红色文字:
深红色文字:深红色文字
浅绿色文字:浅绿色文字
深绿色文字:深绿色文字
浅蓝色文字:浅蓝色文字
深蓝色文字:深蓝色文字
浅黄色文字:浅黄色文字
深黄色文字:深黄色文字
浅青色文字:浅青色文字
深青色文字:深青色文字
浅紫色文字:浅紫色文字
深紫色文字:深紫色文字

字体

<font face="黑体">我是黑体字</font> <font face="宋体">我是宋体字</font> <font face="微软雅黑">我是微软雅黑字</font> <font face="fantasy">我是fantasy字</font> <font face="Helvetica">我是Helvetica字</font>

我是黑体字 我是宋体字 我是微软雅黑字 我是fantasy字 我是Helvetica字

背景色

<table><tr><td bgcolor=#FF00FF>背景色的设置是按照十六进制颜色值:#7FFFD4</td></tr></table> <table><tr><td bgcolor=#FF83FA>背景色的设置是按照十六进制颜色值:#FF83FA</td></tr></table> <table><tr><td bgcolor=#D1EEEE>背景色的设置是按照十六进制颜色值:#D1EEEE</td></tr></table> <table><tr><td bgcolor=#C0FF3E>背景色的设置是按照十六进制颜色值:#C0FF3E</td></tr></table> <table><tr><td bgcolor=#54FF9F>背景色的设置是按照十六进制颜色值:#54FF9F</td></tr></table>
背景色的设置是按照十六进制颜色值:#7FFFD4
背景色的设置是按照十六进制颜色值:#FF83FA
背景色的设置是按照十六进制颜色值:#D1EEEE
背景色的设置是按照十六进制颜色值:#C0FF3E
背景色的设置是按照十六进制颜色值:#54FF9F

字体颜色、大小、字体类型

<font color="#0099ff" size=4 face="微软雅黑">3、字体颜色、大小、字体类型</font>

3、字体颜色、大小、字体类型

Markdown 软件推荐

Markdown 软件推荐

编辑器

  1. Typora
  2. MarkdownPad
    有免费版和高级版,高级版收费14.95美刀。升级成高级版以后,文档内容可以导出到PDF中,不过免费版已经很好用了。
  3. MarkText
    Mark Text一款基于 MIT 协议开源的 Markdown 编辑器,支持 WYSIWYG(所见即所得)的编辑方式,它专注于速度和可用性。Mark Text是具有各种markdown扩展名的markdown实时预览编辑器。
    该编辑器还内置了插件功能,你可以为其添加 KaTeX 数学公式、表情符号等插件扩展。
  4. Moeditor
    Moeditor是一款开源的markdown编辑器。小清新风格,支持所有 基础功能。
  5. Haroopad
    Haroopad 是一个优秀的 Markdown 编辑器,它是开源、免费、跨平台的,支持windows,linux和mac系统。Haroopad已经内置了各种markdown扩展,支持100多种编程语言代码的直接显示,甚至代码显示的背景框都有很多主题可以选择。
    使用 Haroopad 可以创作各种格式的文档,比如博客文章、幻灯片、演示文稿、报告和电子邮件等。
    Haroopad的功能很强大,支持多种主题,超过 30 种不同的主题。
    Haroopad支持多种代码高亮,比如Ruby、Python、PHP、Javascript、C、HTML、CSS 等语法高亮。
    Haroopad还支持 LaTex 数学表达式,还能导出文件为 HTML 和 PDF,可以说功能很强大。
  6. ghostwriter
    鬼影作家ghostwriter是一款为小说作家、编剧、撰写博客者、新闻编辑、以及专业学生等专注于书写的人而开发的Markdown语法文本编辑器。
  7. Marxico
    Marxico 中文名马克飞象,提供桌面客户端以及离线 Chrome App,支持移动端 Web,可以直接把文本存到印象笔记。
  8. Simplenote
    支持包括 Windows、macOS、Linux、Android、iOS 和 Web 共六大平台,覆盖桌面端和移动端,并且所有文档都可以实现跨平台同步编辑。
  9. Laverna
    Laverna是一个JavaScript笔记应用程序,支持Markdown编辑器和加密。把它当作Evernote的开源替代品。支持 Windows、Android、Linux和Unix-like。
  10. MaHua
    一个在线编辑 Markdown 文档的编辑器,支持VIM 快捷键,完美兼容 Github 的 Markdown 语法。官网
  11. Dillinger
    一个在线编辑 Markdown 文档的编辑器,支持md、 html、pdf 文件导出,支持Dropbox、Github、Google Drive、Onedrive 一键保存。官网
  12. StackEdit
    一个在线编辑 Markdown 文档的编辑器,还挺好用的。StackEdit中文版可以将您的文件与 Gitee、GitHub、Google Drive 和 Dropbox 同步。 它还可以将它们作为博客文章发布到 Blogger、WordPress 和 Zendesk。 您可以选择是以 Markdown 格式、HTML 上传,还是使用 Handlebars 模板引擎格式化输出。

使用体验

速度
MarkdownPad>Moeditor>MarkText>Haroopad>Typora
效率
MarkText>Haroopad>MarkdownPad>Moeditor>Typora

总结

Typora功能齐全,启动和运行速度感人,大文件编辑能力一般,且已收费;
MarkText功能齐全,启动速度还行,大文件编辑能力一般;
Haroopad 功能齐全,侧边有语法提示,启动速度稍慢,比Typora稍快,大文件编辑能力一般;
MarkdownPad 功能齐全,免费版功能够用,大文件编辑能力稍强;
Moeditor 较为简陋,启动速度很快,多次使用对启动的影响不大,大文件编辑能力一般;
长期不更新的就不用试了,如Mou、Smark、CuteMarkEd、MarkPad、Cmd-Markdown、Miu、FarBox等等,BookPad 又卡导出又垃圾,FarBox出2.0了。

个人知识管理系统

  1. Vnote
    VNote使用笔记本来管理笔记。类似于OneNote,一个笔记本可以保存在系统上的任意位置。一个笔记本对应于一个账户的概念。
  2. Yu writer
    美观强大的Markdown 写作工具,绝佳的写作体验。
  3. SiYuan
    本地优先的个人知识管理系统,支持块级引用和双向链接。

总结

较为成熟的Markdown个人知识管理系统软件功能都差不多,区别就在于启动软件的速度、编辑大文件的能力。Zettlr专注学术写作,Obsidian 做笔记管理不错,可以试试。

【转载】好用的Pixiv第三方网站、客户端整理评测(全平台)

【转载】好用的Pixiv第三方网站、客户端整理评测(全平台)

P站一般指Pixiv(pixiv.net),是一个主要由日本艺术家所组成的虚拟社群,是新兴的日本同人画、插画作品分享站点。

本贴对阿虚同学的专栏进行了删减和注解,帮助大家少踩坑。

专栏地址: https://www.bilibili.com/read/cv12206622

▍1 IOS/Android端通用方法

•1.1 PixEzViewer

它现在不叫PixEzViewer,新版本叫PixEz。

由 Notsfsssf 大佬带头开发。

如果你没有P站账号,使用这款软件时,可以帮你注册一个临时账号,而如果你有账号,则可以通过这款软件直连登录。

而现实是什么呢?

“The certificate authority is not trusted , continue ?”

现实就是这么残酷。感兴趣的可以去试试,说不定你的手机能用这款软件。

IOS可到App Store下载: https://apps.apple.com/cn/App/id1494435126

安卓可到作者Github下载: https://github.com/Notsfsssf/Pix-EzViewer/releases

•1.2 P站助手

图片加载速度快

如果你没有P站账号,使用这款软件时,可以帮你注册一个临时账号,而如果你有账号,则可以通过这款软件直连登录。

官网(pixivlite.com)提供安卓、IOS两种下载。

注:IOS的lite版免费(有广告),收费版¥25,安卓端完整版收费¥24。

•1.3 Pixivic

Pixivic是一个P站图片搜索网站,由OysterQAQ大佬带头开发,免费提供pixiv的排行查看与高级会员搜索

电脑版官网: https://pixivic.com/?VNK=42354926

移动版官网: https://m.pixivic.com/

Pixivic作为一个网站,最大的好处就是各平台都能轻松使用。

另外现在也开发了App: https://discuss.sharemoe.net/t/App

这个APP网站我去试了,给大家避个雷,该网站无法访问,或许你可以试试科学上网。

•1.4 vilipix

官网: https://www.vilipix.com/

这个网站和上面的类似,右上角的话可以下载App。

APP的名称叫插画世界,要注册一个vilipix账号,用pixiv账号无法登录。

▍2 安卓端pixiv第三方客户端

•2.1 民萌

图片加载速度很快。

集成了Pixiv,Konachan,Sankaku等常用图片壁纸下载网站,同时还包含Saucenao图片检索工具,以方便大家查找图片壁纸出处,其他辅助功能还有在线音乐播放功能,及动漫铃声库。

软件官网: http://www.minnamoe.com/

如果无法连接,建议换个网络。

注:软件也很不错,需要注册民萌账号。

•2.2 Pixshaft

曾用名Shaft,采用的是Pix-EzViewer的直连方案,缺点:加载速度比较慢。

如果你没有P站账号,使用这款软件时,可以帮你注册一个临时账号,而如果你有账号,则可以通过这款软件直连登录

App内不仅提供「pix­ivi­sion」,还提供「漫画」和「小说」这两个板块!

Github地址: https://github.com/CeuiLiSA/Pixiv-Shaft/releases

现在还叫Shaft,没有直连,需要开代理。

•2.3 Pxvr

其实就是一个内置魔法上网能访问P站的网页套壳App。

软件交互也好还是UI也好,全都是网页版的,操作比较生硬,不是很推荐,但可以作为以防万一的备用。

登录时会遇到recaptcha验证

最好注册一个pxvr账号并开通大会员。

官网下载直载(打开就直接进行下载): https://pxvr.xyz/

▍3 电脑端pixiv第三方客户端

•3.1 Pixiv UWP 2

如果你是WIN10系统,可以安装UWP版软件

浏览器打开: https://www.microsoft.com/zh-cn/p/pixiv-UWP/9pm8k64j71pl

点击获取,自动弹出Microsoft Store进行安装

需要你有账号才能使用! 这款软件并不能帮你注册账号。

在登录时记得在登录框勾选「直连」。

•3.2 Pixeval

需要你有账号才能使用! 这款软件并不能帮你注册账号。

你可能会遇到无法输入密码的情况,解决办法是:先在别的地方把密码打出来,再Ctrl+C,Ctrl+V复制粘贴到软件的登录窗口。

软件是默认开启R-xx的,如果觉得自己扛不住可以关闭

作者的Github下载地址: https://github.com/Rinacm/Pixeval/releases

•3.3 关于Mac和Linux的解决办法

Mac&Linux可以通过Nginx本地反代理直连

教程地址: https://2heng.xin/2017/09/19/pixiv/

写在后面:****

Pixiv官网: https://www.pixiv.net/

除了一些VPN、加速器外,我们还可以通过VPN插件访问。但免费好用的VPN非常稀少,个别好用的VPN因为使用人数太多而无法访问外网。

简单的改hosts登陆(pixiv2018-01-10 15:11)
http://blog.sina.cn/dpool/blog/s/blog_17a4867db0102xeqy.html

使用Pixiv Nginx
https://www.bilibili.com/read/cv10223849

【轻小说】100本轻小说推荐

【轻小说】100本轻小说推荐

《约会大作战》

《朋友的妹妹只喜欢烦我》

《未实装的最终boss成为了伙伴》

《国外的求婚》

《昨春侍君》

《边境都市的培养者》

《不要忘记你和我的那个夏天》

《弹珠汽水瓶里的千岁同学》

《如果救下了要跳楼的女高中生会怎样》

《异世界袭来》

《成为我未婚妻的土妹子在家里很可爱》

《做梦男子是现实主义者》

《青春猪头少年不会梦到兔女郎学姐》

《开始当青梅竹马的妹妹的家境教师后》

《LIAR·LIAR》

《古戒律的魔法骑士》

《千岁同学在汽水瓶里》

《宫本樱同学非常可爱》

《乐园杂音》

《弱势角色友崎君》

《侦探已死》

《欢迎来到实力至上主义的教室》

《青梅竹马绝不会输的恋爱喜剧》

《邻家的天使大人把我贯成废物》

《神渴望着游戏》

《才女的进侍》

《间谍教室》

《圣剑学院的魔法使》

《经验丰富的你和经验为零的我交往的故事》

《日和酱的要求是绝对的》

《让我忘记吧学弟君》

《无法忘记魔女的物语》

《演距离女朋友比奈森》

《转校后遇到的青春可爱美少女是我儿时好兄弟》

《只是穿着制服而已》

《替父母还债的条件是和美少女高中生一起生活》

《喜欢本大爷的竟然就你一个》

《Re:从零开始的异世界生活》

《朝比奈若叶与OO的男友》

《我的女友是老师》

《成长期的学生意外的很有魅力》

《经验丰富的你和经验为零的我交往的故事》

《做梦男子是现实主义者》

《是谁决定现实中无法发生恋爱喜剧的》

《青梅竹马的妹妹》

《如果救下了要跳楼的女高中生会怎样》

《魔女之旅》

《少女之旅》

《Babel TVCM》

《和妹妹的朋友交往》

《为了照顾校花我把自家要是给了她》

《不许和我意外的人恋爱》

《游戏人生》

《谜侦探的条件》

《为了照顾校花我把自家要是给了她》

《做梦男子是现实主义者》

《樱花飘落的小镇》

《成长期的学生意外的很有魅力》

《替父母还债的条件是和美少女高中生一起生活》

《乐园杂音》

《无法忘记魔女的物语》

《我在逝去的春天等你》

《让我忘记吧学弟君》

《绝对不想输给前女友的现女友》

《日和酱的要求是绝对的》

《因为是我先喜欢上的》

《继母的拖油瓶是我的前女友》

《宫本樱同学非常可爱》

《古戒律的魔法骑士》

《千岁同学在波子汽水瓶内》

《开始当青梅竹马的妹妹的家境教师后》

《成为我未婚妻的土妹子在家里很可爱》

《如果救下了要跳楼的女高中生会怎样》

《昨春侍君》

《不是喜欢女儿而是喜欢我》

《国外的求婚》

《约会大作战》

感谢【Mad】100本轻小说混剪!献给喜欢二次元的你~-哔哩哔哩

Windows系统睡眠故障解决

针对win7系统

这篇文章是解决win7无法进入睡眠状态的问题,请看好是睡眠而不是休眠。

本文摘自 链接

做了一点修改和补充。

首先要说明的是无论睡眠、休眠、关机这都和你的电源管理有关,因此如果无法睡眠第一个先要查看电源管理,开始→运行→输入CMD回车→powercfg –a回车,来查看硬件或者软件是否支持,一般情况下会有S1 S2 S3 三个睡眠状态,而且会提示你此系统固件支持哪几个睡眠,例如:

此系统上有以下睡眠状态: 待机 ( S3 ) 休眠 混合睡眠
此系统上没有以下睡眠状态:
待机 (S1)
系统固件不支持此待机状态。
待机 (S2)
系统固件不支持此待机状态。

如果输入命令后出现三个睡眠状态系统固件均不支持,那很可能是因为你的主板没有开启睡眠功能,这样你就要重新启动电脑,进入你的BIOS进行设置启用?开机后主板自检时,台式机尤其是组装的多是摁下DEL键,很多品牌机有自己的BIOS,会显示摁哪个键进入SET UP,有的是F10 有的是ESC等等,这个你要自己看了,要眼急手快,因为时间非常短。笔记本也是如此会有不同的按键来进入BIOS,进入之后找到POWER(电源)项,在里边查找S1 S2 S3项,并开启,多是开启S3就可以,然后保存,重启。

如果你是惠普电脑,而进入BIOS后又找不到电源项,不用担心,系统一般还是能进的,用别的办法解决问题。

如果输入命令后显示VGA.EXE 或者DISPLAY.EXE抑或XXXXX.EXE就说明你的硬件影响到了电源而导致无法睡眠,这种情况下多是驱动问题,VGA 、display的就是显卡驱动,所需要做的就是更新相对的驱动,这种情况还有一个表现就是睡眠选项为灰色。

如果显示下列XXXXXX阻止进入睡眠状态,那就可能是软件问题,你安装的某个软件导致无法睡眠,这样的话你就俩者取其一吧,或者是要睡眠而卸掉软件,或者要软件而不管睡眠。

接下来就是比较诡异的了,输入命令后显示此系统固件支持睡眠S1 S3,不支持S2(这是正常的,大家的基本都是这样),而没有显示其他,电源正常。好吧看看其他。

首先在你的设备管理器里找到网络适配器,下拉,会出现你的网卡,台式机多只有一个,笔记本还多一个无线网卡,要做的是双击你的网卡,找到电源管理选项将允许此设备唤醒计算机,前边的对号勾掉,确定,这往往还可以解决笔记本点击关机后而重启的问题。以防万一,再找到鼠标和其他指针设备,同样也是电源管理,勾掉允许此设备唤醒计算机,至于这么做的原因我认为很可能是因为驱动问题。

如果上述方法还不能解决的话,将解决的办法集中到了控制面板硬件和声音电源选项里,在你当前的电源计划上,选择更改计划设置,弹出的对话框后,再选择更改高级电源设置,弹出的对话框中找到睡眠,然后点击下拉,再点击允许混合睡眠,默认的设置是开启,你只需要更改成关闭,然后应用 确定,再试试你的系统能否睡眠了。

电源计划中还有一个“节能”,也进行相同的设置,方法同上。

如果输入上面的命令后显示此系统固件支持睡眠S3,不支持S1、S2。我们打开设备管理器,双击网卡和鼠标,如果电源管理选项“允许计算机关闭此设备以节约电源”默认勾选而“允许此设备唤醒计算机”是灰的,那我们什么都不要动。如果反过来,取消勾选“允许此设备唤醒计算机”。右击桌面右下角电源打开电源选项,这时候允许混合睡眠选项一般是关闭的,我们打开它。

解决Steam创意工坊无法登陆的方法

解决Steam创意工坊无法登陆的方法

1、选择一款加速器(比如UU加速器),选择steam社区加速即可;

2、下载steamcommunity_302这款软件,打开exe文件,选择反代加速后启动服务即可;

3、手动修改host,首先找到host文件的根目录,复制到桌面用记事本打开,在最后一行加入111.230.82.224 steamcommunity.com后再另存为替换原文件就可以了;

4、打开steam++,选择steam,勾选steam社区,启动加速;(注:steam++仍在完善中,steam加速效果还可以呢)

5、使用Workshop Tools,该工具致力于解决工坊无法打开的问题,服务于玩家、Mod制作者和开发者。

特点:

①无需VPN

②快速切换访问不同的游戏工坊

③一键批量下载

④自动重试上传(作用于上传大型文件)

原价仅需26RMB

详情请见steam商店。

FFmpeg音频处理

FFmpeg音频处理

音频信息

查看音频信息

ffmpeg -i video.mp4

查看网络视频的信息

ffmpeg -i http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4

查看音频的布局情况

ffmpeg -layouts

音频抽取

从视频文件中抽取音频

提取完整音频

ffmpeg -i sample.mp4 -q:a 0 -map a sample.mp3

提取指定时间段的音频

ffmpeg -i sample.mp4 -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3

不重新编码

提取格式不能为MP3,可以是aac和m4a,请执行以下操作:

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac

-acodec 表示音频解码方式,-vn表示去除视频

重新编码

下面是如何使用FFmpeg从视频中提取音频,然后使用libmp3lame将音频编码为不同的质量,并将其存储为mp3文件。

ffmpeg.exe -i videoWithAudio.mp4 -vn -c:a libmp3lame -q:a 1 onlyAudio.mp3

-q:a表示质量(在LAME文档中定义[1]),质量分布范围为0~6,其中0表示高质量音频,6表示低质量音频。

从网络视频文件中抽取音频

ffmpeg -i http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4 -acodec copy -vn out_net.mp4

-acodec 用于音频的编码设置

合并

一种方法是连接到一起

ffmpeg64.exe -i "concat:123.mp3|124.mp3" -acodec copy output.mp3

解释:-i代表输入参数
contact:123.mp3|124.mp3代表着需要连接到一起的音频文件
-acodec copy output.mp3 重新编码并复制到新文件中

另一种方法是混合到一起

ffmpeg64.exe -i 124.mp3 -i 123.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp3 remix.mp3

解释:-i代表输入参数
-filter_complex ffmpeg滤镜功能,非常强大,详细请查看文档
amix是混合多个音频到单个音频输出
inputs=2代表是2个音频文件,如果更多则代表对应数字
duration 确定最终输出文件的长度
longest(最长)|shortest(最短)|first(第一个文件)
dropout_transition
The transition time, in seconds, for volume renormalization when an input stream ends. The default value is 2 seconds.
-f mp3 输出文件格式

删除音频

删除视频中的音频

只将视频复制到一个新的文件中,而不复制音频。

ffmpeg.exe -i videoWithAudio.mp4 -c:v copy -an videoWithoutAudio.mp4
  • 使用-c:v copy命令将视频复制到videoWithoutAudio.mp4
  • -an告诉FFmpeg不要复制音频

上述方法非常适用于电影中只有一个音轨的情况。

删除某个特定音轨

你可以使用FFmpeg中的map命令来删除特定音轨。

map命令的通用语法是:

-map input_file_index:stream_type_specifier:stream_index

然后,你可以通过-map 0:a:1(从0开始计数)从视频中选择第二个音轨。在上文的例子中,如果你的文件中有一个视频和两个音轨,那么你就可以使用-map 0:a:1只选择第二个音轨,并将它复制到你的最终输出文件中。

同样,-map 0是指选择第一个输入文件中的所有数据(包括音频和视频),所以你需要先选择所有数据,然后取消选择音频。

ffmpeg.exe -i videoWithAudio.mp4 -map 0 -map 0:a:1 -copy videoOutput.mp4

如果电影中有5个音轨,除了第一个,其他你都想选择。这个时候你可以使用反向的map命令(在map命令的参数前加负号)。使用-map -0:a:0 这一命令,FFmpeg在选择时就会忽略第一个音轨。反向的map非常强大!

实际上,我们已在前文学习了使用 -an命令从视频中删除音频。你可以通过如下方式,使用反向的map来达到相同的效果。

ffmpeg -i videoWithAudio.mp4 -map 0 -map -0:a videoWithoutAudio.mp4

添加音频

ffmpeg -i video.mp4 -i audio.mp3 -c copy -map 0:v:0 -map 1:a:0 
videoWithAudio.mp4

使用map命令将视频和音频分别从不同的文件中复制到同一个输出文件。

  • -map 0:v:0 选择了第0个输入文件(视频输入)的第0个轨道。
  • –map 1:a:0 选择了第一个输入文件(音频输入)的第0个轨道。
  • 不用重新编码,-c copy同时复制音轨和视轨到输出文件。如果你想要重新编码,可以选择合适的音视频编解码器,配置相应的编码质量。

替换音频

请看下列命令行:
-map input_file_index:stream_type_specifier:stream_index.
所以,你可以使用-map 1:a:2来选择第二个输入文件中的第三个音轨,因为计数从0开始。

ffmpeg -i video_with_audio.mp4 -i newAudio.wav -map 0:0 -map 1:0 -c:v copy -c:a libmp3lame -q:a 1 -shortest  video_with_newAudio.mp4

在上文的例子中,我们需要从一个文件中获取视频以及另一个文件中获取音频。而map命令非常便捷地完成了上述操作。我们从第一个输入文件(视频)中选择第0个轨道,并从第2个输入文件(音频)中选择第0个轨道。

然后我们原样复制视频并重新编码音频,再将它们一起放入新的文件中。如果你不想重新编码音频,你只需使用-a:c copy命令,那么音频就只被复制而不会重新编码。

-shortest命令用于确保当达到较短的输入文件(两个输入文件之一)长度时停止转换。如果这个功能在你的用例中无关紧要,那么你可以不使用这一命令。

绘制音频波形图

绘制多声道混合的音频波形图

ffmpeg -i music.mp3 -filter_complex "showwavespic=s=640*120" -frames:v 1 output.png

绘制不同声道的波形图

ffmpeg -i 1.mp3 -filter_complex "showwavespic=s=640*240:split_channels=1" -frames:v 1 output.png

使用多媒体滤镜 ebur128分析音频响度变化

ebur128扫描滤镜。这个滤镜需要一个音频流,但会原样输出。默认情况下,它以10Hz的频率记录一条消息,其中包括瞬时响度(由M标识)、短期响度(S)、综合响度(I)和响度范围(LRA)。

滤镜有个实时的输出,展示响度的变化,主要的绘图区域包含短期响度(3秒分析),以及其后的舒适响度(400毫秒)

具体参数:https://ffmpeg.org/ffmpeg-all.html#ebur128-1

ffmpeg -nostats -i stars.mp3 -filter_complex ebur128 -f null -

加-report可把结果输出到日志文件

利用EBU放缩规模计+18d的实时图像

ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"

改变格式

ffmpeg -i audio.mp3 -f ogg out.ogg

-f ogg表示编码格式是ogg

改变采样率

ffmpeg -i audio.mp3 -ar 8000 out.mp3

-ar 用于设置音频采样率

改变比特率

ffmpeg -i audio.mp3 -ab 5000 out.mp3

-ab 用于设置音频比特率

片段截取

-ss 表示开始时间(时:分:秒),-to 表示结束时间(时:分:秒),-t 表示截取时长(时:分:秒)

ffmpeg -i audio.mp3 -ss 0:0:10 -to 0:0:20 out.mp3
ffmpeg -i audio.mp3 -ss 0:0:10 -t 0:0:20 out.mp3

也可以像下面这样,以秒为单位。

ffmpeg -i audio.mp3 -ss 10 -t 20 out.mp3

-ss用于设置开始时间,-t用于设置持续时间

音频声道

改变声道

ffmpeg -i audio.mp3 -ac 1 out.mp3

-ac 用于设置声道,1表示单声道,2表示立体声

双声道合并单声道

ffmpeg -i music.mp3 -ac 1 music.aac

单声道转双声道

ffmpeg -i left.aac -ac 2 output.m4a

双声道的提取

-map_channel [input_file_id.stream_specifier.channel_id|-1][?][:output_file_id.stream_specifier]
方式一:

ffmpeg -i music.mp3 -map_channel 0.0.0 letf.aac -map_channel 0.0.1 right.aac

方式二:
使用pan滤镜

ffmpeg -i music.mp3 -filter_complex "[0:0]pan=1c|c0=c0[left];[0:0]pan=1c|c0=c1[right]" -map "[left]" left.aac -map "[right]" right.aac -y

双声道转双音频流,把双声道音频提取出来转为一个音频文件两个音频流

ffmpeg -i music.mp3 -filter_complex channelsplit=channel_layout=stereo output.mka

可以看到生成的视频就包含了两个流,大多默认情况下播放器只会播放第一个流

将两个音频源合并为双声道

ffmpeg -i left.aac -i right.aac -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" output.mka

//mka为acc编码格式

音频音量

音频音量探测

ffmpeg -i test.mp4 -filter_complex volumedetect -c:v copy -f null /dev/null

mean_volume为获得音频的平均大小

音量设置

使用-vol选项

ffmpeg -i music.mp3 -vol 30 sound_low.mp3

-vol选项接受从0到256的整数值,其中256是最大值

使用表中描述的卷过滤器

音量降低到三分之二

ffmpeg -i music.mp3 -af volume=2/3 quiet_music.mp3

增加10分贝的音量

ffmpeg -i music.mp3 -af volume=10dB louder_sound.mp3

加快/减慢音频节奏

加快

ffplay music.mp3 -af atempo=1.5

减慢

ffplay music.mp3 -af atempo=0.5

chorus 给声音添加合唱效果

可以让独唱变得像合唱,但也可以用于仪表。

合唱与回声效应都有短延迟,但是回波延迟是常数,合唱则采用不同的正弦或三角调制。调制深度范围定义了调制延迟(播放之前或之后的延迟)。因此延迟的声音听起来较慢或更快,这是原来周围的延迟调整声音,像是有一个与合唱整体略微差异。

它接受下面的参数(每个参数项如果有多个可能值用|分隔):

in_gain

设置输出增益,默认0.4

out_gain

设置输出增益,默认0.4

delays

设置延迟,延迟通常在40ms-60ms

decays

设置衰减

speeds

设置速度

depths

设置深度

例子

一个延迟(二人合唱效果)

chorus=0.7:0.9:55:0.4:0.25:2

两个延迟(三人合唱效果)

ffplay music.mp3 -af "chorus=0.6:0.9:50|60:0.4|0.32:0.25|0.4:2|1.3"

三个延迟(四人及更多合唱效果)

horus=0.5:0.9:50|60|40:0.4|0.32|0.3:0.25|0.4|0.3:2|2.3|1.3

参考文章

FFMPEG常用命令(一):音视频信息与抽取
FFMPEG常用命令(三):音频相关命令
ffmpeg常用音频处理
使用FFmpeg添加、删除、替换和提取视频中的音频
🔨 FFmpeg 提取视频的音频
ffmpeg 多个音频合并 截取 拆分

FFmpeg图片处理

FFmpeg图片处理

说明:下面测试命令中image_source 是要处理的输入文件out_source是处理完成之后的输出文件

1.图片压缩

ffmpeg可以很完美的压缩图片生成新图片,并可以设置压缩等级

ffmpeg -i image_source -q compress_level out_source
#compress_level:压缩等级为正整数,数值越大压缩等级越高

2.等比放大

参数hqx。

ffmpeg -i image_source -vf hqx=4 out_source

效果是尺寸等比放大4倍

3.约束比例压缩

ffmpeg可以将图片压缩成指定的尺寸

ffmpeg -i image_source -vf scale=width:height out_source
#width为压缩后的图片宽度
#height为压缩后的图片高度
#当width或height其中有一个数值为-1时将保持原来图片尺寸比例压缩

4.图片裁剪

ffmpeg可以指定图片裁剪位置和裁剪的图片尺寸

ffmpeg -i image_source -vf crop=width:height:from_x:from_y out_source
#width是要裁剪出的图片的宽度
#height是要裁剪出的图片的高度
#from_x是裁剪的起始X轴的位置
#from_y是裁剪的起始Y轴的位置
#如果不指定from_x和from_y表示从原始图片中心位置开始裁剪

5.添加水印图片

ffmpeg可以为图片添加水印,可以设置水印图片的大小、位置和透明度

ffmpeg -i image_source -vf movie=logo_source,scale=logo_width:logo_height,lut=a=val*opacity_num[watermask];[in][watermask] overlay=from_x:from_y[out] -y  out_source
#logo_source为水印图片地址
#logo_width为水印图片的宽度
#logo_height为水印图片的高度
#opacity_num为水印图片的透明度
#from_x为水印的起始X轴的位置
#from_y为水印的起始Y轴的位置

6.添加文字水印

ffmpeg可以为图片添加文字水印,可以设置字体、颜色、尺寸、文字内容、文字位置

ffmpeg -i image_source -vf drawtext=fontfile=font_ttf_path:fontcolor=font_color:fontsize=font_size:text=message_info:x=from_x:y=from_y  out_source
#font_ttf_path为字体路径,此项必须设置否则会出现字体无法找到的错误;
#字体路径要设置绝对路径并且要注意路径正反斜线转义(例如C\\:/Windows/Fonts/simhei.ttf)
#font_color为字体的颜色
#font_size为字体的大小
#message_info为水印文字内容
#from_x为水印的起始X轴的位置
#from_y为水印的起始Y轴的位置
#如果水印内容是中文需要设置中文字体否则会文字显示乱码

参数delogo,在指定的区域作模糊处理,达到消除logo的效果。

ffmpeg -i image_source -vf delogo=x=0:y=0:w=50:h=50:band=5:show=1 out_source

band为模糊的强度,show为1时显示模糊的区域框,省略show或值为0时不显示区域框。

8.图片旋转指定的角度

ffmpeg可以将图片按照指定的角度旋转生成新图片

ffmpeg -i image_source -vf rotate=route_num*PI/180 -y  out_source
#route_num是要旋转的角度
#当route_num大于0的时候顺时针旋转,当route_num小于0的时候逆时针旋转

9.图片旋转特殊简便命令

上面的命令理论上可以完成所有的图片旋转操作,但ffmpeg仍然存在特殊简便旋转命令

ffmpeg -i image_source -vf transpose=route_number -y out_source
#route_number=0顺时针旋转90度再左右镜像
#route_number=1顺时针旋转90度
#route_number=2逆时针旋转90度
#route_number=3逆时针旋转90度再左右镜像

10.图片左右镜像

ffmpeg -i image_source -vf hflip out_source

11.将图片上下镜像

ffmpeg -i image_source -vf vflip out_source

12.加边框

参数drawbox。

ffmpeg -i image_source -vf drawbox out_source

在边界画一个实心的黑框

ffmpeg -i image_source -vf drawbox=x=10:y=10:w=200:h=100:color=red@0.5 out_source

0.5为边框的透明度(0到1)

ffmpeg -i image_source -vf drawbox=x=10:y=10:w=300:h=230:color=pink@0.5:t=10 out_source

t为边框厚度

13.画网格

参数drawgrid。

ffmpeg -i image_source -vf drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5 out_source

画一个3*3的白色的厚度为2,透明度为0.5的网络

ffmpeg -i image_source -vf drawgrid=w=400:h=100:t=2:c=red@0.5 out_source

画每个单元为400*100的网格

14.加底板

参数pad。

ffmpeg -i image_source -vf pad=500:500:40:40:violet out_source
ffmpeg -i image_source -vf pad=width=500:height=500:x=40:y=40:color=violet out_source

以上两个命令是一样的效果,增加一个500*500的底面板,(x,y)是原图摆放的位置

15.画边缘

参数edgedetect。

ffmpeg -i image_source -vf edgedetect=low=0.1:high=0.4 out_source
ffmpeg -i image_source -vf edgedetect=low=0.5:high=0.8 out_source

low小于等于high,且值的范围为[0,1],是检测算法使用的阈值。

16.加噪音

参数noise。

ffmpeg -i image_source -vf noise=alls=100:allf=t+u out_source

alls表示所有像素成分的强度,范围为[0,100],默认为0;allf表示所有像素成分的噪音类型,t为临时噪音,u为统一噪音。

ffmpeg -i image_source -vf noise=alls=100:allf=a out_source

a表示平滑的平均噪音

ffmpeg -i image_source -vf noise=alls=100:allf=p out_source

p表示随机噪音

17.模糊处理

高斯模糊

ffmpeg -i image_source -filter_complex gblur=sigma=10 out_source

glur是高斯blur的缩写
简单来说就是通过周围的像素点计算得到中间像素点的值,ffmpeg中gblur滤镜只考虑了上下左右四个点,然后有一个强度系数sigma。
gblur=sigma=10为模糊程度

方框模糊

ffmpeg -i image_source -vf boxblur=2 out_source

值越大越模糊

18.光晕

参数vignette。

ffmpeg -i image_source -vf vignette=PI/4 out_source

19.变色

colorbalance

调整rgb某个维度的权重实现变色。

选项有三组,分别为rs/gs/bs、rm/gm/bm、rh/gh/bh。每一个选项都指定了目标颜色(rgb中的一个),s表现偏暗,m表现偏中间,h表现偏亮(且平滑)。

选项的值范围为[-1, 1],正数表示偏向目标颜色,负数表示远离目标颜色。

比如这三个命令:

ffmpeg -i image_source -vf colorbalance=rs=1 out_source
ffmpeg -i image_source -vf colorbalance=rm=1 out_source
ffmpeg -i image_source -vf colorbalance=rh=1 out_source
ffmpeg -i image_source -vf colorbalance=rh=-0.6 out_source

colorchannelmixer

对rgba四个通道进行重新计算,并分别给定权重比例。

ffmpeg -i image_source -vf colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3 out_source
ffmpeg -i image_source -vf colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131 out_source

每个通道的权重从0到1,先给red的计算权重,即red=redrr + bluerb + greenrg +
alphara,然后分别是green跟blue的计算权重。

hue

改变色调,相当在调色板上调色。

ffmpeg -i image_source -vf hue=h=30:s=1 out_source

s为饱和度,范围为[-10,10],默认为1。h为角度,不同角度有不同的颜色布局(类比调色板),范围为[0,360],超过360则相当于从0开始,默认为0,在360时,就是原图。

lut/lutyuv/lutrgb

ffmpeg -i image_source -vf lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val" out_source
ffmpeg -i image_source -vf lutyuv="y=negval:u=negval:v=negval" out_source

lutyuv用于yuv颜色空间。这两个命令的效果是一样的,都是反转,得到底片的效果

ffmpeg -i image_source -vf lutyuv=y=negval out_source

把亮度(y)反转

ffmpeg -i image_source -vf lutyuv="u=128:v=128" out_source

把色度移除(uv),得到黑白图

ffmpeg -i image_source -vf lutyuv="y=2*val" out_source

提升亮度

ffmpeg -i image_source -vf lutyuv='u=1.2val:v=1.1val' out_source

调整uv的值

negate

反转,得到底片的效果,参数值为0或1,为1时表示把alpha通道也反转,默认为0。

ffmpeg -i image_source -vf negate=0 out_source

swapuv

uv互换。

ffmpeg -i image_source -vf swapuv out_source

20.eq效果

参数为eq,可以调整亮度、饱和度、对比度等。

ffmpeg -i image_source -vf eq=brightness=0.2 out_source

brightness为亮度,值范围为[-1,1]

ffmpeg -i image_source -vf eq=contrast=1.5 out_source

contrast是对比度,值范围为[-2, 2]

ffmpeg -i image_source -vf eq=saturation=0.1 out_source

saturation是饱和度,值范围为[0,3],默认是1

ffmpeg -i image_source -vf eq=gamma_r=0.2 out_source

调整gamma系数,范围为[0.1,10],默认是1

21.多张图片合成视频

ffmpeg -r 25 -i %d.png -vcodec libx264 out_source

-r指定帧率,%d表示将按数字顺序读取PNG文件,-vcodec指定视频编码器,-b:v调整视频码率,-crf调整视频质量,-vf scale 调整视频分辨率

22.视频图片提取

ffmpeg -i image_source ./test/0_%05d.jpg
ffmpeg -i image_source -ss 0:0:29 -t 0:0:8 -r 16 -f image2 ./test/0_%05d.jpg

获取视频关键帧并保存成jpg图像

1秒取1帧 r:rate

ffmpeg -i image_source -f image2 -r 1  dstPath/image-%03d.jpg

提取I帧

ffmpeg -i image_source -an -vf select='eq(pict_type\,I)' -vsync 2 -s 720*480 -f image2  dstPath/image-%03d.jpg

参考文章

FFmpeg—-图片处理
ffmpeg对图片模糊处理
ffmpeg中的gblur实现
使用ffmpeg进行视频图片提取
FFMPEG获取视频关键帧并保存成jpg图像
多媒体开发(6):用滤镜实现各种图片效果

FFmpeg入门级简单教程

FFmpeg入门级简单教程

0.概述

FFmpeg的名称来自MPEG视频编码标准,前面的"FF"代表"Fast

Forward",FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

FFmpeg

是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的便携性。\

\

FFmpeg 可以在 Linux、Mac OS X、Microsoft Windows、BSDs、Solaris

等各种构建环境、机器架构和配置下编译、运行,并通过测试基础设施 FATE。\

\

它包含了

libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale

和 libswresample,可以被应用程序使用。还有 ffmpeg、ffplay 和

ffprobe,可以被终端用户用于转码和播放。

其中:

  1. ffmpeg:是一个命令行工具,用来对视频文件转换格式,也支持对电视卡实时编码

  2. libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxers和muxer库;

  3. libavcodec:用于各种类型声音/图像编解码;

  4. libavfilter:滤镜库

  5. libavutil:包含一些公共的工具函数;

  6. libswscale:用于视频场景比例缩放、色彩映射转换;

  7. libpostproc:用于后期效果处理;

  8. ffsever:是一个HTTP多媒体实时广播流服务器,支持时光平移;(注:本文不介绍)

  9. ffplay:是一个简单的播放器,使用ffmpeg

    库解析和解码,通过SDL显示;(一般编译完没有带ffplay,新版本版本依赖于sdl-2.0,需要安装sdl-2.0才能生成ffplay)

0.1.术语

容器(Container)容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。

流(Stream)是一种视频数据信息的传输方式,5种流:音频(a)、附件(t)、数据(d)、字幕(s)和视频(v)。

帧(Frame)帧代表一幅静止的图像,分为I帧,P帧,B帧。

编解码器(Codec)是对视频进行压缩或者解压缩,CODEC =Code (编码)

+DECode(解码)

复用/解复用(mux/demux)把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux)把不同的流从某种容器中解析出来,这种行为叫做解复用(demux);

视频转换流程解析

代码转换过程中,ffmpeg在libavformat库中调用demuxers来读取输入,并从数据包中获取编码数据。如果有更多的输入,ffmpeg可以通过跟踪任何活动输入流的最低时间戳来保持它们的同步。然后解码器从编码的数据包中生成未压缩的帧,在可选的过滤后,帧被发送到编码器。编码器产生新的编码包,它被发送到muxer并写入到输出。

流拷贝

流拷贝是对指定数据流仅仅进行复制,这种情况下不会进行编码解码,仅仅是分离和混合数据包,所以特别快,也不会造成质量损失,这也导致这种模式不适用复杂的滤镜处理等,这种模式常用于文件包格式或者修改部分元数据信息。

播放原理

封装格式作用:视频码流和音频码流按照一定的格式储存在一个文件汇总

视频编码数据作用:将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量

音频编码数据作用:将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量

视频像素数据作用:保存了屏幕上每一个像素点的像素值格式:常见的像素数据格式有RGB24,

RGB32, YUV420P,YUV422P,YUV444P等。

压缩编码中一般使用的是YUV格式的像素数据,最为常见的格式为YUV420P。特点:视频像素数据体积很大

音频采样数据作用:保存了音频中每个采样点的值。特点:音频采样数据体积很大

0.2.码流 kb/s

码流(Data

Rate)是指视频图像经过编码压缩后在单位时间内的数据流量,也叫码率,一般我们用的单位是kb/s或者Mb/s。是视频编码中画面质量控制中最重要的部分。同样分辨率下,压缩比越小,视频图像的码率就越大,画面质量就越高,文件体积也越大。

其计算公式是文件体积=时间X码率/8。

0.3.采样率Hz

采样率(也称为采样速度或者采样频率)定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样率是指将模拟信号转换成数字信号时的采样频率,也就是单位时间内采样多少点。一个采样点数据有多少个比特。

0.4.比特率bps

比特率是指每秒传送的比特(bit)数。单位为bps(BitPer

Second),比特率越高,传送的数据越大。比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示,而比特就是二进制里面最小的单位,要么是0,要么是1。比特率与音、视频压缩的关系,简单的说就是比特率越高,音、视频的质量就越好,但编码后的文件就越大;如果比特率越少则情况刚好相反。比特率是指将数字声音、视频由模拟格式转化成数字格式的采样率,采样率越高,还原后的音质、画质就越好。

比特率是决定整体音频或视频质量的参数。

它规定了每时间单位处理的位数,在Ffmpeg中,位速率以每秒位数表示。比特率决定了存储1秒编码流的位数

比特率 =采样率 x 采用位数 x声道数.

VBR(Variable Bitrate)动态比特率

也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率,这是以质量为前提兼顾文件大小的方式,推荐编码模式;

ABR(Average

Bitrate)平均比特率是VBR的一种插值参数。LAME针对CBR不佳的文件体积比和VBR生成文件大小不定的特点独创了这种编码模式。ABR在指定的文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,可以做为VBR和CBR的一种折衷选择。

CBR(Constant Bitrate),常数比特率

指文件从头到尾都是一种位速率。相对于VBR和ABR来讲,它压缩出来的文件体积很大,而且音质相对于VBR和ABR不会有明显的提高。

0.5.帧速率

帧速率是编码成视频文件的每秒帧数(FPS或fps),人眼需要至少约15

fps来观看连续运动。

帧率也称为帧频,其单位是赫兹(Hz),LCD显示器通常具有60

Hz的频率。有两种帧速率 –

隔行(在FPS编号后表示为i)和逐行(在FPS编号后表示为p)。越高的帧速率可以得到更流畅、更逼真的动画。每秒钟帧数(FPS)越多,所显示的动作就会越流畅。

0.6.I、P、B 帧

在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧,如下图所示。

  • I帧即Intra-coded

    picture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码

  • P帧即Predictive-codedPicture(预测编码图像帧),利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码

  • B帧即Bidirectionallypredicted

    picture(双向预测编码图像帧),提供最高的压缩比,它既需要之前的图像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码

三种帧的说明

  1. I帧

I帧:帧内编码帧

,I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)

I帧特点:

1) 它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;

2) 解码时仅用I帧的数据就可重构完整图像;

3) I帧描述了图像背景和运动主体的详情;

4) I帧不需要参考其他画面而生成;

5) I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);

6) I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;

7) I帧不需要考虑运动矢量;

8) I帧所占数据的信息量比较大。

  1. P帧

P帧:前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧"某点"的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P帧"某点"的预测值并与差值相加以得到P帧"某点"样值,从而可得到完整的P帧。

P帧特点:

1) P帧是I帧后面相隔1~2帧的编码帧;

2) P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);

3) 解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;

4) P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;

5) P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;

6) 由于P帧是参考帧,它可能造成解码错误的扩散;

7) 由于是差值传送,P帧的压缩比较高。

  1. B帧

B帧:双向预测内插编码帧。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况,但我这样说简单些),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。

B帧的预测与重构:B帧以前面的I或P帧和后面的P帧为参考帧,“找出"B帧"某点"的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中"找出(算出)“预测值并与差值求和,得到B帧"某点"样值,从而可得到完整的B帧。

B帧特点

1)B帧是由前面的I或P帧和后面的P帧来进行预测的;

2)B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;

3)B帧是双向预测编码帧;

4)B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;

5)B帧不是参考帧,不会造成解码错误的扩散。

I 帧、P 帧、B 帧的区别在于:

I 帧(Intracoded frames):I

帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。I

帧使用帧内压缩,不使用运动补偿,由于 I

帧不依赖其它帧,所以是随机存取的入点,同时是解码的基准帧。I

帧主要用于接收机的初始化和信道的获取,以及节目的切换和插入,I

帧图像的压缩倍数相对较低。I

帧图像是周期性出现在图像序列中的,出现频率可由编码器选择。

P 帧(Predictedframes):P 帧和 B

帧图像采用帧间编码方式,即同时利用了空间和时间上的相关性。P

帧图像只采用前向时间预测,可以提高压缩效率和图像质量。P

帧图像中可以包含帧内编码的部分,即 P

帧中的每一个宏块可以是前向预测,也可以是帧内编码。

B 帧(Bi-directionalpredicted frames):B

帧图像采用双向时间预测,可以大大提高压缩倍数。值得注意的是,由于 B

帧图像采用了未来帧作为参考,因此 MPEG-2

编码码流中图像帧的传输顺序和显示顺序是不同的。

也就是说,一个 I 帧可以不依赖其他帧就解码出一幅完整的图像,而 P 帧、B

帧不行。P 帧需要依赖视频流中排在它前面的帧才能解码出图像。B

帧则需要依赖视频流中排在它前面或后面的帧才能解码出图像。

在H264的概念中有一个帧称为IDR帧,那么IDR帧与I帧的区别是什么呢?

首先来看一下IDR的英文全称instantaneous decoding refresh

picture,因为H264采用了多帧预测,所以I帧之后的P帧有可能会参考I帧之前的帧,这就使得在随机访问的时候不能以找到I帧作为参考条件,因为即使找到I帧,I帧之后的帧还是有可能解析不出来,而IDR帧就是一种特殊的I帧,即这一帧之后的所有参考帧只会参考到这个IDR帧,而不会再参考前面的帧。在解码器中,一旦收到一个IDR帧,就会立即清理参考帧缓冲区,并将IDR帧作为被参考的帧。

0.7.GOP

在视频编码序列中,GOP即Group of

picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。需要说明的是,通过提高GOP值来提高图像质量是有限度的,在遇到场景切换的情况时,H.264编码器会自动强制插入一个I帧,此时实际的GOP值被缩短了。另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP开始才有可能得以恢复,所以GOP值也不宜设置过大。同时,由于P、B帧的复杂度大于I帧,所以过多的P、B帧会影响编码效率,使编码效率降低。另外,过长的GOP还会影响Seek操作的响应速度,由于P、B帧是由前面的I或P帧预测得到的,所以Seek操作需要直接定位,解码某一个P或B帧时,需要先解码得到本GOP内的I帧及之前的N个预测帧才可以,GOP值越长,需要解码的预测帧就越多,seek响应的时间也越长。

0.8.DTS、PTS 的概念

DTS(Decoding Time

Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。

PTS(Presentation Time

Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。

需要注意的是:虽然 DTS、PTS

是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。

当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B

帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。

比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P

帧中信息,因此这几帧在视频流中的顺序可能是:I P B

B,这时候就体现出每帧都有 DTS 和 PTS 的作用了。DTS

告诉我们该按什么顺序解码这几帧图像,PTS

告诉我们该按什么顺序显示这几帧图像。顺序大概如下:

PTS: 1 4 2 3

DTS: 1 2 3 4

Stream: I P B B

0.9.音视频的同步

上面说了视频帧、DTS、PTS

相关的概念。我们都知道在一个媒体流中,除了视频以外,通常还包括音频。音频的播放,也有

DTS、PTS 的概念,但是音频没有类似视频中 B

帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的。

音频视频混合在一起播放,就呈现了我们常常看到的广义的视频。在音视频一起播放的时候,我们通常需要面临一个问题:怎么去同步它们,以免出现画不对声的情况。

要实现音视频同步,通常需要选择一个参考时钟,参考时钟上的时间是线性递增的,编码音视频流时依据参考时钟上的时间给每帧数据打上时间戳。在播放时,读取数据帧上的时间戳,同时参考当前参考时钟上的时间来安排播放。这里的说的时间戳就是我们前面说的

PTS。实践中,我们可以选择:同步视频到音频、同步音频到视频、同步音频和视频到外部时钟。

PAR —— Pixel Aspect Ratio

像素横纵比。表示每个像素的宽度与长度的比值。可以认为每个像素不是正方形的。

DAR —— Display Aspect Ratio

显示横纵比。最终显示的图像在长度单位上的横纵比。

SAR —— Sample Aspect Ratio

采样横纵比。表示横向的像素点数和纵向的像素点数的比值。

0.10.Ffmpeg滤镜(Filters, filterchains,filtergraphs)

滤镜(Filters):在编码前,对原音视频使用libavfilter库中的滤镜进行处理,Ffmpeg内置了许多多媒体过滤器,可以通过多种方式组合它们。

分为两种滤镜:简单滤镜和复合滤镜

简单滤镜:

简单滤镜就是只有1个输入和输出的滤镜,使用-vf和-af分别对应视频和音频

复合滤镜:

复合滤镜就是那些不能简单的描述为一个线性处理过程应用到一个流的情况,例如包含多个输入输出。

复合滤镜使用-filter_complex进行设置

滤镜的使用一般是 滤镜名=由于冒号(隔开各个参数

滤镜链图(filtergraphs)是连接滤镜的有向图,它可以包含循环动作,也可以在多个滤镜间形成链路,每个链接都有一个连接到滤镜的输入和一个连接到滤镜的输出

一个滤镜链(filterchains)包含序列链接起来的滤镜,这个序列由”,“分隔各个滤镜

一个滤镜链图(filtergraphs)包含序列滤镜链,这个序列由”;“分隔各个滤镜链

同一路的滤镜间用逗号(,)进行分割,不同路的滤镜间用分号进行分割(;)

https://blog.csdn.net/sinat_14826983/article/details/83043906

1.安装

首先登陆官网

{width=“4.153543307086614in”

height=“2.578740157480315in”}

选择中间的Window版本,然后看到有两个, 先讲讲第一个链接。

选择Windows builds from gyan.dev\

跳转到下载页面如下图:

{width=“2.874015748031496in”

height=“2.7559044181977255in”}

在页面中,选择release-full.7z下载。

再说说第二个链接

Windows builds by BtbN

点击后会跳转到github上面。如下图:

{width=“3.0196850393700787in”

height=“2.7913385826771653in”}

选择win64的gpl版本。然后下载下来。

添加系统环境变量。C:\ffmpeg-4.4-full_build\ffmpeg-4.4-full_build\bin(解压后文件夹地址),将该bin目录添加到系统环境变量中。在原有基础上添加新的变量前面要输入分号。步骤如图所示——

Win7

{width=“2.7125984251968505in”

height=“2.854330708661417in”}{width=“2.7755905511811023in”

height=“2.8622047244094486in”}

{width=“2.7755905511811023in”

height=“2.8622047244094486in”}{width=“2.5984241032370954in”

height=“2.866140638670166in”}

Win10

{width=“3.2086614173228347in”

height=“3.3779516622922134in”}

在PowerShell中输入:ffmpeg –version

{width=“3.877952755905512in”

height=“3.12992125984252in”}

出现上面的信息,则配置成功。

2.ffmpeg常用命令

2.0.查看视频信息

通过ffmpeg -i

input.mp4可以获取input.mp4的全部信息的文本。如果需要获取独立细节,可以通过——

1.获取视频时长

ffmpeg -i input.mp4 -hide_banner 2>&1 | findstr 'Duration'

其中-hide_banner选项是用来屏蔽 FFmpeg

标语和其它细节。另外,如果获取不到视频的时长信息,有可能是因为视频为直流数据,没有时间轴,可以通过-c

copy命令选项处理。

2.查看FFmpeg支持的所有格式

ffmpeg –formats

2.1.转换格式

1.默认转换ffmpeg -i input.flv output.mp4其他格式同理。

2.转换时保持源视频质量ffmpeg -i input.flv -qscale 0 output.mp4

2.2.从视频中提取音频

ffmpeg -i input.mp4 -vn output.mp3

2.3.调整视频分辨率

  1. 方式一

ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4

  1. 方式二

ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4

调整视频的分辨率会比较耗时。

2.4.压缩视频文件

ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf

24 output.mp4

2.5.从视频中提取图像

1.提取一帧ffmpeg -ss 50 -i input.mp4 -y -f image2 -vframes 1

output.jpg-ss后跟开始时间

2.提取所有关键帧到图片序列ffmpeg -i input.mp4 -r 1 -f image2

image-%2d.jpg

2.6.视频剪切

ffmpeg -ss 00:16:00 -t 00:01:00 -i input.mp4 -c:v copy -c:a copy

output.mp4

这里关于视频和音频的导出需要使用-c:v copy和-c:a

copy,不要使用-vcodec和-acodec。使用后者可能会导致视频在开头或是结尾的卡顿。

2.7.设置比特率

ffmpeg -i input.mp4 -b 1.5M output.mp4

设置比特率时,实验中使用-b 1.5M后,将38.6MB的原视频压缩到了13.8MB。

2.8.限制 cpu

ffmpeg -i input.flv -y -threads 1 output.mp4

如果想要降低对cpu的使用,-threads的值可以往小了给。

2.9.裁剪视频

ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4

-filter:v – 表示视频过滤器。    crop – 表示裁剪过滤器。\

w – 我们想自源视频中裁剪的矩形的宽度。    \

h – 矩形的高度。    \

x – 我们想自源视频中裁剪的矩形的 x 坐标 。    \

y – 矩形的 y 坐标。

2.10.视频播放速度

1.加速播放ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4

2.减速播放ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4

2.11.无损合并视频的多种方法

方法一:FFmpeg concat 协议

对于 MPEG 格式的视频,可以直接连接:

ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy

output.mpg

对于非 MPEG 格式容器,但是是 MPEG

编码器(H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等),可以包装进

TS 格式的容器再合并。在新浪视频,有很多视频使用 H.264

编码器,可以采用这个方法

ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts

input1.ts\

ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts

input2.ts\

ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts

ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a

aac_adtstoasc -movflags +faststart output.mp4

保存 QuickTime/MP4 格式容器的时候,建议加上  -movflags

+faststart。这样分享文件给别人的时候可以边下边看。

方法二:FFmpeg concat 分离器

这种方法成功率很高,也是最好的,但是需要 FFmpeg 1.1

以上版本。先创建一个文本文件 filelist.txt:    

file 'input1.mkv'

file 'input2.mkv'

file 'input3.mkv'

然后:ffmpeg -f concat -i filelist.txt -c copy output.mkv

注意:使用 FFmpeg concat

分离器时,如果文件名有奇怪的字符,要在  filelist.txt 中转义。

方法三:Mencoder 连接文件并重建索引

这种方法只对很少的视频格式生效。幸运的是,新浪视频使用的 FLV

格式是可以这样连接的。对于没有使用 MPEG 编码器的视频(如 FLV1

编码器),可以尝试这种方法,或许能够成功。

 mencoder -forceidx -of lavf -oac copy -ovc copy -o output.flv

input1.flv input2.flv input3.flv

方法四:使用 FFmpeg concat 过滤器重新编码(有损)

语法有点复杂,但是其实不难。这个方法可以合并不同编码器的视频片段,也可以作为其他方法失效的后备措施。\

ffmpeg -i input1.mp4 -i input2.webm -i input3.avi -filter_complex

'[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1

[v] [a]' -map '[v]' -map '[a]' <编码器选项> output.mkv

如你所见,上面的命令合并了三种不同格式的文件,FFmpeg concat

过滤器会重新编码它们。 注意这是有损压缩。[0:0] [0:1] [1:0]

[1:1] [2:0] [2:1]

分别表示第一个输入文件的视频、音频、第二个输入文件的视频、音频、第三个输入文件的视频、音频。

concat=n=3:v=1:a=1 表示有三个输入文件,输出一条视频流和一条音频流。

[v] [a] 就是得到的视频流和音频流的名字,注意在 bash 等 shell

中需要用引号,防止通配符扩展。

提示:

以上三种方法,在可能的情况下,最好使用第二种。第一种次之,第三种更次。第四种是后备方案,尽量避免。\

规格不同的视频合并后可能会有无法预测的结果。

有些媒体需要先分离视频和音频,合并完成后再封装回去。

对于 Packed B-Frames 的视频,如果封装成 MKV 格式的时候提示 Can't write

packet with unknown timestamp,尝试在 FFmpeg 命令的 ffmpeg 后面加上

-fflags +genpts

2.12.ffmpeg 视频实现各种特效

//渐入

ffmpeg i in.mp4 -vf fade=in:0:90 out.mp4

//黑白

ffmpeg i in.mp4 -vf lutyuv="u=128:v=128" out.mp4

//锐化

ffmpeg i in.mp4 -vf

unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5 out.mp4

//反锐化

ffmpeg i in.mp4 -vf unsharp=7:7:-2:7:7:-2 out.mp4

//渐晕

ffmpeg i in.mp4 -vf vignette=PI/4 out.mp4

//闪烁渐晕

ffmpeg i in.mp4 -vf vignette=‘PI/4+random(1)*PI/50’:eval=frame out.mp4

//视频颤抖

ffmpeg i in.mp4 -vf

crop="in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2+((in_h-out_h)/2)*sin(n/7)"

out.mp4

//色彩变幻

ffmpeg i in.mp4 -vf hue="H=2*PI*t:s=sin(2*PI*t)+1" out.mp4

//模糊处理

ffmpeg i in.mp4 -vf boxblur=5:1:cr=0:ar=0 out.mp4

//镜像翻转

ffmpeg i in.mp4 -vf

crop=iw/2:ih:0:0,split[left][tmp];[tmp]hflip[right];[left]pad=iw*2[a];[a][right]overlay=w

out.mp4

//水平翻转

ffmpeg i in.mp4 -vf geq=p(W-X\\,Y) out.mp4

//垂直翻转

ffmpeg i in.mp4 -vf vflip out.mp4

//浮雕效果

ffmpeg i in.mp4 -vf

format=gray,geq=lum_expr=’(p(X,Y)+(256-p(X-4,Y-4)))/2’ out.mp4

//均匀噪声

ffmpeg i in.mp4 -vf noise=alls=20:allf=t+u out.mp4

2.13.使用FFmpeg命令合并音视频(画幅)

  1. 合并音频和视频

ffmpeg -i video.mp4 -i audio.aac -c:v copy -c:a copy -bsf:a

aac_adtstoasc output.mp4

如果视频中已经包含了音频,替换视频中的音频,使用下面命令行

ffmpeg -i video.mp4 -i audio.aac -c:v copy -c:a copy -bsf:a

aac_adtstoascmap 0:v:0 -map 1:a:0 output.mp4

  1. 横向合并视频

ffmpeg -i input1.mp4 -i input2.mp4 -lavfi hstack output.mp4

上面的命令虽然可以合并视频,两个视频可以正常播放,但是只保留了input1.mp4的音频。input1和input2必须同样的高度,如果不一样的高度可以使用-shortest参数来保证同样的高度。

合并多个视频,可以使用下面命令行:

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3

output.mp4

其中input=3表示希望合并的视频的个数

  1. 纵向合并视频

ffmpeg -i input1.mp4 -i input2.mp4 -lavfi vstack output.mp4

  1. 网格合并视频

当多个视频时,还可以合并成网格状,比如2x2,3x3这种。但是视频个数不一定需要是偶数,如果是奇数,可以用黑色图片来占位。

ffmpeg -f lavfi -i color=c=black:s=1280x720 -vframes 1 black.png

该命令将创建一张1280*720的图片

然后就可以使用下面这个命令来合并成网格视频了,如果只有三个视频,可以选择上面创建的黑色图片替代。

ffmpeg -i top_left.mp4 -i top_right.mp4 -i bottom_left.mp4 -i

bottom_right.mp4 \ -lavfi

"[0:v][1:v]hstack[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack"

-shortest 2by2grid.mp4

上面创建的是正规的2x2网格视频。想象一下,现在只有三个视频,我想把第一个视频摆放在第一行的中间,然后把第二、三个视频摆放在第二行。那么就可以使用下面两个命令了。

ffmpeg -f lavfi -i color=c=black:s=640x720 -vframes 1 black.png ffmpeg

-i black.png -i top_center.mp4 -i bottom_left.mp4 -i bottom_right.mp4

-lavfi

"[0:v][1:v][0:v]hstack=inputs=3[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack"

-shortest 3_videos_2x2_grid.mp4

2.14.如何给视频添加字幕(ffmpeg-wiki翻译)

您可以使用以下两种过滤器之一来刻录文本字幕(硬字幕): subtitles或者

ass.

Subtitles 过滤器

使用 libass 库在输入视频之上绘制字幕。 此过滤器需要 ffmpeg编译

--enable-libass. 看到 [[​subtitles video filter

documentation]{.underline}](http://ffmpeg.org/ffmpeg-filters.html#subtitles-1)的更多细节。

如果字幕是一个单独的文件,称为 subtitle.srt,你可以使用这个命令:

ffmpeg -i video.avi -vf subtitles=subtitle.srt out.avi

如果字幕嵌入在容器中 video.mkv, 你可以这样做:

ffmpeg -i video.mkv -vf subtitles=video.mkv out.avi

ass过滤器

与Subtitles过滤器相同,只是它不需要 libavcodec 和 libavformat 即可工作。

此过滤器需要 ffmpeg编译 --enable-libass. 在另一方面,它仅限于[[​ASS

(Advanced Substation

Alpha)]{.underline}](http://en.wikipedia.org/wiki/SubStation_Alpha#Advanced_SubStation_Alpha)字幕文件。

见[[​ass video filter

documentation]{.underline}](http://ffmpeg.org/ffmpeg-filters.html#ass)的更多细节。

ffmpeg -i video.avi -vf "ass=subtitle.ass" out.avi

如果你的副标题在 SubRip,

MicroDVD或任何其他支持的文本字幕,您必须在使用此过滤器之前将其转换为

ASS:

ffmpeg -i subtitle.srt subtitle.ass

Windows用户必须 [[​​setup font

paths]{.underline}](http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=10&t=318&start=20)

获得libass工作。

基于图片的字幕

你可以把 “基于图像的"字幕烧进一部电影中,通过使用[[​overlay video

filter]{.underline}](http://ffmpeg.org/ffmpeg-filters.html#overlay-1)以覆盖图像。

例如,dvdsub 是一种基于图片的叠加字幕。 在单独的流中带有 dvdsub 字幕的

MKV 示例:

ffmpeg -i input.mkv -filter_complex "[0:v][0:s]overlay[v]" -map

"[v]" -map 0:a <output options> output.mkv

如果您有多个字幕流,您可以通过替换来选择使用哪一个 [0:s]和

[0:s:0]选择第一个字幕流或 [0:s:1]选择第二个字幕流,依此类推。

另请参见[[​the official

documentation]{.underline}](http://ffmpeg.org/ffmpeg.html);

搜索"hardcode"。

有时,当输入文件有多个音频流并且其中一些可能有问题时,添加此过滤器会产生破坏编码的副作用;

在这种情况下,选择一个(或多个)音频流应该可以解决问题:

ffmpeg -i input.ts -filter_complex "[0:v][0:s]overlay[v]" -map

"[v]" -map 0:a:0 <output options> output.mkv

Windows

需要注意的是在Windows上您可能必须采取适当措施,增加设置您的fontconfig等:[​https://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=2554]{.underline}

3.ffplay常用命令和注意事项

3.1.预览或测试视频或音频文件

ffplay input.mp4\

类似地,音频文件也可以使用ffplay进行播放。\

ffplay input.mp3

注意事项: 在window7

64bit下安装了ffmpeg,然后用ffplay命令播放声音时发生这个错误:SDL_OpenAudio

(2 channels, 44100 Hz): WASAPI can't initialize audio client

那么只能播放视频图像而不能播放视频声音。

只要设置环境一个变量SDL_AUDIODRIVER=directsound或者winmm即可。

可在调用ffplay前输入set SDL_AUDIODRIVER=directsound。

或写一个start.bat加入下面代码:

SDL_AUDIODRIVER=directsound\

ffplay myVideo.mp4

3.2.过滤器

1、视频过滤器

1)视频旋转播放

ffplay test.mp4 -vf transpose=1

(0:逆时针旋转90°然后垂直翻转;;1:顺时针旋转90°;2:逆时针旋转90°;3:顺时针旋转90°然后水平翻转)

2)视频水平翻转播放

ffplay test.mp4 -vf hflip

3)视频垂直翻转播放

ffplay test.mp4 -vf vflip

4)视频水平翻转,并且再顺时针旋转90度播放

ffplay test.mp4 -vf transpose=1,hflip

2、音频过滤器

1)音频变速播放

ffplay test.mp4 -af atempo=2 (atempo的范围【0.5, 2】)

2)视频变速播放

ffplay test.mp4 -vf setpts=0.5 * PTS (setpts的范围是【0.25,4】)

3)音视频同时变速播放

ffplay test.mp4 -vf setpts=PTS/2 -af atempo=2

4.ffprobe常用命令

ffprobe常用的参数比较多,可以通过ffprobe --help来查看详细的帮助信息:

4.1.查看多媒体数据包信息

ffprobe -show_packets inuput.flv

通过show_packets查看的多媒体数据包信息使用PACKET标签括起来,其中包含信息主要如下表:

{width=“6.673228346456693in”

height=“2.783464566929134in”}

PACKET字段说明

4.2.分析多媒体的封装格式

ffprobe -show_format output.mp4

上述命令可以查看多媒体的封装格式,其使用FORMAT标签括起来显示:

{width=“6.452755905511811in”

height=“2.181101268591426in”}

format字段说明

4.3.查看视频文件中的帧信息

通过-show_frames参数可以查看每一帧的信息

ffprobe -show_frames inuput.flv\

查看视频文件中的帧信息,输出的帧信息使用FRAME标签括起来:

{width=“5.881889763779528in”

height=“3.625984251968504in”}

frame字段说明

4.4.查看多媒体文件中的流信息

ffprobe -show_streams inuput.flv

流的信息将使用STREAM标签括起来:

{width=“6.551181102362205in”

height=“3.547244094488189in”}

{width=“6.291338582677166in”

height=“1.5433070866141732in”}

stream字段说明

4.5.多种格式输出

  1. 通过以下得到XML输出格式命令如下:

ffprobe -of xml -show_streams inuput.xml

  1. 通过以下命令得到INI格式的输出:

ffprobe -of ini-show_streams inuput.flv

  1. 通过以下命令输出JSON格式:

ffprobe -of json -show_packets inuput.flv

这种格式的数据可以用在以JSON解析为主的业务中。

  1. 通过以下命令输出CSV格式:

fforobe -of csv -show_packets inuput.flv

CSV格式输出后可使用EXCEL打开表格形象

5.技术分享

5.1.实时生成字符画

示例图像帧文本:

h1ri . i3+i,

irrr;.;i+:i,

.5mBBmmBx3risi9:+:;.

.#mBmmmB&xGxGGG3hiiss::1G&

~xGGGG9!!9hsiiiii;ri:+;:s!

:x!si:&11!GBs9B~19!!G!&G1!!3

!3hshrssrsris1sr11r;ir5533

1h11sG1sG1sii1s19&&31rh,

9!~!sGshsiisGG&~x5ssi

- ;ri:. s;1sx!hsrriGGx&G5shhrr;

ri+ .sr+ -r; :.xsh51sr9!!55hshh11sr :i,.;i

:ssr;: :s1s, si. hhh&&!91G3995shhh11si ;r -

x5;,:rrrrrrrriirrrriiir:;;+. .rr+ . ~xGG3&~h3s9!G5sss1 .;r,

x9i, .-::-. .-1993:, .,:s1i .,+:,-&&&~3555GGh;+. :r5r,. ,;

G1- ,:155s+. ,:9!!!!3;,

,:9!i11r:::x#&x~xG&~hh~&&!93i-:G&! ;s31!3:,,:9

s: -rs3335h:,

.-9G!!993;-.-rx!!!hisr;h&!9&~~&G3x~&&&&5s:rG&~5s:rss1G!Gx:-:5

-139!9335s+ ,:G!!99r-,-1!!GG!!Bm#iiri;iiri;+:;;ir;::::;+:iir+.+h!GGGr-,:

.;539935h:. +s!933+...;GGGGGx#hG5hhirri;:++:;:::;::::;isi35s .:GG!G;. .

-s33355;, ,:!93+.

.+5GG!Gi#m&!G&&xG::iii:;iii;;:+i!&&xGs -s!G5-.

.:h333r- -s!i, ,;xG!:-rBmBG!!!r:;;:::;;;;;::;GGG!9!, ,:!!i,

,i551:. ,+r+ .+GG1-,Bm~93553:i;;::;;;;;;:::GGx933G .:9:

-ss;, ,;h+,.&~x!93+:::;;;:;ii;;;:+:+;xx~~9 .,.

.-+. .. ,~hh&x:;;;;;;;:;:;:::::::;h!&~~.

..hhh~&i:;irsrri::;;;:;:::::;hG&~:

B~h~!xGxGGsr;i;::+:::+++:::,xx&&G

~B&xx&&&&x111hs5G!x!ss9s;:. 1&~~9

使用ege demo就实现了类似的功能, 打开本程序, 按下空格键,

选择一个输出文本, 输入使用的分辨率, 再选择一个输入视频,

就可以看到美美的字符画啦~

百度网盘下载地址: http://pan.baidu.com/s/1mhKae3u

5.2.基于Ffmpeg实现屏幕录制

基于Ffmpeg实现屏幕录制

录制屏幕

为了实现对于Window桌面录制,有两种方式进行采集:

DirectShow 设备

Gdigrab设备

其基本命令行如下:

//Dshow设备

ffmpeg -f dshow -I video=“screen-capture-recorder” output.mkv

//gdigrab设备 采集整个桌面

ffmpeg -f gdigrab -framerate 30 -I desktop output.mkv

这两个命令默认都是采用x264

进行编码,在本地CPU不是足够高的情况下,录制的视频画面根本看不清楚,这是因为编码效率太低导致;

为了提高录制效果,我们可以采用无损编码+提高编码速度方式进行录制,具体命令如下:

ffmpeg -framerate 30 -f gdigrab -I desktop -c:v libx264rgb -crf 0

-preset ultrafast output.mkv

或者

ffmpeg -framerate 30 -f gdigrab -I desktop -c:v libx264rgb -preset:v

ultrafast -tune:v zerolatency output.mkv

关于Ffmpeg屏幕采集可以参考

https://trac.ffmpeg.org/wiki/Capture/Desktop文章

关于H264编码方面的知识可以参考https://trac.ffmpeg.org/wiki/Encode/H.264文章

录制声音

在上面提到过录制屏幕除了采用gdigrab外,还可以采用dshow方式;它们的区别就是:gdigrab设置仅支持截取屏幕信息,对声音的录制是不支持的,而show方式可以支持录制屏幕和声音。

这个dshow软件的下载信息如下:

1、编译好的下载地址是:

http://sourceforge.net/projects/screencapturer/

2、源码地址是:

https://github.com/rdp/screen-capture-recorder-to-video-windows-free

为了使系统能识别出dshow设备,我们首先需要进行注册,为了去掉不必要的文件,我们只提取四个dll:

Screen-capture-recorder.dll

Screen-capture-recorder-x64.dll

Audio_sniffer-x64.dll

Audio_sniffer.dll

注册命令行如下:

//注册屏幕录制设备(我们采用32位的ffmpeg,可以不用注册带x64的dll)

Regsvr32 /s screen-capture-recorder.dll

//注册虚拟音频设备

Regsvr32 /s audio_sniffer.dll

注册成功后,可以采用以下命令进行检查是否注册成功

ffmpeg -list_devices true -f dshow -I dummy

系统输出大致如下:{width=“5.708333333333333in”

height=“1.5520833333333333in”}

“screen-capture-recorder” 这个就是桌面捕获设备,用于录制屏幕

“virtual-audio-capturer” 这个是音频捕获设备,用于录制声音

-f dshow -I audio=“virtual-audio-capturer”

这代表声音从"virtual-audio-capturer"音频设备获取

为了能够同时录制声音和画面,我们可以使用以下命令进行采集:

ffmpeg -framerate 30 -f gdigrab -I desktop -f dshow -I

audio=“virtual-audio-capturer” -c:v libx264rgb -preset:v ultrafast

-tune:v zerolatency output.mp4

用vlc打开录制文件,可以看书画面显示正常以及声音正常被播放处理,截图如下:

{width=“7.59166447944007in”

height=“4.324305555555555in”}

以上就是关于ffmpeg录制window桌面的全部过程了,欢迎大家交流~

参阅

FFmpeg 音视频处理入门基础概念

https://blog.csdn.net/sinat_14826983/article/details/83043906

Windows安装ffmpeg,使用ffmpeg从视频中的抽取图像

https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/117842049?utm_source=app&app_version=4.16.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

FFMpeg无损合并视频的多种方法

https://blog.csdn.net/doublefi123/article/details/47276739?utm_source=app&app_version=4.16.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

通过 ffmpeg 无损剪切与拼接视频方法

https://blog.csdn.net/weixin_34365635/article/details/92354967?utm_source=app&app_version=4.16.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

利用FFMPEG进行视频分割

https://blog.csdn.net/qingfengtsing/article/details/55295253?utm_source=app&app_version=4.16.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

ffmpeg视频压缩速度_使用ffmpeg修改视频速度

https://blog.csdn.net/culuo8053/article/details/107910449?utm_source=app&app_version=4.16.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

ffplay播放没有声音SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can't

initialize audio client

https://blog.csdn.net/A694543965/article/details/78786230?utm_source=app&app_version=4.16.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

ffmpeg批量处理(图片文字水印批量处理)

https://blog.csdn.net/qq_45753908/article/details/102568691

ffmpeg 视频实现各种特效

http://m.mamicode.com/info-detail-2635863.html

使用FFmpeg命令合并音视频

https://blog.csdn.net/qq_33349051/article/details/104061448

ffmpeg 硬压字幕的实现

https://blog.csdn.net/ternence_hsu/article/details/108437008

使用 FFMPEG 命令为视频嵌入字幕

https://blog.csdn.net/weixin_33929309/article/details/94308779

可移除的方式嵌入字幕

https://www.cnblogs.com/freedom-try/p/15200670.html

ffmpeg 提取音频,音频转换,添加字幕

https://blog.csdn.net/u011020636/article/details/89785227?utm_medium=distribute.wap_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_aggregation-17-89785227.wap_agg_rank_aggregation&utm_term=ffmpeg%E5%B5%8C%E5%85%A5%E5%AD%97%E5%B9%95

通过ffmpeg和opencv生成视频的缩略图。

https://github.com/ximikang/ffmpegThumbnail

关于实现视频预览缩略图功能

https://blog.csdn.net/printf_scnaf/article/details/108256985

ffprobe常用命令总结

https://blog.51cto.com/u_12204415/3804327

使用ege+ffmpeg解码+播放视频, 实时生成字符画

https://xege.org/ege_ffmpeg_char_movie.html

基于Ffmpeg实现屏幕录制

https://blog.csdn.net/c_base_jin/article/details/106773589

Ffmpeg 支持的所有格式列表

https://blog.csdn.net/ustcxiangchun/article/details/6981914

《Ffmpeg从入门到精通》读书笔记(一)

0%