技术标签: 音视频相关 研究成果 拼接 滤镜 ffmpeg concat 原理
本文出处:http://blog.csdn.net/chaijunkun/article/details/116237809,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。
对于新手来说,concat滤镜的三个参数:n、v、a会让人抓不住头脑,其实在官方文档中有这么一句话,描述得已经非常准确了:
There are nx(v+a) inputs: first the inputs for the first segment,
in the same order as the outputs,
then the inputs for the second segment, etc.
下面详细介绍滤镜拆分流的工作原理。
首先要说明的是,concat滤镜先处理视频流,后处理音频流。
一个官方的例子来解释:
ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
'[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
concat=n=3:v=1:a=2 [v] [a1] [a2]' \
-map '[v]' -map '[a1]' -map '[a2]' output.mkv
在上述命令中,输入源有3个,每个输入源都有1个视频流和2个音频流(可以想象为影视剧的两种语言对白);
concat滤镜指定了视频流有1个,因此先选出视频流[0:0];
而后指定了音频流有2个,因此后面的[0:1]、[0:2]被选出;
接下来再看n,上述命令配置为3,意味着有3个片段。则输入流应当有3*(1+2)个流,也就是9个流,并且按照出现的先后顺序进行拼接。
即:
(([0:0])([0:1],[0:2])) + (([1:0])([1:1],[1:2])) + (([2:0])([2:1],[2:2]))
==>
[0:0] + [1:0] + [2:0] => [v]
[0:1] + [1:1] + [2:1] => [a1]
[0:2] + [1:2] + [2:2] => [a2]
需要注意的是,使用一次concat滤镜同时处理音频流和视频流时,两个(或者多个)输入源一定要保证拼接的音视频流数量相等。
并且输入的流顺序要严格按照上述规则,不能音视频流顺序颠倒,例如:
[0:v][0:a][1:a][1:v]concat=n=2:v=1:a=1[v][a]
上述命令中第二个输入源的音视频流颠倒了,这样滤镜就会认为是
[0:v] + [1:a]
而这两个流的类型不一样,就会报错:
Stream specifier ':a' in filtergraph description [0:v][0:a][1:a][1:v]concat=n=2:v=1:a=1[v][a] matches no streams
当然回到最开始的官方例子,每个输入源有2个音频流,音频流的顺序可以调换吗?例如:
[0:1][0:2][1:2][1:1]concat=n=2:v=0:a=2[a1][a2]
如果音频参数完全一致,是可以正常运行的,但,这真的是你想要的效果吗?类似于开头是英文对白,后面突然变成了中文对白。
虽然视频、音频流都可以进行拼接,但真正进入滤镜前要保证满足一些先决条件,否则会发生错误。
晚上好,我是老杨。3月第二周就这样开始了,老杨明显感觉到和年前截然不同的氛围:年前来要资料包,然后收藏起来放在文件夹吃灰的多;年后来咨询规划、提升、考证相关的,积极性更高。大过年的,我都懂,都懂。但是,对于很多新手来说,光理解考证需要了解的内容,就得花不少功夫。比如: 考IE线上机构还是线下机构好? IE可以自学吗?资料包看不懂怎么办? 考完我能拿到多少薪资?投入产出比是多少? 编辑添加图片注释,不超过 140 字(可选)今天这篇文章,就给
未重写之前: 会显示当前网站的url作为title主题 可利用 js 对alert进行重写。只可去掉url主题,不可自定义。代码如下 :js代码:window.alert = function(msg, callback) {var div = document.createElement("div");div.innerHTML= ""+ ".nbaMask { position: fixed;...
题目:给定一个数组,如何根据数组名求数组的长度?本题来自于一个同学笔试题,笔试中是实现一个冒泡排序,但是排序的参数只有一个数组名,没有数组中元素的个数;void bubbleSort(int a[]);思路:要先实现这个冒泡排序,首先要获取这个数组中数组元素的个数。然后对数组排序,下面说一下如何根据数组名获取一个数组长度。首先我们如果在局部作用域中定义一个数组的话,获取数组中元
一.面向对象1.概念面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。2.类和对象的关系类是模板,对象是根据这个模板创建出来的类只需要有一个,对象可以有多个(一张图纸可以造多个飞机)3.类:属性(信息)和方法(你能完成的事)1)...
前言 下载并使用http-proxy-middleware包时,显示报错,代码如下: const express = require('express'); const proxy = require('http-proxy-middleware') const app = express() app.use(express.static(__dirname + '/')) app.use('/api', proxy({ target: 'http://localhost:40
考试信息:IPADDR: 172.25.254.x(X 在这里指您的工作站编号加100)NETMASK: 255.255.255.0GATEWAY: 172.25.254.250DNS: 172.25.254.250yum源地址为:http://172.25.254.250/rhel7(1)设置IP信息vim /etc/sysconfig/network-scripts/ifcfg-...
Arduino UNO + DS1302 + TM1638时间显示+Proteus仿真带按键切换显示
前两天把android端的播放缓存搞定了,这两天开始着手搞iOS端的播放缓存。由于要支持,github上可供选择的不多,KTVHttpCache stars较多,但仅支持对mp4的本地缓存,这里选择基于KTVHttpCache二开的SJMediaCacheServer作为hls的缓存库。项目计划是将SJMediaCacheServer作为.a文件或framework引入到ijkplayer中,本文介绍编译链接使用SJMediaCacheServer的方法。
当一个用户进行注册的时候同时发送一个邮件到注册人的邮箱,通过发送的邮箱链接来激活该帐号,具体用asp.net方法的实现代码,贴在这了,有需要的可以参考! public void SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, stri
require_once("/classes/class.php");这一句,在5.2下提示文件不存在,在5.3下提示正常。这样写清新多了。也可能和PHP版本没关系,和web服务器有关系,不细究了。总之,以前是出错的。现在是正确的。
Linux 文件系统概况Linux文件系统为一个倒置的树状结构,所有文件或文件夹均包含在一个根目录“/”中。如图所示(每个目录的作用可以参考:Linux目录结构说明):Linux系统严格区分大小写所以在Linux中:一个名为“A”的文件夹和一个名为“a”的文件夹是不同的两个文件夹,这点和Windows系统所有不同。查看目录信息每一个She...
$location absUrl() 绝对地址 path() 跟路由操作是挂钩的,可以设置可以获取 angula下独有的方式,其他很js一样 replace() 就不会出现历史管理,一般不用 hash() 可设置 可获取 search() 可设置 可获取 返回URL中的查询字符串部分 http://www.dreamdu.com/dreamdu.php?id=5&nam