【FFmpeg学习笔记一】FFmpeg简介

2023-11-04

一、FFmpeg简介

FFmpeg是一款自由软件,核心功能就是音视频编解码,其中的“FF”指的是“Fast Forward(快速前进)。FFmpeg作为MPlayer姊妹项目,在2000年由法布里斯·贝拉发起的。FFmpeg强大的编解码功能使得它应用广泛:
1、FFMPEG作为内核视频播放器

Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音...

2、FFMPEG作为内核的Directshow Filter:

ffdshow,lav filters...

3、FFMPEG作为内核的转码工具

ffmpeg,格式工厂...

二、FFmpeg函数库

FFmpeg官网 :下载源码编译。
FFmpeg编译版本:该网站中的FFMPEG分为3个版本:Static,Shared,Dev。前两个版本可以直接在命令行中使用,他们的区别在于:Static里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的Dll已经被编译到exe里面去了。Shared里面除了3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些Dll,比如说avcodec-54.dll之类的。Shared里面的exe体积很小,他们在运行的时候,到相应的Dll中调用功能。
Dev版本是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。

1、avcodec:编解码库
2、avformat:格式封装
3、avfilter:滤镜特效处理
4、avdevice:各种设备的输入输出
5、avutil:公共库
6、postproc:后处理
7、swresample:音频采样数据格式转换
8、swscale:视频像素数据格式转换

【温馨提示1:其他版本下载】在这里插入图片描述
【温馨提示2:h264、h265源码下载】
h264源码下载
h265源码下载

三、FFmpeg用例

  1. 编码
//有损压缩
ffmpeg -s 1920x1080 -i input.yuv output.h265

//无损压缩:lossless=1
ffmpeg -s 1920x1080 -pix_fmt yuv420p -r 30 -i input_1920x1080_30.yuv -c:v libx265 -preset ultrafast -x265-params lossless=1 output_1920x1080_30.mp4
  1. 解码
ffmpeg -i input.mp4 -vsync 0 -y output.yuv
  1. 转码
ffmpeg -i input.mp4 output.avi
  1. 解封装
ffmpeg -i example.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 example.h264
  1. 降采样
ffmpeg -s 1920x1080 -i input_1920x1080.yuv -vf scale=480:270:flags=lanczos,setsar=1:1 output_480x270.yuv -hide_banner
  1. 抽样
//从30fps抽样为10fps
ffmpeg -r 30 -i input_30.mp4  -c:v libx264 -x264-params qp=0 -r 10 output_10.mp4
  1. 截取
//yuv按帧数截取:-ss 0 -t 60
ffmpeg  -r 1 -s 1280x720 -i input.yuv -ss 0 -t 60 output_60.yuv
//mp4按帧数截取:
ffmpeg  -i input.mp4 -vf "select=between(n\,0\,59)" -y -acodec copy ./output.mp4
  1. 裁剪
    ffmpeg -i input.mp4 -vsync 0 -vf crop=1920:1080:0:0 output.yuv

  2. 缩放
    ffmpeg -s:v 1920x1080 -i example.yuv -vf scale=320:240 -c:v rawvideo -pix_fmt yuv420p example.yuv

  3. 加标签:
    ffmpeg -s 1920x1080 -pix_fmt yuv420p -i example.yuv -vf “pad=1920:1200:0:120:white,drawtext=fontfile=arial.ttf:fontsize=130:fontcolor=black:borderw=1:start_number=100:text=‘%{n}’:x=12:y=12” -an -vcodec libx264 -preset veryslow -x264-params crf=12:bframes=0:rc-lookahead=64 example.mp4

  4. 反转
    ffmpeg -i example.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast reversed.mp4

  5. 逆序播放
    ffmpeg -i input.mp4 -vf reverse reversed.mp4

  6. 空域拼接
    ffmpeg -i exam1.mp4 -i exam2.mp4 -i exam3.mp4 -lavfi hstack=inputs=3 output.mp4

  7. 时域拼接
    1、转码TS
    ffmpeg -i exam1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb exam1.ts
    2、串联TS:
    ffmpeg -i “concat:exam1.ts|exam2.ts” -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
    3、解码:
    ffmpeg -i output.mp4 -c:v rawvideo -pix_fmt yuv420p output.yuv

  8. 播放视频

ffplay test.avi
  1. 查看文件格式

查看帧信息

key_frame:是否是关键帧
pict_type:帧类型(I、B、P)
//TO DO
ffprobe -show_frames -select_streams v -of xml test15.mp4 >videoframes.info
  1. 从MP4中提取视频流到h265文件
ffmpeg -i input.mp4 -codec copy -bsf: hevc_mp4toannexb -f hevc out.h265

-i input.mp4: 是输入的MP4文件
-codec copy: 从mp4中拷贝
-bsf: hevc_mp4toannexb: 从mp4拷贝到annexB封装
-f hevc: 采用hevc格式
out.h265: 输出的文件

更多命令
更多命令
参数详解

四、相关链接

  1. FFmpeg官网
  2. ffmpeg已编译版本
  3. API文档
  4. WIKI
  5. h264源码
  6. h265源码
  7. 错误集锦
  8. 逆序播放-视频拼接
  9. 雷神博客
  10. ffmpeg论坛
  11. 罗索实验室
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【FFmpeg学习笔记一】FFmpeg简介 的相关文章

  • OpenCV 3.0.0 使用 FFMPEG 时出错

    我使用 OpenCV 一段时间了 但是 我最近将系统更改为没有任何管理员权限的集群 问题是这样的 在我的主文件夹中 我安装了 FFMPEG ffmpeg 网站上提供的最新稳定版本 我将它安装在 HOME 中 因此在 HOME lib 中安装
  • 使用 Python 从原始帧创建 MPEG4 视频文件

    我有一个原始视频帧源 我可以在 Python 中访问它 我想用它创建一个 MPEG4 视频 并带有 MP3 背景音乐 Python 中有哪些类型的工具和库可用于此类任务 最好我想要一个 API 我可以为其提供输出文件名 然后将各个帧作为 2
  • ffmpeg drawtext如何设置从右到左的方向

    i write arabic text to videos and it works fine but the issue is that the arabic language is written from right to left
  • 如何使用ijkplayer库

    我要使用 ijkplayergithub链接 https github com bbcallen ijkplayer 我下载了这个 然后通过 文件 gt 导入 gt 常规 gt 现有项目到工作区 将其导入到 eclipse 中 之后我有三个
  • 在 R 中导入 png 文件并转换为动画(.mp4)

    我正在尝试用 R 中的几个 png 文件创建一个简短的动画 我尝试了 packagemagick但只有当我将它们保存为 gif 时它才有效 当我尝试另存为 mp4 时 它将生成一个 mp4 文件 但一旦打开它 只会显示第一张图像 我的代码是
  • 如何使用ffmpeg从avi生成gif? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试使用以下命令将视频的一部分提取到动画 gif 中 ffmpeg i video avi t 5 out gif 它会生成一个 g
  • 使用 ffmpeg 在纯色背景上叠加延时视频

    我有很多名为的主页屏幕截图homescreen000001 png homescreen000002 png等 我正在尝试使用 ffmpeg 创建这些图像的延时视频 当我运行以下命令时 它通常可以正常工作 ffmpeg f image2 i
  • Google Cloud Platform:将上传的 MP4 文件转换为 HLS 文件

    我正在构建一个平台 允许用户将一些视频文件 20 40 秒 从手机上传到服务器 所有这些上传目前都运行良好 文件通过nodejs云功能存储在谷歌存储桶中 现在我想创建一个 gcp 转码器作业 它将上传的 mp4 视频文件转换为 hls 视频
  • 从编码视频文件中提取运动向量

    我正在尝试从编码的 mp4 文件中提取运动矢量数据 在之前的帖子中我发现 一个答案http www princeton edu jiasic cos435 motion vector c http www princeton edu jia
  • MP4 到 DASH(bash 脚本)

    我有一个网站 用户可以在其中上传视频文件 我想使用 DASH 流式传输所有内容以获得自适应比特率流式传输 因此 我编写了一个 bash 脚本 由 cron 运行 将所有 mp4 文件转换为 DASH 但它无法正常工作 出了什么问题 例如 使
  • 如何在Android项目中使用libffmpeg.so?

    我正在尝试在 Android 中创建一个屏幕录制应用程序 为此 我使用 FFmpeg 我已经创建了 libffmpeg so 文件 现在我想在 Android 项目中使用相同的方法来调用它的本机函数 我怎样才能做到这一点 本教程提供了有关此
  • 如何使用android ndk r9b为Android编译FFMPEG

    我想设计一个Android应用程序 可以通过FFMPEG命令播放和编辑视频 但我不知道如何在Android上使用FFMPEG 我尝试过从Google搜索到的许多方法 但它们太旧了 无法实现 现在 FFMPEG的最新版本是2 1 1 Andr
  • 使用 ffmpeg 或 OpenCV 处理原始图像

    看完之后维基百科页面 http en wikipedia org wiki Raw image format原始图像格式 是任何图像的数字负片 为了查看或打印 相机图像传感器的输出具有 进行处理 即转换为照片渲染 场景 然后以标准光栅图形格
  • ffmpeg AVFrame 到 opencv Mat 转换

    我目前正在开发一个使用 ffmpeg 解码接收到的帧的项目 解码后 我想将 AVFrame 转换为 opencv Mat 帧 以便我可以在 imShow 函数上播放它 我拥有的是字节流 我将其读入缓冲区 解码为 AVFrame f fope
  • 在 ffmpeg 中,如何使用scale2ref 过滤器缩放 dvdsub 字幕以匹配视频大小?

    我有一个从直播电视录制的 mpeg 文件 其中包含视频以及多个音频和字幕流 我的最终目标是能够创建较小的视频文件 因为 mpeg 文件大小为数 GB 我在这条道路上的第一步只是能够选择视频 音频和字幕流中的每一个并将它们复制到 mkv 文件
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • Windows 上的 ffmpeg-android ndk

    我正在尝试编译 bash 文件 带有 android ndk 的 ffmpeg 我收到如下错误 arm linux androideabi gcc 无法创建可执行文件 C 编译器测试失败 Makefile 2 config mak 没有这样
  • 使用FFMpeg确定视频类型,然后进行转换?

    我正在尝试以编程方式确定文件的真实类型 看来我必须使用 FFMPeg 来实现这一点 我想确定上传的文件实际上是否是 MP4 或 FLV 对于 Flash 视频 或 WebM 对于 HTML5 我知道 FFMPeg 中的 i 运算符 但我不知
  • 致命错误:libavcodec/avcodec.h 没有这样的文件或目录编译终止

    我正在尝试使用 gcc 执行tutorial01 c 并且 gcc 和tutorial01 c 以及 libavcodec 和 libavformat 及其关联文件位于同一文件夹中 它给了我这个错误 致命错误 libavcodec avco
  • 如何让 Python 找到 ffprobe?

    I have ffmpeg and ffprobe安装在我的 mac macOS Sierra 上 并且我已将它们的路径添加到 PATH 中 我可以从终端运行它们 我正在尝试使用ffprobe使用以下代码获取视频文件的宽度和高度 impor

随机推荐

  • BUG:使用/var/log/messages初步定位软件莫名退出问题

    BUG 使用 var log messages定位问题 1 var log 目录下文件和目录简介 var log messages 包括整体系统信息 也包含系统启动期间的日志 此外 mail cron daemon kern和auth等内容
  • 使用谷歌提供的解析插件gsonformat安装到Android studio方法

    转载地址 https www cnblogs com tianmanyi p 6028624 html Android Studio菜单栏File gt Settings gt plugins 这个是Android Studio搜索和安装插
  • C语言——输入两个数,输出较大值(函数调用实现)

    C语言函数调用 输入两个数 要求输出其较大值 一个返回值 两个参数 名字getMaxFromTwoData 函数体 正常实现 三目运算符 函数调用过程 1 在定义函数中指定的形参 在未出现函数调用时 不占用存储单元 发生调用时 函数形参被临
  • 解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

    解决Tomcat下IntelliJ IDEA报错java lang NoClassDefFoundError javax servlet ServletContextListener 笔者在做代码重构的时候 以前记得运行正常的代码 如今一直
  • 解决Pycharm导入模块时提示Cannot find reference

    问题描述 今天在学习python时候遇到了一个导入模块时提醒Cannot find reference 的问题 要导入的这个模块是正常的 解决方案 在pycharm中设置source路径 File gt Setting gt Project
  • 数据结构与算法Python版期末在线考试OJ部分

    1 二叉树路径 10分 题目内容 给定一个二叉查找树的节点插入顺序 请重新构建这个二叉查找树 并按从左至右顺序返回所有根节点至叶节点的路径 输入格式 一行整数 以空格分隔 注 测试用例中不包含重复的数字 输出格式 按照叶节点由左至右顺序 以
  • 【亲测可用】使用pm2部署nuxt项目

    1 科普 Nuxt是一个基于vue js的应用框架 可以做到服务器端渲染 解决vue动态生成页面 难以SEO优化的难题 详情我这里不赘述了 想要了解的可以查看这里 Nuxt教程 PM2是一个进程管理工具 用于启动 维护Node的应用程序 非
  • Finalshell连接Linux超时之Connection timed out: connect

    BUG原因 每次重启finalshell 还是 CentOS ip地址存在变化的可能 目录 前言 报错 摸索 解决措施 前言 1 福利 花了2小时才解决的BUG 希望本篇文章能帮你10分钟解决 2 tips ipconfig或ip addr
  • cp can‘t stat ..........

    在我把usr src linux source 5 13 0 tar bz2复制的时候出现了错误 就是这个提示 cp cannot stat linux source 5 13 0 tar bz2 No such file or direc
  • Linux性能调优之sar详解

    什么是sar sar是一个采集 报告和存储计算机负载信息的工具 有的时候 我们要通过对系统的cpu负载等性能数值的查看 来判排查系统产生某种故障 经常死机或者运行速度突然变慢 的原因 但是 简单的top uptime w等命令只可以查看当前
  • linux :ubuntu 安装搜狗输入法

    1 安装Fcitx输入框架 sudo apt install fcitx 2 搜狗输入法官网下载Linux版本搜狗输入法 32位和64位根据自己情况 3 输入指令安装 sudo dpkg i sogoupinyin 2 3 1 0112 a
  • 虚拟机的内存泄漏和内存溢出

    文章目录 内存泄漏 内存溢出 集合引起的内存泄漏 内存泄漏 内存泄漏的根本原因是长生命周期的对象持有短生命周期对象的引用 尽管短生命周期的对象已经不再需要 但由于长生命周期对象持有它的引用而导致不能被回收 以发生的方式来分类 内存泄漏可以分
  • google protobuf使用

    http www cnblogs com youxin p 4073703 html If you get the source from github you need to generate the configure script f
  • chatgpt赋能python:如何实现Python代码执行完后再执行

    如何实现Python代码执行完后再执行 当我们在编写Python代码时 可能会需要在代码执行完之后再执行一些任务 这种情况非常常见 例如在爬虫中 可能需要在爬取完网页内容后再将其存入数据库 Python提供了多种方法来实现这个目的 方法一
  • 嵌入式开发之堆栈调试打印

    简介 打印堆栈的常用方法包括 glibc中的backtrace函数 gcc内置函数 builtin return address 第三方库libunwind 1 glibc中的backtrace 1 1函数原型 include
  • 如何设置ppt,使讲演者看到备注,而观众看不到(很好,很实用!)

    前言 大家在看此篇文章之前心中是不是一直存有一个疑问 那就是office组件中的powerpoint PPT 制作中的 备注 到底有何作用 在工作中经常用PPT放映演示给客户进行讲演 也见识过专业讲师和IT销售给我介绍产品 使用的也是 PP
  • AD查询1000条限制和解决方案

    http www riaos com ria 11639 公司的一个项目要从AD上取数据 为了测试性能 批量在AD上创建了2000多个用户 但是用java程序获取所有用户的时候会报错或者只能取到1000条数据 用com novell lda
  • Hash函数

    Hash函数 1 数据完整性 2 Hash函数 1 Hash函数定义 2 Hash函数的应用 3 Hash函数的基本要求 4 Hash函数的安全性 5 随机预言机ROM 6 ROM中的三个算法 1 原像问题 2 第二原像问题 3 碰撞问题
  • uni-app ——小程序购物车基本功能的实现过程

    文章目录 前言 一 示例图 二 实现步骤 1 实现思路 2 静态页面的搭建 3 css样式 4 使用vuex操作相关数据 总结 一 示例图 二 实现步骤 1 实现思路 关于实现思路在初次使用JS实现购物车时就有所讲解 其实实现思路都大致相同
  • 【FFmpeg学习笔记一】FFmpeg简介

    Fmpeg简介 一 FFmpeg简介 二 FFmpeg函数库 三 FFmpeg用例 四 相关链接 一 FFmpeg简介 FFmpeg是一款自由软件 核心功能就是音视频编解码 其中的 FF 指的是 Fast Forward 快速前进 FFmp