FFmpeg常用命令详解与实战指南

news/2024/5/20 18:35:49

下载地址:Releases · BtbN/FFmpeg-Builds (github.com)

1. 获取视频信息

使用FFmpeg获取视频信息是最基本的操作之一。你可以使用-i选项指定输入文件,然后使用FFmpeg内置的分析器来获取视频的各种信息,包括视频编解码器、音频编解码器、分辨率、帧率、码率等。

ffmpeg -i input.mp4

 结果:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':Metadata:major_brand     : mp42minor_version   : 0compatible_brands: mp42isomavc1creation_time   : 2024-03-12T03:09:36.000000ZDuration: 00:00:22.93, start: 0.000000, bitrate: 24425 kb/sStream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 3840x2160, 24422 kb/s, 30 fps, 30 tbr, 30 tbn (default)Metadata:creation_time   : 2024-03-12T03:09:36.000000Zhandler_name    : Vimeo Artax Video Handlervendor_id       : [0][0][0][0]encoder         : AVC Coding
  • 文件类型:mov, mp4, m4a, 3gp, 3g2, mj2 (这些都是 MPEG-4 媒体容器格式)
  • 创建时间:2024年3月12日,03:09:36
  • 持续时间:00:00:22.93
  • 视频流信息:
    • 编解码器:h264 (High),也就是 AVC (Advanced Video Coding),通常称为 H.264
    • 视频像素格式:yuv420p,色彩空间为 YUV,采样结构为 4:2:0,色度信息被降采样
    • 视频分辨率:3840x2160,即 4K 分辨率
    • 比特率:24422 kb/s
    • 帧率:30 帧每秒 (fps)
    • 时间基:30 tbr (帧率)、30 tbn
    • 其他元数据信息:包括创建时间、处理程序名称、供应商 ID、编码器等

2. 音视频分离

音视频分离是指将视频文件中的视频流和音频流分别提取出来。你可以使用FFmpeg的-vn(禁用视频流)和-an(禁用音频流)选项来实现这一功能。

# 提取视频流
ffmpeg -i input.mp4 -vn output_audio.mp3
# 提取视频流
ffmpeg -i input.mp4 -an output_video.mp4

将test.mp4和tmp.mp3音视频合并 

# 确保音频流就是mp3的才可以这么干
ffmpeg -i "test.mp4" -vn -c:a copy "tmp.mp3"

3. 转换音视频格式

FFmpeg支持将音视频文件转换为各种常见的格式,如MP4、FLV、AVI、MOV等。你可以使用-f选项指定输出格式,使用-vcodec-acodec选项分别指定视频编解码器和音频编解码器。

MP4转FLV

ffmpeg -i input.mp4 -codec copy output.flv

MP4转AVI

ffmpeg -i input.mp4 output.avi

MP4转MOV 

ffmpeg -i input.mp4 output.mov

4. 视频裁剪与拼接

FFmpeg提供了强大的视频裁剪和拼接功能。你可以使用-ss选项指定裁剪的起始时间,使用-t选项指定裁剪的持续时间,使用-to选项指定裁剪的结束时间。对于视频拼接,你可以使用多个输入文件,并指定输出文件。

裁剪视频(从第10秒开始,持续10秒)

ffmpeg -i input.mp4 -ss 00:00:10 -t 10 output.mp4

视频拼接(将两个视频文件拼接成一个)

ffmpeg -i input1.mp4 -i input2.mp4 output.mp4

5. 视频转码

视频转码是指将视频文件转换为不同的编解码器或分辨率。你可以使用-vcodec选项指定视频编解码器,使用-vf选项指定视频滤镜来调整分辨率、帧率等参数。

将MP4视频转码为H.264编码的MKV文件:

ffmpeg -i input.mp4 -vcodec libx264 output.mkv

调整视频分辨率:

ffmpeg -i input.mp4 -vf scale=640:480 output.mp4

6. 音频处理

除了视频处理外,FFmpeg还提供了丰富的音频处理功能,包括音频转码、音频提取、音频剪辑等。你可以使用-acodec选项指定音频编解码器,使用-af选项指定音频滤镜来处理音频数据。

提取视频中的音频并转码为MP3格式

ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3

音频剪辑(从第30秒开始,持续10秒) 

ffmpeg -i input.mp3 -ss 00:00:30 -t 10 output.mp3

调整视频大小

ffmpeg -i input.mp4 -vf scale=640:480 output.mp4

视频截图

ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 screenshot.jpg

 9 音频转码

ffmpeg -i input.wav -b:a 192K output.mp3

 10 合并视频

原视频包含音频和视频信息情况下:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4

单独合并视频信息:

 去掉a,直接对v进行合并

ffmpeg -i input.mp4 -i output.mp4 -filter_complex "[0:v][1:v]concat=n=2:v=1[outv]" -map "[outv]"  output2.mp4

11 m3u8生成

ffmpeg -i input.mp4 -c:v copy -c:a copy -f hls -hls_time 10 output.m3u8

 -c:v copy-c:a copy 参数表示视频和音频流不进行重新编码

-hls_time 控制每个TS文件的时长,-hls_list_size 控制M3U8文件中最多保留的TS文件数目

指定为每一个ts指定baseurl

ffmpeg -i input.mp4 -c:v copy -c:a copy -f hls -hls_time 10 -hls_base_url http://example.com/videos/ output.m3u8

生成内容:

 

12 m3u8转音频视频

视频:

ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -i input.m3u8 -c copy output.mp4

-protocol_whitelist 参数允许FFmpeg使用指定的协议(在这里是 "file", "http", "https", "tcp", "tls")来下载TS文件。 -c copy 参数表示不对视频进行重新编码,只是直接将输入流复制到输出文件中。 

音频: 

ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -i input.m3u8 -map 0:a -c copy output.mp3

 -map 0:a 参数用于选择第一个输入文件(M3U8文件)的所有音频流。-c copy 参数表示不对音频进行重新编码

13 m3u8生成指定时间的音频视频

# 提取视频
ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -ss 00:01:30 -i input.m3u8 -t 60 -c:v copy -c:a copy output_video.mp4# 提取音频
ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -ss 00:01:30 -i input.m3u8 -t 60 -vn -c:a copy output_audio.mp3

 测试越多越感觉ffmpeg功能好强大,简直能满足对音视频的大多需求

参数说明

选项说明
-h显示基本选项。
-h long显示更多选项。
-h full显示所有选项(包括所有格式和编解码器特定选项,非常长)。
-h type=name显示指定解码器/编码器/解封装器/封装器/过滤器/比特流过滤器/协议的所有选项。
-L显示许可证信息。
-version显示版本信息。
-muxers显示可用的封装器。
-demuxers显示可用的解封装器。
-devices显示可用设备。
-decoders显示可用的解码器。
-encoders显示可用的编码器。
-filters显示可用的过滤器。
-pix_fmts显示可用的像素格式。
-layouts显示标准声道布局。
-sample_fmts显示可用的音频采样格式。
-v <loglevel>设置日志级别。
-y覆盖输出文件。
-n永不覆盖输出文件。
-stats在编码过程中打印进度报告。
-f <fmt>强制指定容器格式(否则自动检测)。
-t <duration>在指定持续时间后停止转码。
-to <time_stop>在达到指定时间后停止转码。
-ss <time_off>从指定时间开始转码。
-metadata添加元数据。
-r重写输入帧速率/转换为指定输出帧速率。
-aspect设置宽高比。
-vn禁用视频。
-vcodec选择视频流的编码器/解码器。
-vf应用视频流的指定滤镜。
-b视频比特率。
-aq设置音频质量(特定于编解码器)。
-ar设置音频采样率。
-ac设置音频通道数。
-an禁用音频。
-acodec选择音频流的编码器/解码器。
-ab音频比特率。
-af应用音频流的指定滤镜。
-sn禁用字幕。
-scodec选择字幕流的编码器/解码器。

HLS M3U8参数:

参数说明
-hls_time <duration>指定每个TS文件的时长。例如,-hls_time 10 表示每个TS文件的时长为10秒。
-hls_list_size <number>指定M3U8播放列表中最多包含的TS文件数目。当生成的TS文件数量超过这个值时,旧的TS文件将被删除。例如,-hls_list_size 5 表示M3U8播放列表最多包含5个TS文件。
-hls_segment_filename <pattern>指定TS文件的命名模式。默认情况下,FFmpeg会根据输入文件的名称生成TS文件,但您也可以使用这个选项来自定义TS文件的命名。例如,-hls_segment_filename file_%03d.ts 将生成形如 file_001.tsfile_002.ts 等命名的TS文件。
-hls_base_url <url>指定TS文件在服务器上的基本URL。当客户端请求TS文件时,会使用这个URL与TS文件名拼接成完整的URL。例如,-hls_base_url http://example.com/videos/ 将使用 http://example.com/videos/ 作为TS文件的基本URL。
-hls_flags <flags>指定一些HLS相关的标志。常见的标志包括: split_by_timeomit_endlist等。

http://www.mrgr.cn/p/64032662

相关文章

【算法】滑动窗口——水果成篮

本篇博客是我对“水果成篮”这道题由暴力解法到滑动窗口思路的具体思路&#xff0c;有需要借鉴即可。 目录 1.题目2.暴力求解3.暴力优化3.1每次right不用回退3.2有些left长度一定不如前一个&#xff0c;不用走&#xff0c;left不回退 4.滑动窗口算法5.总结 1.题目 题目链接&am…

【win10 文件夹数量和看到不一致查看隐藏文件已经打开,Thumb文件作妖】

目录 任务介绍&#xff1a;重命名规则修改前修改后 实现思路VB代码实现BUG犯罪现场&#xff08;眼见不一定为实&#xff09;破案1&#xff1a;抓顶风作案的反贼&#xff01;&#xff01;&#xff01;破案2&#xff1a;破隐身抓刺客&#xff01;&#xff01;&#xff01;杀器&am…

[4]自定义Lua解析器管理器-------演化脚本V0.7

使用自定义委托通过tolua来调用多返回值和长参数类型的函数。 防踩坑指南,使用自定义委托需要将委托类型添加到CustomSettings中。[4]自定义Lua解析器管理器-------演化脚本V0.7 使用自定义委托来调用lua脚本中的多返回值函数和长参数类型的函数。 先看代码,依旧是上篇文章中…

[转帖]Mysql数据库的事务特性、隔离级别及MVCC多版本并发控制简介

https://my.oschina.net/tongchengyu/blog/4714950事务的特性 数据库如果支持事务,就要满足下面四个特性(ACID)。 原子性(A:Atomicity) 在一个事务中,多个sql操作,要么一起成功(所有数据操作都成功),要么一起回滚(其中一个没有成功,其他数据操作一起恢复到开始状态…

2010NOIP普及组真题 2. 接水问题

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1950 解法一、朴素模拟 核心思想&#xff1a; 朴素模拟&#xff1a; 1、先给每个b[i]水龙头分配一个人a[i]&#xff0c;b[i] 表示水龙头的剩余时间。同时标记该水龙头为 used 使用中 2…

YOLOv9中模块总结补充|SPPELAN

专栏相关代码&#xff1a;目前售价售价69.9&#xff0c;改进点80 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 1. SPPELAN SPPELAN是YOLOv9作者在SPPF的基础上创新的模块&#xff08;增加了一次…

【Python深度学习(第二版)(2)】深度学习之前:机器学习简史

文章目录 一. 深度学习的起源1. 概率建模--机器学习分类器2. 早期神经网络--反向传播算法的转折3. 核方法 -- 忽略神经网络4. 决策树、随机森林和梯度提升机5. 神经网络替代svm与决策树 二. 深度学习与机器学习有何不同 可以这样说&#xff0c;当前工业界所使用的大部分机器学习…

vue3+ts+vant选择器选中文字效果

所需要的样式: 选中某个选项后文字有放大和改变颜色的效果 主要就是在van-picker上加class, 给对应的style样式即可 <van-pickerclass"custom-picker":title"pickerData.titleText"v-if"pickerData.ispicker"show-toolbar:columns"col…

(8)ILA介绍

一、ILA简介二、ILA使用 在IP Catalog中选择搜索ila,选择第一个:接下来进行一些参数的配置: 配置好后生成即可: 一般情况下选择额ooc模式,可以节省资源。 在IP Sources中可以看到生成的ila ip核,比较重要的是这个.veo文件,这个相当于是ila的一个例化的模板,将该模板直接…

文件IO笔试题

文件IO 笔试题 作业:设计程序,获取当前系统时间,把时间转换为特定格式”yy年mm月dd日 星期x tt:mm:ss”,并每隔1s写入到本地磁盘中一个叫做log.txt的文本中,如果文本不存在则创建。 代码: /***************************************************************************…

预测市场?预测股票?如何让预测有更高的准确率?

我们发现在足球赛中&#xff0c;只要知道一个简单的讯息&#xff08;主队过去的获胜机率超过一半&#xff09;&#xff0c;预测力就会明显好过随便乱猜。如果再加上第二个简单的讯息&#xff08;胜负纪录较佳的队伍会略占优势&#xff09;&#xff0c;可以再进一步提升预测力。…

BGP小实验

目录拓扑图环境介绍复盘实验总结配置R3R4R1R2 拓扑图环境介绍每台路由器上都有looback0,比如R4是4.4.4.4/32,直连接口地址为10.1.34.4/24,其他路由器直连和looback口地址类似,R4上还有looback1,地址为44.44.44.44/24。 R3和R4是EBGP邻居关系,AS123内路由器是IBGP邻居关系…

Vue入门到关门之Vue3学习

一、常用API 注意:本文项目均使用脚手架为 Vite 1、setup函数 (1)介绍 如果在项目中使用配置项API,那么写起来就和vue2的写法是一样的;但是如果在项目中写的是组合式API,那么组件中所用到的:数据、方法等等,均要配置在setup中。此外,setup() 钩子也是在组件中使用组合…

线程的常见方法

线程的常见方法 休眠&#xff1a; 让当前状态不再参与cpu的竞争&#xff0c;直到休眠结束&#xff1b; 结果&#xff1a;并不是完全交替进行的&#xff0c;因为只是休眠状态&#xff0c;也会存在争抢cpu 放弃&#xff1a; 让当前状态主动放弃时间片&#xff0c;下次再去争抢…

面试集中营—Redis架构篇

一、Redis到底是多线程还是单线程 1、redis6.0版本之前的单线程&#xff0c;是指网络请求I/O与数据的读写是由一个线程完成的&#xff1b; 2、redis6.0版本升级成了多线程&#xff0c;指的是在网络请求I/O阶段应用的多线程技术&#xff1b;而键值对的读写还是由单线程完成的。所…

sso-单点登录

单点登录 项目组成 基于spring-boot-2.1.8.RELEASE,使用redis完成完成 session记录。sso-basesso-serversso-client1sso-client2 sso-baseTokenFilter: 拦截获取是否登录,并获取登录用户设置到线程变量中TokenUtil:从redis获取指定key判断是否登录,以及登录用户;写入sessi…

Vue入门到关门之Vue2高级用法

一、在vue项目中使用ref属性 ref 属性是 Vue.js 中用于获取对 DOM 元素或组件实例的引用的属性。通过在普通标签上或组件上添加 ref 属性,我们可以在 JavaScript 代码中使用 this.$refs.xxx 来访问对应的 DOM 元素或组件实例。放在普通标签上,通过 this.$refs.名字---》取到的…

Vue入门到关门之Vue3项目创建

一、vue3介绍 1、为什么要学习vue3? vue3的变化: 首先vue3完全兼容vue2,但是vue3不建议用vue2的写法;其次,vue3拥抱TypeScript,之前vue2使用的JavaScript,ts完全兼容js 最后之前学的vue2 是配置项api,而vue3是组合式api optionsAPI(旧) => compositionAPI(新), 效…

LeNet-5上手敲代码

LeNet-5 LeNet-5由Yann LeCun在1998年提出&#xff0c;旨在解决手写数字识别问题&#xff0c;被认为是卷积神经网络的开创性工作之一。该网络是第一个被广泛应用于数字图像识别的神经网络之一&#xff0c;也是深度学习领域的里程碑之一。 LeNet-5的整体架构&#xff1a; 总体…

基于Springboot的校园竞赛管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园竞赛管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…