FFmpeg常用命令

ops/2025/1/22 15:12:51/

文章目录

  • 一、 FFmpeg 音视频的处理流程
  • 二、FFmpeg 常用命令
    • 2.1、查看本机支持的采集设备
    • 2.2、 录制视频
      • 2.2.1、原始视频
      • 2.2.2、编码的视频
    • 2.3、录制音频:
      • 2.3.1、原始音频
      • 2.3.2、编码的音频
    • 2.4、录制音视频:
    • 2.5、文件格式转换:
    • 2.6、提取音频 :
    • 2.7、提取视频:
    • 2.8、合并音视频:
    • 2.9、视频裁剪
      • 时长
      • 分辨率
    • 2.10、 倍速
      • 视频倍速
      • 音频倍速
      • 音视频倍速
    • 2.11、[视频转图片](https://www.ffmpeg.org/ffmpeg-formats.html#image2_002c-image2pipe):
    • 2.12、[图片转视频](https://www.ffmpeg.org/ffmpeg-formats.html#image2-1):
    • 2.13、推流:
      • 文件推流:
      • 摄像头推流:
      • 桌面屏幕推流:
    • 2.14、拉流:
  • 三、FFprobe 常用命令
    • 查看格式
    • 查看帧信息

以下命令和参数都可以在 官方文档,找到解释

一、 FFmpeg 音视频的处理流程

在这里插入图片描述

  • demuxer :把输入文件INPUT.mkv 经过demuxer解封装,得到stream0 (经过encoder的音频数据,例如:aac) 和 stream1 (经过encoder的视频数据,例如:h264)

  • decoder:视频 H264 -> YUV、音频 opus/aac-> pcm(上图没有对音频进行decode)

  • encoder,视频 YUV -> H264,音频 pcm -> opus/aac(上图没有对音频进行encode)

  • muxer: 把编码后的opus,h264 封装为OUTPUT.mp4

  • 上图的audio没有经过解码和编码,通过streamcopy的方式,保存到了输出文件,这样速度更快。

  • 如果需要使用Filtergraphs (ffmpeg-filters),必须要经过 decoder,因为Filtergraphs是对原始数据进行处理。如下图:

在这里插入图片描述

二、FFmpeg 常用命令

可通过ffmpeg -h 查看 查询基本信息的参数

ffmpeg的命令格式

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

Each input or output can, in principle, contain any number of elementary streams of different types (video/audio/subtitle/attachment/data), though the allowed stream counts and/or types may be limited by the container format. Selecting which streams from which inputs will go into which output is either done automatically or with the -map option (see the Stream selection chapter).

To refer to inputs/outputs in options, you must use their indices (0-based). E.g. the first input is 0, the second is 1, etc. Similarly, streams within an input/output are referred to by their indices. E.g. 2:3 refers to the fourth stream in the third input or output. Also see the Stream specifiers chapter.

2.1、查看本机支持的采集设备

查看当前机器的输入输出设备:

ffmpeg -devices 

该命令在mac的输出,有一项是: AVFoundation
AVFoundation is the currently recommended framework by Apple for streamgrabbing on OSX >= 10.7 as well as on iOS.

Print the list of AVFoundation supported devices and exit:

ffmpeg -f avfoundation -list_devices true -i ""

查看编解码器的信息,例如:支持的像素格式

ffmpeg -h encoder=h264_videotoolbox

在这里插入图片描述

2.2、 录制视频

2.2.1、原始视频

ffmpeg -f avfoundation -i "1" -video_size 1280x720 -r 30 out.yuv

-i “1” 表示video的选择是 从AVFoundation支持的video设备中,索引1 的video设备,具体是指桌面
-video_size 1280x720 是无效的,从设备输入,不支持改变分辨率
-r 30 此例子中是 指定输出的帧率为30fps

播放yuv 原始视频时,需要指定分辨率和像素格式,这些信息,在录制时会输出

ffplay -pixel_format uyvy422 -video_size 5120x2880 out.yuv

2.2.2、编码的视频

 ffmpeg -f avfoundation  -i "1"  out.mp4

2.3、录制音频:

2.3.1、原始音频

ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm

-i :0 表示audio的选择是 AVFoundation支持的audio设备中,索引0的设备,具体是指桌面

-ar 44100 此处指设置输出文件的采样率

-f s16le 指定原始音频的采样格式

播放原始音频,需要指定采样格式:

ffplay -f s16le  out.pcm

2.3.2、编码的音频

ffmpeg -f avfoundation -i :0  out.wav

2.4、录制音视频:

ffmpeg -f avfoundation -i 1:0  out.mp4

在这里插入图片描述
红框中,视频解码器 rawvideo,编码器mpeg4,使用命令ffmpeg -encoders 可以找到该编码器

对音频、视频指定编码器

ffmpeg -f avfoundation -i 1:0 -c:v h264 -c:a aac  -ac 2 -s 3840x2160 out.mp4

2.5、文件格式转换:

ffmpeg -i input.mp4 -c:a copy -c:v copy output.flv

-i input.mp4 输入文件input.mp4
-c:a copy 把解封装后的已编码音频数据,拷贝到输出文件
-c:v copy 把解封装后的已编码视频数据,拷贝到输出文件
output.flv 输出文件output.flv

转GIF、flv、wav等格式, 只需要修改命令中的输出名后缀,例如:output1.mp4 改为 output.gif 。wav 没有视频,只有音频,ffmpeg会自动识别后缀,并处理

2.6、提取音频 :

ffmpeg -i input.mp4 -c:a copy -vn  output.aac

-c:a copy 音频编码器,只拷贝。就是把 input.mp4 经过demuxer后,得到的编码的音频文件,直接拷贝,不用解码再编码。

-vn As an output option, disables video recording

2.7、提取视频:

ffmpeg -i input.mp4 -c:v copy -an  output.h264

提取YUV数据

ffmpeg -i input.mp4 -an  -pixel_format yuv420p out.yuv

-c:v rawvideo 指定视频编码器,rawvideo 可以通过ffmpeg -encoders 找到

2.8、合并音视频:

ffmpeg -i output.aac -i output.h264 -c:v copy -c:a copy  output.mp4

2.9、视频裁剪

时长

从1s开始,裁剪5s

ffmpeg -ss 00:00:01.000  -t 5 -i input1.mp4  output1.mp4

裁剪最后5s,不能和-ss同时用

ffmpeg  -sseof -5 -i input1.mp4  output1-2.mp4

分辨率

改变视频分辨率为宽320、高240

ffmpeg -i input.mp4 -s 320x240 output.mp4

改变视频分辨率为宽480、高度为等比缩放,像素数可被1整除

ffmpeg -i input.mp4  -filter:v "scale=480:-1,fps=10" output.mp4

scale=480:-1 宽度为480px,高度为等比缩放,像素数可被1整除
fps=10 输出帧率是10 frame per second

2.10、 倍速

视频倍速

过滤器setpts、asetpts
使用过滤器setpts,倍速播放视频

ffmpeg -i input1.mp4  -filter:v "setpts=0.2*PTS" output1-3.mp4

视频倍速播放,时长缩短,播放完就黑屏。音频播放也不太正常,中间有一段没有声音。可通过参数 -an 过滤掉音频。

过滤器asetpts 不能改变音频的速度,只能改变音频的pts,缩短整体的播放时长

ffmpeg -i input1.mp4 -vn -filter:a "asetpts=0.2*PTS" output1-3.mp4

音频倍速

使用过滤器atempo 倍速播放音频

ffmpeg -i input1.mp4  -filter:a "atempo=2" output1.mp4 

音频会加速2倍播放,时长缩短到一半, 视频正常播放,也就是说后半段视频没有音频

音视频倍速

根据map中的关于filtergraph的用法,实现音视频倍速播放

ffmpeg -i test.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4

2.11、ffmpeg.org/ffmpeg-formats.html#image2_002c-image2pipe" rel="nofollow">视频转图片:

从input.mp4 提取一系列图片

ffmpeg -i input.mp4 -r 30 -f image2 foo-%03d.jpeg

-r 30 fps 是30,表示一秒生成30张图片
foo-%03d.jpeg 文件名格式, 会生成 foo-001.jpeg、foo-002.jpeg … 等

2.12、ffmpeg.org/ffmpeg-formats.html#image2-1" rel="nofollow">图片转视频:

用一系列图片 生成一个mp4文件

ffmpeg -r 30 -i foo-%05d.jpeg output.mp4

2.13、推流:

文件推流:

ffmpeg -loglevel debug -re -stream_loop -1 -i input3.mp4 -c:v h264  -c:a aac  -ac 2 -g 30 -b:v 1500k -b:a 128k -f flv 'rtmp://xxxxx'

-re 通过限制输入的读取速度,确保推流时以与文件帧率一致的速度读取。强制 FFmpeg 模拟文件“实时播放”的行为。
如果不加 -re,FFmpeg 会以最快速度读取输入文件。这样推流的速度会远超正常播放速度,导致:
• 流媒体服务器缓冲过载。
• 推流失败,甚至崩溃。
-stream_loop -1 循环播放

-b:v 视频码率
-b:a 音频码率

问题:
推流失败, 检查流的编码格式是否符合rtmp服务器的接收格式, 通过-c:v 指定视频编码器
推流成功,可以看到画面,但是没有声音。 通过 -c:a 指定音频编码器

摄像头推流:

ffmpeg  -f avfoundation -r 30 -i 0:0   -c:v h264  -c:a aac  -ac 2 -g 30 -b:v 1500k -b:a 128k -f flv 'rtmp://xxxxxxx'

如果在输入参数中没有 -r 30, 会报如下错误。高手指点一下,为什么会出现 framerate (29.970030)
在这里插入图片描述

桌面屏幕推流:

ffmpeg  -f avfoundation   -r 30  -i 1:0  -c:v h264   -c:a aac  -ac 2 -g 30  -b:v 1500k  -b:a 128k  -s 3840x2160  -f flv 'rtmp://xxxxxxx'

-s 3840x2160 设置输出的分辨率,如果不设置默认是5120x2880,会报错Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.

在这里插入图片描述

2.14、拉流:

拉流播放:

ffplay rtmp://xxxxxx

拉流并保存文件

ffmpeg -i rtmp://xxxxxx  -c copy dump.flv

三、FFprobe 常用命令

查看格式

ffprobe -v error -show_format -show_streams input1.mp4

查看帧信息

ffprobe -show_frames -select_streams v input1.mp4 | head -n 50

查看input1.mp4的视频的帧信息的前50行


http://www.ppmy.cn/ops/152214.html

相关文章

京华春梦,守岁这方烟火人间

文章目录 准备篇温度公共交通人流情况年货采购 文化体验传统庙会博物馆与展览烟花灯会祈福仪式民俗集市现代氛围其他活动 美食盛宴传统美食与特色小吃传统老字号京城新宠特色小吃街多元美食街 准备篇 温度 北京春节期间气温较低,室外通常在零下几度到零上几度之间…

Arcgis Pro安装完成后启动失败的解决办法

场景 之前安装的Arcgis Pro 今天突然不能使用了,之前是可以使用的,自从系统更新了以后就出现了这个问题。 环境描述 Arcgis Pro 3.0 Windows 10 问题描述 打开Arcgis Pro,页面也不弹出来,打开任务管理器可以看到进程创建之后&…

CSS3 3D 转换介绍

CSS3 中的 3D 转换提供了一种在二维屏幕上呈现三维效果的方式,主要包括translate3d、rotate3d、scale3d等转换函数,下面来详细介绍: 1. 3D 转换的基本概念 坐标系 在 CSS3 的 3D 空间中,使用的是右手坐标系。X 轴是水平方向&…

【大数据】关于机器学习----------规则学习

一、基本概念 注:本博文所含流程图引用知乎博主 deephub 1. 规则学习 规则学习是从数据中自动提取出能表示数据规律的规则的机器学习方法。这些规则通常以 if-then 形式出现,可用于分类、预测和决策等任务。例如:if (feature1 > 5) and (…

MDX语言的字符串处理

MDX语言的字符串处理 引言 MDX(Multidimensional Expressions)是一种专门用于多维数据库查询和分析的语言,特别是在Microsoft SQL Server Analysis Services(SSAS)中使用广泛。MDX不仅用于查询多维数据,还…

网安快速入门之Windows命令

在Windows中 我们今天介绍几个命令&#xff1a; help copy dir cd type del ipconfig net netstat tasklist sc1. help 显示命令的帮助信息。或者显示Windows内置命令。 常用参数&#xff1a; <命令>&#xff1a;查看指定命令的帮助。 示例&#xff1a;help copy 显…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证8)

为进一步测试通过请求头传递token进行身份验证&#xff0c;在main.htm中增加layui的数据表格组件&#xff0c;并调用后台服务分页显示数据&#xff0c;后台分页查询数据接口如下所示&#xff08;测试时&#xff0c;直接将数据写死到代码中&#xff0c;没有查询数据库&#xff0…

去哪儿kafka优化案例

一、背景介绍 集群概况 去哪儿旅行当前KAFKA日志集群节点145台。单机配置&#xff1a;3TSSD盘&#xff0c;40核&#xff0c;128G内存。 业务背景 日志KAFKA集群承载了全司的APPCODE日志&#xff0c;比如我们常用的QTRACE日志&#xff0c;以及实时离线数仓数据。体量非常大。…