ffmpeg命令-Windows下常用最全

查询命令

|--------------|--------------------------|
| 参数 | 说明 |
| -version | 显示版本。 |
| -formats | 显示可用的格式(包括设备)。 |
| -demuxers | 显示可用的demuxers。 |
| -muxers | 显示可用的muxers。 |
| -devices | 显示可用的设备。 |
| -codecs | 显示libavcodec已知的所有编解码器。 |
| -decoders | 显示可用的解码器。 |
| -encoders | 显示所有可用的编码器。 |
| -bsfs | 显示可用的比特流filter。 |
| -protocols | 显示可用的协议。 |
| -filters | 显示可用的libavfilter过滤器。 |
| -pix_fmts | 显示可用的像素格式。 |
| -sample_fmts | 显示可用的采样格式。 |
| -layouts | 显示channel名称和标准channel布局。 |
| -colors | 显示识别的颜色名称。 |

|--------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 参数 | 说明 |
| -f fmt(输入/输出) | 强制输入或输出文件格式。 格式通常是自动检测输入文件,并从输出文件的文件扩展名中猜测出来,所以在大多数情况下这个选项是不需要的。 |
| -i url(输入) | 输入文件的网址 |
| -y(全局参数) | 覆盖输出文件而不询问。 |
| -n(全局参数) | 不要覆盖输出文件,如果指定的输出文件已经存在,请立即退出。 |
| -c [:stream_specifier] codec(输入/输出,每个流) | 选择一个编码器(当在输出文件之前使用)或解码器(当在输入文件之前使用时)用于一个或多个流。codec 是解码器/编码器的名称或 copy(仅输出)以指示该流不被重新编码。如:ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT |
| -codec [:stream_specifier]编解码器(输入/输出,每个流) | 同 -c |
| -t duration(输入/输出) | 当用作输入选项(在-i之前)时,限制从输入文件读取的数据的持续时间。当用作输出选项时(在输出url之前),在持续时间到达持续时间之后停止输出。 |
| -ss位置(输入/输出) | 当用作输入选项时(在-i之前),在这个输入文件中寻找位置。 请注意,在大多数格式中,不可能精确搜索,因此ffmpeg将在位置之前寻找最近的搜索点。 当转码和-accurate_seek被启用时(默认),搜索点和位置之间的这个额外的分段将被解码和丢弃。 当进行流式复制或使用-noaccurate_seek时,它将被保留。当用作输出选项(在输出url之前)时,解码但丢弃输入,直到时间戳到达位置。 |
| -frames [:stream_specifier] framecount(output,per-stream) | 停止在帧计数帧之后写入流。 |
| -filter [:stream_specifier] filtergraph(output,per-stream) | 创建由filtergraph指定的过滤器图,并使用它来过滤流。filtergraph是应用于流的filtergraph的描述,并且必须具有相同类型的流的单个输入和单个输出。在过滤器图形中,输入与标签中的标签相关联,标签中的输出与标签相关联。有关filtergraph语法的更多信息,请参阅ffmpeg-filters手册。 |

录制命令

1 录制视频

ffmpeg -f gdigrab -i desktop -r 30 -s 1920x1080 -c:v libx264 -f mp4 -y out.mp4 录屏整个屏幕命令

ffmpeg:这是命令行工具的名称,调用 FFmpeg 程序。

-f gdigrab:指定输入的设备类型为 gdigrab。gdigrab 是一个视频捕获设备,用于在 Windows 系统上捕获屏幕内容。

-i desktop:指定输入源为桌面。desktop 是一个特殊的输入源,表示整个桌面屏幕。

-r 30:设置帧率为每秒 30 帧。这是视频播放时每秒钟显示的帧数,影响视频的流畅度。

-s 1920x1080:设置视频的分辨率为 1920x1080 像素。这是视频的宽度和高度,决定了视频的清晰度。

-c:v libx264:指定视频编码器为 libx264。libx264 是一个开源的 H.264 编码器,用于压缩视频数据。

-f mp4:指定输出文件的格式为 MP4。这是文件的封装格式,决定了文件的扩展名和兼容性。

-y:在覆盖输出文件时不提示确认。如果输出文件 out.mp4 已经存在,这个选项会直接覆盖它,而不会提示用户确认。

out.mp4:输出文件的名称。这是最终生成的视频文件,保存在当前目录下。

Ctrl + C停止录制。

我用vlc打开我录制的文件,就可以看到我录制的页面了。

2录制音频

使用ffmpeg查看设备索引号

Windows下:ffmpeg -list_devices true -f dshow -i dummy

macOs下:ffmpeg -f avfoundation -list_devices true -i ""

Linux下:v4l2-ctl --list-devices

我的是Windows,我列举的结果如下,报错结果是在列举设备的时候遇到的错误并不影响。

这样想要捕获视频,就可以用下面的命令:

ffmpeg -f dshow -i video="HP TrueVision HD Camera" output.mp4

或者用名称代替

ffmpeg -f dshow -i video="@device_pnp_\\?\usb#vid_30c9&pid_0064&mi_00#6&5040ce6&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" output.mp4

捕获音频就可以用:

ffmpeg -f dshow -i audio="麦克风阵列 (适用于数字麦克风的英特尔® 智音技术)" output.wav 在输入的时候播放个声音录到电脑里

然后在工作目录下就会有输出文件

分解与复用命令

1 格式的转换 将mp4转为flv

ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

-i 输入文件

-vcodec copy 视频编码处理方式

-acodec copy 音频编码处理方式

举例子,将工作目录下的一个mp4转换为mov

ffmpeg -i 1egg.mp4 -vcodec copy -acodec copy outmov.mov

使用ffplay outmov.mov命令可以播放

2 将视频抽取出来 不要音频

ffmpeg -i outmov.mov -an -vcodec copy outonlyv.h264

使用ffplay outonlyv.h264进行播放

3 将音频抽取出来 不要视频

ffmpeg -i outmov.mov -acodec copy -vn outonlya.aac

使用 ffplay outonlya.aac 进行播放

处理原始数据命令

音频的原始数据是pcm,视频的原始数据是yuv。

1 Ffmpeg提取yuv数据:

ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv

-i:输入文件

-an:audio no 不处理音频

-c:v rawvideo 将视频转化为原始数据

-pixel_format 像素格式

处理完后用ffplay out.yuv是无法播放的,因为原始数据没有宽高值

使用:ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 out.yuv播放out.yuv

2 ffmpeg提取pcm数据:

ffmpeg -i input.mp4 -f s16le -acodec pcm_s16le outpcm.pcm

-i input.mp4 指定输入文件。

-f s16le 指定输出格式为16位小端的PCM数据。

-acodec pcm_s16le 指定音频编解码器使用PCM 16位小端格式。

outpcm.pcm 是输出文件的名称。

使用ffplay播放ffplay -f s16le -ar 44100 outpcm.pcm

-f s16le 指定输入文件格式为16位小端的PCM数据。

-ar 44100 指定音频的采样率,例如44100Hz,这应该与原始音频文件的采样率相匹配。

滤镜命令

音视频的处理流程:

输入文件----(解封装)----编码数据包----(解码)----解码数据帧----(编码)----编码数据包----(封装)---输出文件

滤镜的处理流程

解码数据帧---------(filter过滤)----过滤后的数据帧------(编码)----编码数据包

1 缩放:ffmpeg -i input.mp4 -vf "scale=w:h" output.mp4

·-vf 表示滤镜选项 scale是滤镜命令

·w:宽 h:高

2 旋转:ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

·transpose=1 顺时针旋转90° 0=顺时针270° 2=逆时针旋转90° 3=逆时针270°

3 模糊命令

ffmpeg -i 1egg.mp4 -vf "boxblur=10:10" output1.mp4

·Boxblur=r:p r模糊半径 p模糊程度

3 裁剪视频

ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4

· w:宽度

· h:高度

· x:裁剪区域左上角的横坐标

· y:裁剪区域左上角的纵坐标

旋转视频

ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

· transpose=1:顺时针旋转 90 度

· transpose=2:逆时针旋转 90 度

· transpose=0:水平翻转

· transpose=3:垂直翻转

裁剪与合并命令

裁剪与合并是一种特殊的滤镜命令

1 Windows下裁剪视频

ffmpeg -i input.mp4 -ss 00:00:02 -t 00:00:03 -filter:v "crop=200:150:50:20" cropvideo.mp4

-i 输入文件

-ss 设置视频开始的时间

-t 裁剪视频持续的时间

filter:v "crop=w:h:x:y" 指定裁剪区域 w是宽 h是高 x y是裁剪区域的左上角坐标

cropvideo.mp4 输出文件

使用ffplay cropvideo.mp4 播放视频

2 Windows下合并视频

·创建一个包含所有需要合并的视频文件列表的文本文件 格式如下

·使用命令合并

ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

视频与图片互转命令

ffmpeg -i input_video.mp4 -ss 00:00:03 -vframes 1 output_image.jpg

-ss 开始时间

  • vframe 1 提取一帧

ffmpeg -i input_video.mp4 -vf fps=0.5 output_%03d.jpg

fps=0.5 一秒钟0.5帧 即每2秒钟提取一帧

output_%03d.jpg 是输出文件的格式,%03d 会被替换为从001开始的数字

输出的图片就是这样的:

直播相关命令

1 推本地视频流到服务

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/streamName

·-re:按时间戳读取文件

·-c copy:使用原始编码

·-f flv:指定输出格式为FLV 后面跟的是一个rtmp服务地址

2 推桌面流到rtmp服务器

ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风 (Realtek(R) Audio)" -r 20 -vcodec libx264 -preset ultrafast -acodec aac -ac 2 -ar 44100 -ab 128k -pix_fmt yuv420p -f flv "rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_1805854332_79717982&key=123456789876543211472583695&schedule=rtmp&pflag=1"

·-f gdigrab:使用gdigrab进行屏幕捕获

·-i desktop:指定桌面作为输入

·-f dshow -i audio="麦克风 (Realtek(R) Audio)":指定音频输入设备

·-r 20:帧率为20帧/秒

·-vcodec libx264:使用H.264编码

·-preset ultrafast:编码预设为ultrafast

·-acodec aac:使用AAC编码音频

·-ac 2:音频通道数为2

·-ar 44100:音频采样率为44100Hz

·-ab 128k:音频比特率为128kbps

·-pix_fmt yuv420p:像素格式为yuv420p

·-f flv:输出格式为FLV 6

3 拉流并录制

ffmpeg -i rtmp://server/live/streamName -c copy output.flv

4 拉流并播放

ffplay rtmp://server/live/streamName

相关推荐
问道飞鱼6 小时前
【工具介绍】Ffmpeg工具介绍与简单使用
ffmpeg·视频工具
l***775211 小时前
从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
ffmpeg
ZouZou老师17 小时前
FFmpeg性能优化经典案例
性能优化·ffmpeg
aqi0019 小时前
FFmpeg开发笔记(九十)采用FFmpeg套壳的音视频转码百宝箱FFBox
ffmpeg·音视频·直播·流媒体
齐齐大魔王21 小时前
FFmpeg
ffmpeg
你好音视频1 天前
FFmpeg RTSP拉流流程深度解析
ffmpeg
IFTICing1 天前
【环境配置】ffmpeg下载、安装、配置(Windows环境)
windows·ffmpeg
haiy20111 天前
FFmpeg 编译
ffmpeg
aqi002 天前
FFmpeg开发笔记(八十九)基于FFmpeg的直播视频录制工具StreamCap
ffmpeg·音视频·直播·流媒体
八月的雨季 最後的冰吻2 天前
FFmepg--28- 滤镜处理 YUV 视频帧:实现上下镜像效果
ffmpeg·音视频