4 Star 17 Fork 1

matrixy / ffmpeg-handbook

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
CC-BY-4.0

[toc]

ffmpeg入门指南

ffmpeg是音视频处理方面的瑞士军刀,目前市面上几乎所有的音视频工具,都与ffmpeg脱不了关系。我们在音视频处理或开发工作时,有ffmpeg这个工具,能够帮我们解决大部分的问题,或是在我们的应用里集成ffmpeg,将能够拥有非常强大的音视频处理能力,而ffmpeg或是说音视频方面的水非常的深,需要学习的知识点太多太多,光ffmpeg命令行的文档,就有3万行左右,还不是完全版的,还有音视频方面,也有大量的知识点需要去了解,完全不下于ffmpeg本身。总的来说,学习曲线相当陡峭。

本文档旨在于说明ffmpeg的一般过程、基础的架构,让大家能够掌握ffmpeg的学习与使用的方法。

基础概念

  1. 编码codec:是对于原始的音视频的数字表示方式,通常是无压缩形式的,或是无结构的。
  2. 封装格式format:可能会对原始的音视频进行压缩(有损或无损),并且有很明确的包结构,用于描述音视频的元信息。

框架图

ffmpeg一般完成音频或视频的转码或是处理的事情,它可以同时支持多个输入,也可以支持多个输出,在输入与输出之中,完成一些你想要做的事情,比如转码、加视频滤镜、音视频分离、整合等等的事情。下面说明一下ffmpeg在上面框图上每一步可能会做的事情。

  1. 读取输入:ffmpeg一般会通过输入的形式,去猜解输入数据源的封装形式,数据编码等。普通文件,可能会通过文件后缀名进行猜测封装形式,也肯定会对数据内容直接进行猜测,但这是对于普通的比较知名的封装形式而言,但是对于PCM音频类的就不奏效了,音频通常是无封装形式的,是裸数据,这个时候,我们通常需要声明format,比如-f s16le。在声明输入参数时,一定要想办法让ffmpeg知道,将要读取的数据源,它是什么封装形式的。应该会在这一步上完成解封装的过程。
  2. 音视频分离:对于比如mp4这一类的封装媒体文件,它是一个输入,同时具备音频和视频的,它将在接下来的处理流程上,分为多个stream,在ffmpeg的输出上可以看到Input #n下的Stream #n:m,这就是分离出来的各个流,然后接下来是我们要对这每一个stream进行处理,比如转码等。
  3. 解码:如果我们有需要进行音视频处理,比如为音频增加回声,那么将可能会在这一个环节上,完成从封装格式到原始音视频数据解码的过程,为接下来的音频滤镜处理提供数据支持。
  4. 滤镜处理:在这一环节上,可以对每一个流进行处理,比如音频可以增加回声,视频可以增加图像处理滤镜等。
  5. 编码:可能会在这一步进行A编码到B编码的转换过程。
  6. 音视频整合:在这一步完成流的合并的过程。
  7. 输出:ffmpeg的输出十分的强大,它跟输入差不多,输出需要声明封装形式,输出的目标,可以是一个或是多个,然后可以是文件、stdout、网络协议等等等等。

在上面各环节里,ffmpeg所支持的比如demuxer、encoder、format、协议等都有哪些,可以通过ffmpeg -xxxxs来查看,比如我们看有哪些支持的codec,可以在命令行里输入ffmpeg -codecs,一般输出如下:我们来学习一下如何理解这个输出形式:

Codecs:
 D..... = Decoding supported
 .E.... = Encoding supported
 ..V... = Video codec
 ..A... = Audio codec
 ..S... = Subtitle codec
 ...I.. = Intra frame-only codec
 ....L. = Lossy compression
 .....S = Lossless compression
 -------
 D.VI.S 012v                 Uncompressed 4:2:2 10-bit
 D.V.L. 4xm                  4X Movie
 D.VI.S 8bps                 QuickTime 8BPS video
 .EVIL. a64_multi            Multicolor charset for Commodore 64 (encoders: a64multi )
 .EVIL. a64_multi5           Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 )

在下边输出的第一行里,我们分为三列,第一列为codec的特性编码,第二列为codec名称,第三列为codec的详细说明。然后上边的第一大段落,说明了codec特性编码的含义,D表示解码支持、E表示解码支持,V/A/S表示是音频还是视频或字幕,I表示仅I祯支持,L表示有损压缩,S表示无损压缩。第一列是为了让我们能够快速找到所需要的codec而准备的,知道了这一点,那么我们就可以通过ffmpeg -codecs | grep DEV..S,来找到支持视频编解码的无损压缩codec了。对于其它的比如ffmpeg -formatsffmpeg -protocols等形式的支持特性的搜索,也是一样的道理。

codec编码器

这一块不细说了,自己通过ffmpeg -codecs查看即可,可以说,ffmpeg支持几乎所有音视频的编解码,非常的全面。

format封装格式

这一块也不细说了,自己通过ffmpeg -formats查看即可。

protocol协议支持

ffmpeg支持从网络协议上读取或输出它的处理结果,比如ffmpeg -f mp4 -i tcp://192.168.0.123:111 ...,它将创建TCP连接到目标服务器的指定端口,并读取需要处理的数据。

输入支持:async、cache、concat、crypto、data、ffrtmpcrypt、ffrtmphttp、file、ftp、gopher、hls、http、httpproxy、https、mmsh、mmst、pipe、rtmp、rtmpe、rtmps、rtmpt、rtmpte、rtmpts、rtp、sctp、srtp、subfile、tcp、tls、udp、udplite、unix、srt。

输出支持:crypto、ffrtmpcrypt、ffrtmphttp、file、ftp、gopher、http、httpproxy、https、icecast、md5、pipe、prompeg、rtmp、rtmpe、rtmps、rtmpt、rtmpte、rtmpts、rtp、sctp、srtp、tee、tcp、tls、udp、udplite、unix、srt

filter滤镜支持

ffmpeg支持对输入的音频或视频进行各种各样的处理或变换,比如对音频增加回声等,大家可以通过ffmpeg -filters来查看其所支持的滤镜,以及各滤镜的说明与用途。

命令行实例剖析

ffmpeg
    -f h264 -i video.h264                   # 从video.h264文件中读取,封装形式为h264
    -f s16le -ar 8000 -ac 1 -i audio.pcm    # 从audio.pcm文件中读取,PCM_S16LE编码,8000采样,单声道
    
    -vcodec copy                            # 视频编码直接复制
    -acodec aac                             # 音频编码为AAC
    -f flv                                  # 封装形式flv
    output.flv                              # 输出至目标文件output.flv中去

ffmpeg使用参数-i来标识输入源,输出没有前置参数,在输入前的参数是用于描述输入的,在输出前的参数是为了修饰输出要求的,所以比如我们要从TCP连接中或是从stdin中读取数据时,一般需要明确声明输入的数据封装形式,比如:ffmpeg -f h264 -i tcp://localhost:1234...

其它

设备

ffmpeg支持直接从摄像头或麦克风读取音视频数据作为输入。

在windows下,我们可以直接通过ffmpeg -list_devices true -f dshow -i dummy来列出所有支持读的设备信息。

> ffmepg -list_devices true -f dshow -i dummy

[dshow @ 0000022d45d7a940] DirectShow video devices (some may be both video and audio devices)
[dshow @ 0000022d45d7a940]  "Logitech HD Webcam C270"
[dshow @ 0000022d45d7a940]     Alternative name "@device_pnp_\\?\usb#vid_046d&pid_0825&mi_00#7&30316c04&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{bbefb6c7-2fc4-4139-bb8b-a58bba724083}"
[dshow @ 0000022d45d7a940] DirectShow audio devices
[dshow @ 0000022d45d7a940]  "楹﹀厠椋?(HD Webcam C270)"
[dshow @ 0000022d45d7a940]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{D0016B18-E6B0-4C93-A80D-1065F278F2DF}"
dummy: Immediate exit requested

# 上面会列出所有可用的视频设备和音频视频,我们可以通过设备名称或是别名来让ffmpeg访问到相对应的设备。

# 通过设备名称,读取视频设备的视频数据
> ffmpeg -f dshow -i video="Logitech HD Webcam C270" ...

# 通过设备别名,读取视频设备的视频数据
> ffmpeg -f dshow -i video="@device_pnp_\\?\usb#vid_046d&pid_0825&mi_00#7&30316c04&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{bbefb6c7-2fc4-4139-bb8b-a58bba724083}"

linux下,摄像头或麦克风作为设备文件存在于/dev/目录下,视频设备一般命名为/dev/video0/dev/videoN这种形式。我们可是以直接以ffmpeg -re -i /dev/video0 ...的方式从摄像头中获取视频流。linux下没有接触过音频的录制,在这里就不叙述了。

ffplay

ffmpeg可以从任何源中读取音视频,并输出到任意目标去,但是有时候我们只是想尝试播放一下音频或视频,这时候我们就需要使用ffplay命令了,它可以从任意源中读,然后显示、播放读取到的视频或音频。在尝试播放视频时,将显示一个小的视频窗口(可通过左右方向键快进/快退),而播放音频时,也会有一个小窗口,显示的是音频的频谱图。 注意:此命令行需要依赖于图形界面,并且ffplay不能完成转码的过程,在必要的时候,必须声明输入源的封装和编码等信息。比如,如果要播放一段PCM数据(8000采样,16有符号,单声道),则必须声明所有必需的参数:ffplay -f s16le -ar 8000 -ac 1 -i xxxx.pcm

ffprobe

如果我们对于一个音视频文件,我们不知道它的封装与编码信息的话,可以通过这个命令去探测,但是它也不是万能的,对于无封装形式的PCM就无法识别。所以想要正确识别到,必须是结构化的媒体数据才行。而且ffprobe还提供了大量的参数,用于列出媒体文件的详细信息。

  • ffprobe -show_streams input.xxx:显示每一个packet的信息,有时候packet和frame的概念很模糊。。。
  • ffprobe -show_frames input.xxx:显示每一个frame的信息,比如h264视频数据,每一个祯就是一个frame。
  • ffprobe -show_packets input.xxx:显示每一个流的信息,比如单个mp4文件通常同时具有音频和视频,通过此命令,可以看出有几个stream,每个stream是音频还是视频等信息。

stdio

ffmpeg支持从进程的stdin里读取输入,输出到stdout里去,这给予我们一个非常简便的能够集成ffmpeg的音视频处理能力的接口,用来整合到我们自己的应用中来。因为stdinstdout是纯粹的字节流,在使用时,需要明确声明编码或封装形式。

ffmpeg -f h264 -i - -f mp4 -

在上面的命令行中,我们使用 - 来占位, -i 后接 - 表示从stdin中读取,输出使用 - 占位,表示将输出到stdout中去

注意:因为一个进程只有一个stdin和一个stdout

集成开发指南

在上一个章节里提到ffmpeg可以在运行时,通过stdin读和输出到stdout中去,这为我们自己的应用,集成音视频处理能力提供了可能性,通常我们如果想要做音视频的编解码、转码、或是流媒体的推拉流等工作,要么是找相关的API接口,要不是去学习海量的音视频、流媒体知识,但是掌握了上面的知识点的话,那么我们可以很方便的完成对ffmpeg功能的封装。

简单而言,就是在我们自己的应用里,开启一个子进程,ffmpeg进程(通过运行时参数)设置stdin输入,输出到stdout,我们准备两个线程分别去向进程的stdin写,从stdout读,准备两个线程的原因是子进程的stdio的读写是阻塞的。这样就能够通过设定不同的运行时参数,来完成不同的音视频处理工作,就可以在不依赖于第三方API接口的情况下,简单可靠的集成音视频处理能力到我们自己的应用里了。

下面以Java语言为例,说明一下,如何通过子进程的方式,集成任意封装的音频转为WAV格式的过程。

public class Transcoder
{
	public static void main(String[] args) throws Exception
    {
    	Process process = Runtime.getRuntime().exec("ffmpeg -i - -f wav -");
        // 创建一个线程DataWriter来写数据至进程的stdin
        new DataWriter(process.getOutputStream()).start();
        
        // 创建一个线程DataWriter来读进程的stdout上输出的数据
        new DataReader(process.getInputStream()).start();
        
        // 等待进程终止
        process.waitFor();
    }
    
    static class DataWriter extends Thread
    {
    	OutputStream stdin;
        public DataWriter(OutputStream stdin)
        {
        	this.stdin = stdin;
        }
        
        public void run()
        {
        	while (...)
            {
            	stdin.write(...);
            }
            // 一旦关闭stdin,子进程将在处理完上面写入的数据后自动退出
            stdin.close();
        }
    }
    
    static class DataReader extends Thread
    {
    	InputStream stdout;
        public DataReader(InputStream stdout)
        {
        	this.stdout = stdout;
        }
        
        public void run()
        {
        	while (true)
            {
            	// 返回-1即表示处理进程已经退出了
            	stdout.read(...);
            }
        }
    }
}

提示:如果有多路输入,多路输出,可以通过Linux下的FIFO命名管道文件来实现,可以通过linux下的unix域文件来实现(仅限linux系统)。还可以通过tcp://127.0.0.1:1122这样的监听socket来实现(平台不限)。

写在最后的话

差不多就这样,先写到这为止了。本文档只是为了讲个大概,说清楚最常用的功能和套路,后面我会偶尔补充一下文档。谢谢阅读。

Creative Commons Attribution 4.0 International ======================================================================= Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the "Licensor." Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org.

简介

ffmpeg入门指引手册。 展开 收起
CC-BY-4.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/matrixy/ffmpeg-handbook.git
git@gitee.com:matrixy/ffmpeg-handbook.git
matrixy
ffmpeg-handbook
ffmpeg-handbook
master

搜索帮助