转发自白狼栈:查看原文

很多小伙伴私下里留言说,之前没接触过音视频,对于ffmpeg可以做什么还是有些懵。

今天我们一起看下我们究竟可以用 ffmpeg 做什么?

很多小伙伴应该都玩过抖音,你在“拍同款”的时候,有没有留意过“正在合成中”的提示,视频越长合成的时间越长,少则几秒多则几十秒,这个其实就是app本地在做视频合成。

让用户等这么久,感觉体验很差。服务端可以合成吗,答案是“可以”。

但其实ffmpeg在编码的时候,非常吃cpu和内存,尤其是cpu,服务器cpu100%都是家常便饭。那增加cpu不就完事了吗?我们后面会实际测试8核8G、16核16G的机器,发现依然会爆,所以这是一个无底洞,消耗不起。

所以抖音能让服务端做吗?肯定不能,用户量大,app本地能做,最关键都是免费用户。

所以从技术的成本考虑,这也是为什么抖音上很多特效都是短视频,有的甚至只有10秒钟,起码这样不会让用户等太久。

在学习音视频相关的知识之前,我们先简单看两个应用场景。如果你刚巧有一些音视频的基础,顺便可以练练手。

场景1、公司有很多原视频,想以某种效果(比如电视机播放)更好的展示给用户

期望效果如图所示


素材比较难找,图片是百度的,电视机中间显示视频的部分已经被ps处理了,略微粗糙;视频是抖音下载的,原视频也做了局部模糊。

相信每个公司都有好的UI,当前案例仅作为学习。

需要注意的点:

  1. 视频可以裁剪,可以缩放,不能变形
  2. 注意电视机内屏的四个角是圆形的
  3. 原视频只取了中间部分,没有高斯模糊的背景
  4. 原视频尾部含有抖音的部分同样也被裁剪了

素材已经上传到github,请点击链接获取。

下载图片素材

下载视频素材

下载合成效果

场景2、公司有很多素材视频以及对应的标题和字幕,想开放给用户配音,合成自己的作品

期望效果如图所示


素材同样来源于抖音,左侧视频是用户视频,右侧视频的中间部分是视频素材,底部是该素材的高斯模糊视频,此外还有标题,字幕,字体都是事先准备好的。

素材已经上传至github,请点击链接获取。

下载左侧用户视频

下载右侧素材视频

下载右侧的字幕文件1,字幕文件2

下载字体

最终合成的视频效果

同一效果可能有多种不同的做法,如果你花费了一些时间都做出来了,先恭喜你。

为了降低服务器资源和合成的时间,请思考这两个视频效果如何各用一条命令完成。

第一次接触音视频的小伙伴可能会对这样的合成效果感到惊讶,学完ffmpeg基础部分,你至少应该会用一条命令解决以上甚至更复杂的音视频需求。

ffmpeg实战-音视频合成案例的更多相关文章

  1. ffmpeg实战-音视频基础概念

    转发自白狼栈:查看原文 关于音视频,相信大家都看过电影(视频),听过音乐(音频),至少应该都知道mp4是视频文件,mp3是音频文件. 对于一个音视频文件,都有哪些属性呢?以视频为例,我们可以通过 ff ...

  2. PyQt+moviepy音视频剪辑实战1:多个音视频合成顺序播放或同屏播放的视频文件实现详解

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...

  3. FFmpeg开发实战(五):FFmpeg 抽取音视频的视频数据

    如何使用FFmpeg抽取音视频的视频数据,代码如下: // FFmpegTest.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include ...

  4. FFmpeg开发实战(四):FFmpeg 抽取音视频的音频数据

    如何使用FFmpeg抽取音视频的音频数据,代码如下: void adts_header(char *szAdtsHeader, int dataLen); // 使用FFmpeg从视频中抽取音频 vo ...

  5. C#进程调用FFmpeg操作音视频

    项目背景 因为公司需要对音视频做一些操作,比如说对系统用户的发音和背景视频进行合成,以及对多个音视频之间进行合成,还有就是在指定的源背景音频中按照对应的规则在视频的多少秒钟内插入一段客户发音等一些复杂 ...

  6. FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频

    一.概述 在Android开发中,我们对一些音视频的处理比较无力,特别是编辑音视频这部分.而且在Android上对视频编辑方面,几乎没有任何API做支持,MediaCodec(硬编码)也没有做支持.那 ...

  7. javaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装了FFmpeg的音视频操作?

    通过"javaCV入门指南:序章 "大家知道了处理音视频流媒体的前置基本知识,基本知识包含了像素格式.编解码格式.封装格式.网络协议以及一些音视频专业名词,专业名词不会赘述,自行搜 ...

  8. FFmpeg处理音视频流程学习笔记

    原文作者:一叶知秋0830 链接:https://www.jianshu.com/p/1b715966af50 FFmpeg处理音视频完整流程包括5个阶段(输入文件—>编码数据包—>解码后 ...

  9. FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息

    在之前使用FFmpeg命令行的时候,我们经常看到FFmpeg命令行在输出音视频文件的会打印一下文件的Meta信息,类似如图: 那么我们如何通过代码的方式输出这些Meta信息呢? FFmpeg提供了一个 ...

随机推荐

  1. 什么?这么精髓的View的Measure流程源码全解析,你确定不看看?

    前言 Android开发中我们平时接触最多的是各种View, View是一个比较大的体系,包含了绘制流程.事件分发.各种动画.自定义View 等等.前几天我写了一篇事件分发源码解析的文章, 今天我们来 ...

  2. Nacos使用 MySQL 8.0 提示Public Key Retrieval is not allowed

    原因如下(参考官网给出的连接选项): 如果用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥:可以在连 ...

  3. Object划分

    Object划分 1.PO(persistantobject)持久对象 PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包 含任何对数据库的操作. 2.DO(Domain ...

  4. 老板让我重构项目,我想首先应该服务治理---eureka服务治理深入浅出

    目录 什么是服务治理 Eureka调用过程 Eureka单机注册 Eureka 单机启动 单机注册 集群注册 客户调用 Eureka集群注册 idea 如何同一个项目启动多次 Eureka自我保护 为 ...

  5. STL实现的底层数据结构简介

    STL实现的底层数据结构简介 C++ STL 的实现: 1.vector  底层数据结构为数组 ,支持快速随机访问 2.list    底层数据结构为双向链表,支持快速增删 3.deque   底层数 ...

  6. 神奇的不可见空格<200b>导致代码异常

    故事是这样发生的,在做一个JSON对象转化的时候,出现了转化异常:刚开始还是以为是格式错误,后来一步步排除,才发现是不可见空格<200b>导致的解析异常 出现 使用Typora编写文字时, ...

  7. [bug] Python:“TabError: inconsistent use of tabs and spaces in indentation”

    原因 代码中混用了Tab和4个空格 参考 https://blog.csdn.net/dongdong9223/article/details/82745068

  8. Rsync忽略文件夹或目录

    使用Rsync同步的时候往往会要求对某个文件夹或者文件进行忽略,客户端可以使用--exclude参数来实现对,目录或者文件的忽略 rsync -rltvz --port=873 --exclude & ...

  9. Python检查 文件备份是否正常 云备份进程是否正常运行

    场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功. 实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒. #! ...

  10. 小白菜Windows10系统安装Linux(ubuntu)虚拟机超详细教程(全)

    注:本文"(         )"中的内容可忽略 1.下载VMware(威睿 计算机虚拟化软件) 官方下载地址 默认为最新版15.1.0,我们选择立即下载 (找一个比较大的盘不要是 ...