FFmpeg常用命令

目录

一、获取视频信息

二、转视频/音频格式

1.视频格式转换

#mp4转flv

#h264转mp4

#mp4提取yuv

#yuv转h264

2.音频格式转换

 #mp4转aac

#mp3 转 pcm

#mp4 转 pcm

三、音视频分离

四、图像处理

五、视频旋转

六、改变视频分辨率

七、截取时间段范围

使用 -to 选项

使用 -t 选项

避免关键帧丢失并精确截取时间

八、视频倒放&视频加速&视频减速

九、视频合并(多个视频合并成同一个视频)

十、视频拼接(画面拼接)

十一、查看编解码相关

十二、图片格式转换

#jpg转yuv:

#视频转gif:

十三、接入音视频设备

#查看当前可用设备

#接入视频设备并将视频流保存为文件

#接入音频设备并保存为文件

#同时接入音视频设备并保存文件

十四、ffmpeg推流(前提:已有rtmp和rtsp服务)

#推rtmp服务

#推rtsp服务

#读取音视频设备推流到rtsp服务

十五、使用ffplay播放

#播放pcm格式音频

#播放yuv数据

#播放yuv中的Y平面

十六、使用FFMPEG分帧并保存


命令格式:

ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]

-acodec:音频选项

-vcodec:视频选项

一、获取视频信息

ffmpeg -i test.mp4

二、转视频/音频格式

1.视频格式转换

#mp4转flv

ffmpeg -i test.mp4 -f flv test.flv

或者

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

上面的命令表式的是音频、视频都直接 copy,只是将 mp4 的封装格式转成了flv。

-i: 输入文件

-vcodec copy : 视频编码处理方式,不重编解码

-acodec copy: 音频编码处理方式,不重编解码

#h264转mp4

ffmpeg -i test.h264 -f mp4 test.mp4

#mp4提取yuv

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

ffplay -s (wxh分辨率,stream中看) out.yuv

-an: a代表audio,n代表no不包括音频的

-c:v rawvideo 指定将视频转成原始数据

-pixel_format yuv420p 指定转换格式为yuv420p(4:2:0)

#yuv转h264

ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i out.yuv -c:v libx264 -f rawvideo out.h264

#-acodec copy 音频流执行copy,不重新编解码; 视频流会重新解码、编码

ffmpeg -i test.mp4 -acodec copy -f mp4 test_output.mp4

#-vcodec copy 视频流执行copy,,不重新编解码;音频流会重新解码、编码

ffmpeg -i test.mp4 -vcodec copy -f mp4 test_output.mp4

#-codec copy 音频流和视频流都不会重新解码、编码

ffmpeg -i test.mp4 -codec copy -f mp4 output.mp4

2.音频格式转换

 #mp4转aac

不重编码(可能转出的aac文件无法播放,需要重编码才能使用)

ffmpeg -i test.mp4 -vn -acodec copy test.aac

重编码

ffmpeg -i test.mp4 -vn -acodec aac test.aac

#mp3 转 pcm

#大端格式

ffmpeg -i test.mp3 -f s16be -ar 16000 -ac 1 -acodec pcm_s16be pcm16k.pcm

#小端格式

ffmpeg -i test.mp3 -f s16le -ar 16000 -ac 1 -acodec pcm_s16le pcm16k.pcm

注:s16be 大端格式,s16le 小端格式。ar:采样率,-ac:声道

#mp4 转 pcm

ffmpeg -i test.mp4 -vn -ar 44100 -ac 2 -f s16le test.pcm

播放的时候参数也要和上面一样,因为不知道你用什么采样率和声道是啥

ffplay -ar 44100 -ac 2 -f s16le -i out.pcm

-vn: v代表video,n代表不要视频

-ar: a代表audio,r代表read,采样率44100 44.1k

-ac: a代表audio,c2代表双声道还有立体声,环绕立体声

-f: 音频抽取出来的存取格式, s16 s代表有符号的,每一位16位表示

三、音视频分离

#去除音频、只留视频(-an audio no,去除音频)

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

#去除视频、只留音频(-vn video no,去除视频)

ffmpeg -i test.mp4 -acodec copy -vn output.mp4

四、图像处理

  1. 截取一段视频:

ffmpeg -i test.mp4 -ss 8 -t 2 -s 1280x720 -codec copy -f flv test1.flv

-ss 开始时间:set the start time offset,单位秒,-t 持续时间 -s 分辨率。截取原视频中从第8秒开始,持续时间2秒的视频。输出分辨率1280x720

    2.添加图片水印:

ffmpeg -i test.mp4 -vf "movie=logo.jpg[watermark];[in][watermark] overlay=100:200[out]" output.mp4

-vf 使用滤镜,movie是滤镜的一种,添加的图片是logo.jpg。overlay(覆盖):显示位置是x=100,y=200

    3.添加图片水印:

ffmpeg -i test.mp4 -i logo.jpg -filter_complex overlay test1.mp4

filter_complex 复杂滤波器 overlay:覆盖

   4.添加文字水印:

ffmpeg -i test.mp4 -vf "drawtext=fontfile=msyh.ttc: text='welcome':x=100:y=10:fontsize=24:fontcolor=yellow:shadowy=2" drawtext.mp4

fontfile 字体文件,在C:\Windows\Fonts有很多

五、视频旋转

#顺时针旋转90度(顺时针旋转90°)

ffmpeg -i test.mp4 -vf "transpose=1" out.mp4

#逆时针旋转90度(逆时针旋转90°)

ffmpeg -i test.mp4 -vf "transpose=2" out.mp4

#水平翻转视频画面:

ffmpeg -i test.mp4 -vf hflip out.mp4

#垂直翻转视频画面:

ffmpeg -i test.mp4 -vf vflip out.mp4

六、改变视频分辨率

要使用FFmpeg修改视频分辨率,可以采用以下命令:

ffmpeg -i 输入文件 -vf scale=宽度:高度 输出文件

其中,输入文件是原始视频文件的路径,输出文件是转换后的视频文件的路径。宽度高度是你想要设置的视频分辨率的尺寸。例如,如果你想要将视频分辨率改为640x360,那么命令应该是:

ffmpeg -i video_1920.mp4 -vf scale=640:360 video_640.mp4

如果只提供宽度,高度可以设置为-1,这样FFmpeg会自动计算高度以保持视频的宽高比。例如:

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

#把分辨率变成两倍,也可以*0.5变成二分之一

ffmpeg -i 文件名.mp4 -vf scale=iw*2:ih*2 文件名.mp4

七、截取时间段范围

使用 ffmpeg 截取视频的某一个时间段,可以结合以下3个选项:

-ss time_off     设置开始时间的偏移量

-to time_stop    记录或转码停止时间

-t duration      记录或转码音频视频的“持续时间”秒

使用 -ss 选项指定需要截取的开始时间,结合 -to 或者 -t。

使用 -to 选项

to 指定结束的时间点,以下命令将截取视频文件 input.mp4 从 00:00:05.000 开始,到 00:00:15.000 结束这一段视频。

ffmpeg -i input.mp4 -ss 00:00:05.000 -to 00:00:15.000 output.mp4

使用 -t 选项

t 指定持续时间,以下命令将截取视频文件 input.mp4 从 00:00:05.000 开始,持续 10 秒的一段视频。

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

避免关键帧丢失并精确截取时间

如果您需要重新编码视频以避免关键帧丢失并精确截取时间,可以使用以下命令:

ffmpeg -ss [开始时间] -t [持续时间] -i [输入文件].mp4 -c:v libx264 -c:a aac -strict experimental -b:a 98k [输出文件].mp4

八、视频倒放&视频加速&视频减速

#视频倒放、音频不变:

ffmpeg -i inputfile.mp4 -vf reverse reversed.mp4

#音视频同时倒放:

ffmpeg -i inputfile.mp4 -vf reverse -af areverse -preset superfast reversed.mp4

#视频2倍速播放:

ffmpeg -i inputfile.mp4 -vf setpts=PTS*0.5 -af atempo=2 output.mp4

说明:

-i 输入文件 指定输入文件的路径。

-vf "setpts=PTS/2" 是一个视频滤镜,用于视频的原始播放速度加快一倍。setpts滤镜设置时间戳的比例,这里设置为0.5,即2倍速。

-af "atempo=2" 是一个音频滤镜,用于将音频的播放速度加快一倍。atempo滤镜改变音频流的播放速度,这里的值是2,表示将速度加快一倍。

输出文件 指定输出文件的路径。

九、视频合并(多个视频合并成同一个视频)

#MPEG格式的(视频尺寸要一致):

ffmpeg -i concat:"1.mpg|2.mpg|3.mpg" -c copy output.mp4

#对于非MPEG格式的,可以先转成MPEG格式(mp4转MPEG格式):

ffmpeg -i 1.mp4 -qscale 4 1.mpg

 将多个mp4文件合并为一个mp4文件

1.将多个mp4文件放在同一文件夹内

2.新建video.txt文件,将要合并的文件按如下格式写入

file '01.mp4'

file '02.mp4'

file '03.mp4'

3.命令行执行即可

ffmpeg -f concat -i video.txt -c copy output.mp4

十、视频拼接(画面拼接)

#左右拼接(hstack 左右拼接, vstack 上下拼接)

ffmpeg -i test.mp4 -i test1.mp4 -lavfi hstack output.mp4

#3个视频左右拼接:

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4

十一、查看编解码相关

ffmpeg -encoders // 查看可用的编码器

ffmpeg -decoders // 查看可用的解码器

ffmpeg -hwaccels // 显示系统支持的硬件加速解码器列表

ffmpeg -demuxers // 显示系统支持的解复用器列表

十二、图片格式转换

#jpgyuv:

ffmpeg -i test.jpg -s 640x480 -pix_fmt yuv420p test.yuv

#视频转gif:

ffmpeg -i test.mp4 out.gif //直接就能转成gif

ffmpeg -i test.mp4 -ss 0 -t 2 -r 10 out.gif //截取视频中前两秒的视频转为gif,并将帧率改为10fps -r修改帧率

十三、接入音视频设备

#查看当前可用设备

ffmpeg -list_devices true -f dshow -i dummy

其中Alternative name 就是音视频设备标识。

#接入视频设备并将视频流保存为文件

命令:

ffmpeg -f dshow -i video="name" video.mp4

ffmpeg -f dshow -i video="name" -vcodec libx264 output.mp4 //指定编码器

示例:

#接入音频设备并保存为文件

命令:

ffmpeg -f dshow -i audio="name" audio.mp4

ffmpeg -f dshow -i audio="name" -acodec aac audio.mp4 //指定编码器

示例:

#同时接入音视频设备并保存文件

命令:

ffmpeg -f dshow -i video="name" -f dshow -i audio="name" audioAndVideo.mp4

示例:

十四、ffmpeg推流(前提:已有rtmp和rtsp服务)

#推rtmp服务

推一次,udp协议

ffmpeg -re -i test.mp4 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:1935/live/stream0

循环推流,tcp协议

ffmpeg -re -stream_loop -1 -i test.mp4 -rtsp_transport tcp -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:1935/live/stream0

#推rtsp服务

推一次,udp协议

ffmpeg -re -i test.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream0

循环推流,tcp协议

ffmpeg -re -stream_loop -1 -i test.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream

参数:-re 以流的方式读取 -f 为格式化输出到哪里 -stream_loop循环输入

#读取音视频设备推流到rtsp服务

ffmpeg -f dshow -i video="name" -vcodec libx264 -f rtsp rtsp://127.0.0.1:5545/live/stream

示例:

十五、使用ffplay播放

#播放pcm格式音频

必须在播放时把pcm相关参数都写明,不然会播放失败

ffplay -ar 44100 -ac 2 -f s16le -i test.pcm

#播放yuv数据

ffplay -pix_fmt nv12 -s 192x144 test.yuv

#播放yuv中的Y平面

ffplay -pix_fmt nv21 -s 640x480 -vf extractplanes='y' test.yuv

十六、使用FFMPEG分帧并保存

要将视频input.mp4分解成逐帧的PNG格式图片,并按照指定的命名格式保存,可以使用以下FFmpeg命令:

ffmpeg -i test.mp4 -vf "fps=1" data/%010d.png

命令解释:

-i test.mp4:指定输入文件。

-vf "fps=1":视频过滤器,fps=1表示每秒提取一帧。如果要提取视频的每一帧,可以省略这个过滤器参数。

%010d.png:指定输出文件的路径和格式。data/是目标文件夹(需要提前创建目录),%010d表示序列号将被格式化为十位数,前面用0填充。

如果你想提取视频的每一帧,不限制于每秒一帧,可以使用以下命令:

ffmpeg -i test.mp4 data/%010d.png

这会将test.mp4中的每一帧都保存为PNG图片在data目录下,文件名从0000000000.png开始,依次递增。

  • 41
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值