使用FFmepg进行视频转码、视频格式转换、图片提取等!

FFMPEG开发快速入坑——视频转换处理 但是在FFMPEG内部编解码器处理时需要处理图像边界等问题,很多时候为了方便优化处理,通常内部创建的图像缓冲区要比输出的原始图像要大一些,而输出的图像内容只是出于缓冲区中的一部分,此时要输出图像要么创建一个新的缓冲区做一次图像拷贝,要么直接将这个缓冲区输出,避免一次拷贝,FFMPEG就是采用后面一种方式少了一次拷贝。其他的格式是packed存储模式,即:各个通道数据是交错存储在一起,此时数据访问只能通过data[0]来进行偏移计算, data[1], data[2],..... 等都是空的。 阅读详情
AI摘要

本文详细介绍FFmpeg的安装、核心参数与功能,包括视频格式转换、音频与视频提取、视频剪切、码率控制、编码格式转换等,是音视频处理领域的实用手册。

一、什么是FFmpeg?

        FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

        FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。

二、安装FFmpeg

在Ubuntu中安装FFmpeg非常简单,只需在终端中输入如下命令即可自动安装:

sudo apt-get install ffmpeg

三、常用参数解释

-i 设定输入流 
-f 设定输出格式 
-ss 开始时间

# 视频参数
-b 设定视频流量(码率),默认为200Kbit/s 
-r 设定帧速率,默认为25 
-s 设定画面的宽与高 
-aspect 设定画面的比例 
-vn 不处理视频 
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 

# 音频参数
-ar 设定采样率 
-ac 设定声音的Channel数 
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 
-an 不处理音频

四、常用功能的使用方法

1.视频格式转换

比如avi转mp4,或者mp4转ts

ffmpeg -i input.avi output.mp4
ffmpeg -i input.mp4 output.ts

2. 提取音频

ffmpeg -i input.mp4 -acodec copy -vn output.aac

上面的命令,默认mp4的audio codec是aac,如果不是会出错,咱可以暴力一点,不管什么音频,都转为最常见的aac。

ffmpeg -i input.mp4 -acodec acc -vn output.aac

-vn: 不处理视频 

3.提取视频

将带有音频的视频提取为纯视频:

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

-an :不处理音频

4. 视频剪切

ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4

-ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。

       注意一个问题,ffmpeg 在切割视频的时候无法做到时间绝对准确,因为视频编码中关键帧(I帧)和跟随它的B帧、P帧是无法分割开的,否则就需要进行重新帧内编码,会让视频体积增大。所以,如果切割的位置刚好在两个关键帧中间,那么 ffmpeg 会向前/向后切割,所以最后切割出的 chunk 长度总是会大于等于应有的长度。

5. 码率控制

      码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。那么,什么是码率?很简单:bitrate = file size / duration,比如一个文件20.8M,时长1分钟,那么,码率就是:biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps

一般音频的码率只有固定几种,比如是128Kbps, 那么,video的就是:video biterate = 2831Kbps -128Kbps = 2703Kbps。说完背景了。好了,来说ffmpeg如何控制码率。 ffmpg控制码率有3种选择,-minrate -b:v -maxrate

  • -b:v主要是控制平均码率。 比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。
ffmpeg -i input.mp4 -b:v 2000k output.mp4
  • 不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好)

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
  • -minrate -maxrate就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

6.视频编码格式转换

视频的编码是MPEG4,转换为H264编码:

ffmpeg -i input.mp4 -vcodec h264 output.mp4

或相反:

ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

当然了,如果ffmpeg当时编译时,添加了外部的x265或者X264,那也可以用外部的编码器来编码。(不知道什么是X265,可以Google一下,简单的说,就是她不包含在ffmpeg的源码里,是独立的一个开源代码,用于编码HEVC,ffmpeg编码时可以调用它。当然了,ffmpeg自己也有编码器)

ffmpeg -i input.mp4 -c:v libx265 output.mp4
ffmpeg -i input.mp4 -c:v libx264 output.mp4

7.只提取视频ES数据

ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

8.过滤器的使用

参考:ffmpeg filter过滤器 基础实例及全面解析

例1:将输入的1920x1080缩小到960x540输出

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4

//ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

例2:为视频添加logo

./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4

9.从视频中提取图像帧

ffmpeg -i test.mp4 -r 1 PATH/TO/IMAGE/image-%05d.jpeg
# -r,指定抽取视频的帧率,即从视频中每秒抽取的帧数,默认是每秒24帧。image-%5d.jpeg,指定输出文件的名字。

ffmpeg -i test.mp4 -r 1 -t 4 PATH/TO/IMAGE/image-%05d.jpeg
# -t,表示取t秒时间的帧

ffmpeg -i test.mp4 -r 1 -ss 00:00:40 PATH/TO/IMAGE/image-%05d.jpeg
# -ss,表示截取帧初始时间

ffmpeg -i test.mp4 -r 1 -ss 00:00:40 -vframes 10 PATH/TO/IMAGE/image-%05d.jpeg
# -vframes,表示截取多少帧

全文参考:https://www.jianshu.com/p/ddafe46827b7

FFmpeg入门 - 格式转换 而av_frame_free内部会去释放AVFrame里buf的空间,对于data成员它只是简单的把指针赋值为0,所以通过av_frame_get_buffer创建存储空间,而通过av_image_fill_arrays指定外部存储空间需要我们手动调用av_free去释放外部空间。// 方式二,使用av_image_fill_arrays指定存储空间,需要我们手动调用av_malloc、av_free去创建、释放buffer的空间。 阅读详情

相关推荐

FFmpeg入门详解之72:MFC实现FFmpeg音视频转码器

这里顺便提一下,在Qt里面我们并没有Controller的概念,而是Delegate(委托),意义很明显:控制器委托模型来处理数据,模型委托控制器来做数据的交互。然后在左侧的“Resource Type”中选择“Bitmap”,点按钮“Import”,显示一个文件对话框,我们选择res文件夹中的test.bmp图片文件,实际的应用中,可以用WM_CTLCOLOR 消息改变mfc中控件的颜色,比如现在就来改变一个static text控件的。//代表15号字体,华文行楷。//文字为15号字体,华文行楷。

福优学苑@音视频+流媒体 969

FFmpeg安装与配置(windows与mac)

FFmpeg命令行安装 使用如下命令进行FFmpeg: sudo apt-get install ffmpeg FFmpeg源码安装 FFmpeg源码获取 使用如下命令获取ffmpeg的源码: git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg ffmpeg编译 使用如下命令指定安装目录: ./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-shared --disa

一叶知秋 16万+

ffmepg-8.1 windows 下载详细教程2026年(最新)

26 年最新

FFmpeg入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。

FFmpeg全称为Fast Forward Moving Picture Experts Group,于2000年诞生,是一款免费,开源的音视频编解码工具及开发套件。它的功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes)。FFmpeg 本身是一个庞大的项目,包含许多组件和库文件,最常用的是它的命令行工具example:对输入视频缩放至320:240:ffmpeg -i input.mpg -vf scale=320:240 output.mp4。

Javachichi的博客 9万+

用Multisim仿真AD630锁定放大器:从2012年电赛A题实战到避坑指南

本文详细介绍了如何使用Multisim仿真AD630锁定放大器,从2012年电赛A题实战出发,提供完整的电路搭建、参数优化及避坑指南。重点解析AD630的开关调制架构和双相位检测的工程实现,帮助读者在强噪声背景下有效提取微弱信号,提升电子设计竞赛和工程实践中的信号处理能力。

weixin_42549451的博客 203

LTO编译器优化介绍以及开启方法

LTO优化的详细介绍

性感的小君君 4924

FFMPEG详解(完整版)

原文出自:http://3xin2yi.info/wwwroot/tech/doku.php/tech:multimedia:ffmpeg 转自:FFMPEG详解 [C.L's Tech Notes] 原文的出处已经访问不到,这里做一个完整版的备份,供参考。 认识FFMPEG FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器,堪称多媒体业界的瑞士军刀。因此,对于从事多媒体技术开发的工程师来说,深入研究FFMPEG成为一门必.

千里之行 10万+

CentOS7下Node.js v20+安装与常见依赖库问题解决指南

本文详细介绍了在CentOS7系统下安装Node.js v20+的完整流程及常见依赖库问题的解决方案。通过升级glibc到2.28+、配置环境变量以及处理libstdc++版本问题,帮助开发者顺利在老旧系统上部署最新版Node.js,提升开发效率。

weixin_30689307的博客 157

ffmpeg的使用,通过Java来进行对视频的转码和截图

ffmpeg的使用,通过Java来进行对视频的转码和截图

LinXin 314

DRM驱动代码分析:展频 跳频

DRM驱动代码分析:展频 跳频

yuuu_cheer的博客 2678

不止于HTTPS请求:用VS2022编译的libcurl玩转文件上传和代理设置

本文详细介绍了如何使用VS2022编译的libcurl库实现文件上传和高级代理配置。通过实战代码示例,展示了多部分表单上传、二进制数据上传以及各种代理设置技巧,帮助C++开发者提升网络编程能力。

weixin_28595749的博客 206

视频转码空间:基于WebAssembly与FFMPEG的浏览器内视频处理工具教程

`videotranscode.space`项目是构建在Web Assembly (WASM) 和FFMPEG之上的一个开源视频转换器,它允许用户在保护隐私的情况下直接在浏览器中对视频进行转码和转换。以下是对该项目主要目录结构的解析: - **app**: 应用程序的核心逻辑所在,可能包含了前端展示和业务逻辑。 - **codescs**: 相关编解码器相关代码或配置。 - **docs**:

gitblog_00004的博客 583

使用ChatGPT工具阅读文献的实战教程

本文介绍核心内容为使用ChatGPT工具阅读文献,希望对学习和使用ChatGPT的同学们有所帮助。为了兼顾质量和速度,本专栏的更新频率为一周一到两更。 文章目录 1. 前言 2. 实战教程 2.1 下载工具并登录 2.2 提取文献中的关键信息

herosunly的博客 15万+

ffmpeg视频处理工具(视频剪切、转码、合并......)

值得注意的是,ffmpeg 为了加速,会使用关键帧技术, 所以有时剪切出来的结果在起止时间上未必准确。通常来说,把 -ss 选项放在 -i 之前,会使用关键帧技术;把 -ss 选项放在 -i 之后,则不使用关键帧技术。-ab : 音频转换后的bit率(默认64k)-r : 视频转换换的桢率(默认25桢每秒)codec : 制度音频使用的编码器(-s : 视频转换后视频的分辨率。-i :指定要转换视频的源文件。-b : 视频转换换的bit率。-ac :制定转换后音频的声道。-ar :音频转换后的采样率。

2401_88244350的博客 1053

Hindsight 内存爆炸 4 个词排查清单:9,284 条 6 成是 SSH 调试日志——Agent 标签系统的实战复盘

9,284 条记忆里 66% 是 SSH 调试日志。4 个标签被滥用=0 区分度。3 个 entity_labels + retain_mission + retain_every_n_turns 配置把噪声压回 5%——附 PATCH 脚本和实测前后数据。

Starry-SkyJing的博客 57

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

FFmepg在直播项目中的作用

请注意,上述代码中的 rtmp://your_rtmp_server/live/stream_name 需替换为您实际的 RTMP 服务器地址和流名称。它提供了非常强大和丰富的功能,包括视频格式转换、音频处理、视频剪辑、提取音频或视频流、直播推流和拉流、添加字幕、调整视频分辨率和帧率等等。3. 拉流和转码:从直播服务器拉取直播流,并根据需要进行转码,以适应不同的播放终端和网络条件。1. 视频采集和编码:将摄像头或其他视频源采集到的原始数据进行编码,以适合网络传输的格式。

m0_57836225的博客 415

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

音视频开发-ffmpeg介绍-系列一

官网地址FFmpeg全称为Fast Forward Moving Picture Experts Group(mpeg:动态图像专家组),于2000年诞生,是一款免费,开源的音视频编解码工具及开发套件。它的功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes)。FFmpeg 本身是一个庞大的项目,包含许多组件和库文件,最常用的是它的命令行工具,FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音。

博客 1867

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ffmpeg 转换flv压缩大小_ffmpeg 视频压缩 转换

ffmpeg.exe -i 1.VOB -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 W.flvc:\ffmpeg\ffmpeg.exe -i d:\1.VOB -y -b 1500 -qscale 4 D:\a.flvffmpeg -i MP.mp4 -ab 128 -ar 22050 -b 500 -r 29.97 -qscale 6 mp.flvffmp...

weixin_30464195的博客 404

Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解

http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5     Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigation, search 目录 [隐藏] 1 Ffmpeg使用语法 2 视频文件截图 3 视频格式转换 4 屏幕录制 5 视频采集 6 使用

b02330224的专栏 2333

Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解

http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5  Ffmpeg快速命令使用From Ffmpeg工程组Jump to: navigation, search目录[隐藏]1 Ffmpeg使用语法 2 视频文件截图 3 视频格式转换 4 屏幕录制 5 视频采集

samantha_sun的专栏 1万+

ffmpeg 基本命令使用

1. ffplay + path :播放视频 -y 覆盖输出文件 -i filename 输入文件 2. ffmepg -y -i path1.mov path2.mp4 视频格式转换 ffmpeg -i success.mp4 -metadata:s:v rotate="90" -codec copy output_success.mp4 3. 根据图片生成 视频 ...

weixin_NineDays66 1664

ffmpeg 视频压缩 转换

ffmpeg.exe -i 1.VOB -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 W.flvc:\ffmpeg\ffmpeg.exe -i d:\1.VOB -y -b 1500 -qscale 4 D:\a.flv ffmpeg -i MP.mp4 -ab 128 -ar 22050 -b 500 -r 29.97 -qsca...

weixin_34259159的博客 273

ffmpeg知识点整理

ffmpeg知识

qq_63053996的博客 497
上一篇: 变分法原理!
下一篇: 三角剖分
dulingwen
博客等级 码龄9年 519粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值