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提供了一个 ...
随机推荐
- JMM 最最最核心的概念:Happens-before 原则
关于 Happens-before,<Java 并发编程的艺术>书中是这样介绍的: Happens-before 是 JMM 最核心的概念.对应 Java 程序员来说,理解 Happens ...
- 解决docker镜像无法删除的问题
发现问题 来自守护进程的错误响应:冲突:无法删除050f26b6caca(必须强制) - 映像在多个存储库中被引用 Error response from daemon: conflict: unab ...
- Nginx超详细常用功能演示,够用啦~~~
前言 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服 ...
- QFNU-11.08training
7-1 阅览室 题目: 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过10 ...
- 【转载】CentOS 7自动以root身份登录gnome桌面 操作系统开机后自动登录到桌面 跳过GDM
CentOS 7自动以root身份登录gnome桌面 ################### #cd /etc/gdm ]# cat custom.conf# GDM configuration st ...
- canal 环境搭建 canal 与kafka通信(三)
canal 占用了生产者 .net core端 使用消费者获取canal 消息 安装 Confluent.Kafka demo使用 1.3.0 public static void Consumer ...
- RHEL/CentOS 7 中配置 PXE 网络启动服务器
RHEL/CentOS 7 中配置 PXE 网络启动服务器 作者: Matei Cezar 译者: LCTT joeren | 2015-02-17 14:28 评论: 13 收藏: 8 分享: ...
- Linux进阶之综合练习
综合练习: 1.准备2台centos7系统的服务器,远程互相免密登录,以下所有题目过程中开启防火墙 2.给1号机和2号机使用光盘搭建本地yum源(永久生效) 3.给服务器1添加2块硬盘,1块1GB,1 ...
- Spring IoC容器 XML 配置与加载
IoC 容器 XML 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...
- C语言关于指针函数与函数指针个人理解
1,函数指针 顾名思义,即指向函数的指针,功能与其他指针相同,该指针变量保存的是所指向函数的地址. 假如是void类型函数指针定义方式可以是 void (*f)(参数列表);亦可以先用 typedef ...