ffmpeg实战-音视频合成案例
转发自白狼栈:查看原文
很多小伙伴私下里留言说,之前没接触过音视频,对于ffmpeg可以做什么还是有些懵。
今天我们一起看下我们究竟可以用 ffmpeg 做什么?
很多小伙伴应该都玩过抖音,你在“拍同款”的时候,有没有留意过“正在合成中”的提示,视频越长合成的时间越长,少则几秒多则几十秒,这个其实就是app本地在做视频合成。
让用户等这么久,感觉体验很差。服务端可以合成吗,答案是“可以”。
但其实ffmpeg在编码的时候,非常吃cpu和内存,尤其是cpu,服务器cpu100%都是家常便饭。那增加cpu不就完事了吗?我们后面会实际测试8核8G、16核16G的机器,发现依然会爆,所以这是一个无底洞,消耗不起。
所以抖音能让服务端做吗?肯定不能,用户量大,app本地能做,最关键都是免费用户。
所以从技术的成本考虑,这也是为什么抖音上很多特效都是短视频,有的甚至只有10秒钟,起码这样不会让用户等太久。
在学习音视频相关的知识之前,我们先简单看两个应用场景。如果你刚巧有一些音视频的基础,顺便可以练练手。
场景1、公司有很多原视频,想以某种效果(比如电视机播放)更好的展示给用户
期望效果如图所示

素材比较难找,图片是百度的,电视机中间显示视频的部分已经被ps处理了,略微粗糙;视频是抖音下载的,原视频也做了局部模糊。
相信每个公司都有好的UI,当前案例仅作为学习。
需要注意的点:
- 视频可以裁剪,可以缩放,不能变形
- 注意电视机内屏的四个角是圆形的
- 原视频只取了中间部分,没有高斯模糊的背景
- 原视频尾部含有抖音的部分同样也被裁剪了
素材已经上传到github,请点击链接获取。
场景2、公司有很多素材视频以及对应的标题和字幕,想开放给用户配音,合成自己的作品
期望效果如图所示

素材同样来源于抖音,左侧视频是用户视频,右侧视频的中间部分是视频素材,底部是该素材的高斯模糊视频,此外还有标题,字幕,字体都是事先准备好的。
素材已经上传至github,请点击链接获取。
同一效果可能有多种不同的做法,如果你花费了一些时间都做出来了,先恭喜你。
为了降低服务器资源和合成的时间,请思考这两个视频效果如何各用一条命令完成。
第一次接触音视频的小伙伴可能会对这样的合成效果感到惊讶,学完ffmpeg基础部分,你至少应该会用一条命令解决以上甚至更复杂的音视频需求。
ffmpeg实战-音视频合成案例的更多相关文章
- ffmpeg实战-音视频基础概念
转发自白狼栈:查看原文 关于音视频,相信大家都看过电影(视频),听过音乐(音频),至少应该都知道mp4是视频文件,mp3是音频文件. 对于一个音视频文件,都有哪些属性呢?以视频为例,我们可以通过 ff ...
- PyQt+moviepy音视频剪辑实战1:多个音视频合成顺序播放或同屏播放的视频文件实现详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...
- FFmpeg开发实战(五):FFmpeg 抽取音视频的视频数据
如何使用FFmpeg抽取音视频的视频数据,代码如下: // FFmpegTest.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include ...
- FFmpeg开发实战(四):FFmpeg 抽取音视频的音频数据
如何使用FFmpeg抽取音视频的音频数据,代码如下: void adts_header(char *szAdtsHeader, int dataLen); // 使用FFmpeg从视频中抽取音频 vo ...
- C#进程调用FFmpeg操作音视频
项目背景 因为公司需要对音视频做一些操作,比如说对系统用户的发音和背景视频进行合成,以及对多个音视频之间进行合成,还有就是在指定的源背景音频中按照对应的规则在视频的多少秒钟内插入一段客户发音等一些复杂 ...
- FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频
一.概述 在Android开发中,我们对一些音视频的处理比较无力,特别是编辑音视频这部分.而且在Android上对视频编辑方面,几乎没有任何API做支持,MediaCodec(硬编码)也没有做支持.那 ...
- javaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装了FFmpeg的音视频操作?
通过"javaCV入门指南:序章 "大家知道了处理音视频流媒体的前置基本知识,基本知识包含了像素格式.编解码格式.封装格式.网络协议以及一些音视频专业名词,专业名词不会赘述,自行搜 ...
- FFmpeg处理音视频流程学习笔记
原文作者:一叶知秋0830 链接:https://www.jianshu.com/p/1b715966af50 FFmpeg处理音视频完整流程包括5个阶段(输入文件—>编码数据包—>解码后 ...
- FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息
在之前使用FFmpeg命令行的时候,我们经常看到FFmpeg命令行在输出音视频文件的会打印一下文件的Meta信息,类似如图: 那么我们如何通过代码的方式输出这些Meta信息呢? FFmpeg提供了一个 ...
随机推荐
- Eureka讲解与应用
Eureka[juˈriːkə] 简介 Eureka是Netflix服务发现的服务端与客户端,Eureka提供服务注册以及服务发现的能力,当是Eureka Server时(注册中心),所有的客户端会向 ...
- sql常识-RIGHT JOIN
SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行. RIGHT JOIN ...
- shell 脚本中常用的内置变量
在 Bash 解释器中,内置了许多变量,这些变量的功能是解释器自带的,我们在编写shell脚本时如果能灵活的使用它们,对脚本的编写效率以及差错大有帮助, 下面一一介绍这些变量 $FUNCNAME.$L ...
- WPF使用自定义Main函数
一.自定义Main函数 在WPF中,我们添加一个Program静态类,添加一个Main静态方法,需要注意的是该方法需要添加"STAThread",表示WPF程序需运行在单一线程单元 ...
- 逆向工程初步160个crackme-------3
这个Crackme3 涉及到浮点指令以及浮点数的存储与运算,我没学习过浮点指令,不得不从网上恶补了1个小时,一边看汇编指令一边百度其指令含义. 回头得好好补补这方面的知识了,太菜了! 我大致了解了一下 ...
- Charles的证书下载(web)
1.charles的证书下载(web) 1.为什么下载charles的ssl证书? 默认情况下,charles不能解析https协议的接口,里面的请求和响应数据都是乱码格式,所以我们需要下载ssl证书 ...
- 原生JS和jQuery创建元素的方法
jQ创建元素的方法 1.原生代码 .creatElement('tr')` .innerHTML = '<h1>加油</h1>' document.write('<h1& ...
- ThreadLocal内存溢出代码演示和原因分析!
ThreadLocal 翻译成中文是线程本地变量的意思,也就是说它是线程中的私有变量,每个线程只能操作自己的私有变量,所以不会造成线程不安全的问题. 线程不安全是指,多个线程在同一时刻对同一个全局 ...
- [BD] Hive
简介 基于HDFS的数据仓库工具 基于HDFS上的数据分析引擎 2.x 前:SQL -----> Hive ----> MapReduce 2.x 后:推荐执行引擎为 Spark 支持S ...
- 自用Chrome插件推荐【附教程及下载】
自用Chrome插件推荐[附教程及下载] 豆子 1,675 人赞同了该文章 2019.11.03更新 原文同步发布在我的个人博客 Chrome插件自用blog.douzi.work 都是我自己一 ...