文章目录
1、ffplay命令
ffplay命令主要用来播放视频
1.1 ffplay播放控制:
使用ffplay播放视频时,可以使用以下快捷键控制视频播放
选项 | 说明 | 选项 | 说明 |
---|---|---|---|
q,ESC | 退出播放 | t,c | 循环切换字幕 / 节目流 |
f,左键双击 | 全屏 | w | 循环切换过滤器或显示模式 |
p | 暂停 | s | 逐帧播放 |
m | 静音 | left / right | 向后 / 向前拖动10秒 |
9,0 | 减少和增加音量 | down / up | 向后 / 向前拖动1分钟 |
a,v | 循环切换音频 / 视频流 | 右击 | 拖动到指定百分比播放位置 |
1.2 ffplay播放选项
选项 | 说明 | 举例 |
---|---|---|
-i | 设置输入流 | ffplay -i a.mp4 |
-x,-y | 强制以指定宽度或高度播放 | ffplay -x 100 -y 480 a.flv |
-t | 从头开始播放指定长度,如只播放前10s | ffplay -t 10 a.mp4 |
-ar,-ac | 设置采样频率和声道数 | ffplay -ar 48000 -ac 2 -f f32le a.pcm |
-an,-vn,-sn | 不播放音频或视频或字幕 | ffplay a.mp4 -an |
-acodec, -vcodec, -scodec | 强制使用设置的音频 / 视频/字幕解码器进行解码 | ffplay -vcodec h264 a.mp4 |
-pixel_format | 以指定的像素格式播放 | ffplay -pixel_format yuv420p a.flv |
-window_title | 设置窗口标题(默认为输入文件名) | ffplay -window_title hello a.mp4 |
-exitonkeydown | 键盘按下任何键退出播放 | ffplay -exitonkeydown a.mp4 |
-autoexit | 视频播放完毕后退出 | ffplay -autoexit a.mp4 |
-video_size size | 设置显示帧存储帧尺寸 ,仅适用没有包含帧大小的视频(如YUV) | ffplay -video_size 320x240 a.yuv |
-loop | 设置播放循环次数 | ffplay -loop 2 a.mp4 |
-framedrop | 如果视频不同步则丢弃视频帧。主时钟非视频时钟时默认开启。 | 若需禁用则使用 noframedrop |
更多命令请参考:http://www.ffmpeg.org/ffplay.html
1.3 ffplay常用媒体播放命令举例
功能 | 举例 |
---|---|
播放本地文件 | ffplay -window_title “test time” -ss 2 -t 10 -autoexit test.mp4 |
播放网络流 | ffplay -window_title “rtmp stream” rtmp://202.69.69.180:443/webcast/bshdlive pc |
播放YUV数据 | ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 test.yuv |
播放RGB数据 | ffplay -pixel_format rgb24 -video_size 320x240 -i test.rgb |
播放PCM数据 | ffplay -ar 48000 -ac 2 -f f32le test.pcm |
1.4 ffplay过滤器
功能 | 命令 |
---|---|
音频倍速播放 | ffplay -i test.mp4 -af atempo=2 |
视频倍速播放 | ffplay -i test.mp4 -vf setpts=PTS/2 |
音视频同时倍速播放 | ffplay -i test.mp4 -vf setpts=PTS/2 -af atempo=2 |
2、ffmpeg命令
ffmpeg命令主要用来做音视频编码,音视频格式转换
2.1 ffmpeg选项
选项 | 说明 |
---|---|
-i,-f,-ss,-t | 输入流,输出格式(默认根据后缀自动判断),开始时间,时间长度。 eg:ffmpeg -i a.mp4 -codec copy -ss 10 -t 20 -f flv a.flv |
-aframes,-vframes | 设置要输出的音频 / 视频帧数。 |
-b:a,-b:v,-b | 音频码率 / 视频码率 / 音视频码率(比特率) |
-r | 设定视频帧速率(1秒多少帧) |
-s | 设置画面的宽高(用于分辨率转换) |
-acodec,-vcodec | 音频 / 视频编码器,设置copy表示原始编解码数据必须被拷贝。 |
-an,-vn | 不处理音频 / 视频 |
-af,-vf | 音频 / 视频过滤器 |
-aspect | 设置播放时的横纵拉伸比 |
示例1:ffmpeg - i test.mp4 -vframes 300 -b:v 300k -r 30 -s 600x480 -aspect 16:9 -vcodec libx265 out.h265
说明:输入文件为test.mp4,输出总帧数300,视频码率300k,帧速率30,画面宽高640*480,显示横纵拉伸比16:9,视频编码器为H265,输入文件名out.h265;整个命令就是把mp4的视频文件转换成h265格式的视频文件。
示例2:ffmpeg -i test.mp4 -acodec copy -vn audio.mp3
说明:提取音频数据,保持原有的封装格式
更多选项请参考:http://www.ffmpeg.org/ffmpeg.html
2.2 ffmpeg提取像素格式举例
功能 | 命令 |
---|---|
提取 3 秒YUV数据,分辨率和源视频一致 | ffmpeg -i a.mp4 -t 3 -pix_fmt yuv420p out.yuv |
提取 3 秒YUV数据,分辨率转为 320x240 | ffmpeg -i a.mp4 -t 3 -pix_fmt yuv420p -s 320x240 out.yuv |
提取 3 秒RGB数据,分辨率转为 320x240 | ffmpeg -i a.mp4 -t 3 -pix_fmt rgb24 -s 320x240 out.rgb |
RGB 和 YUV 之间的转换 | ffmpeg -s 320x240 -pix_fmt yuv420p i a.yuv -pix_fmt rgb24 out.rgb |
提取PCM数据 | ffmpeg -i a.mp3 -ar 48000 -ac 2 -sample_fmt s16 out.wav |
2.3 ffmpeg转封装举例
功能 | 命令 |
---|---|
保持编码格式 | ffmpeg -i test.mp4 -codec copy out.ts //根据后缀自动选择格式 |
改变编码格式 | ffmpeg -i a.mp4 -vcodec libx265 -acodec libmp3lame out.mkv |
mp4转ts | ffmpeg -i a.mp4 -codec copy -vbsf h264_mp4toannexb out.ts //vbsf是为了做兼容 |
修改帧率 | ffmpeg -i a.mp4 -r 15 out.mp4 //每秒15帧 |
修改音视频码率 | ffmpeg -i a.mp4 -b:v 400k -b:a 192k out.mp4 |
修改视频分辨率 | ffmpeg -i a.mp4 -s 480x270 out.mp4 |
修改音频采样率 | ffmpeg -i a.mp4 -ar 44100 out.mp4 |
2.4 视频裁剪拼接、图片与视频转换
功能 | 命令 | 说明 |
---|---|---|
视频裁剪 | ffmpeg -i a.mp4 -ss 00:05:00 -t 10 -codec copy out.mp4 | 从第5分钟开始视频裁剪10秒的视频 |
ts视频拼接 | ffmpeg -f concat -i ts.txt -codec copy out.mp4 | 推荐使用ts格式进行拼接 |
截取1张图片 | ffmpeg -i a.mp4 -y -f image2 -ss 00:00:05 -vframes 1 -s 640x360 out.jpg | 从第5秒开始截一张图,-y覆盖同名图片 |
截取5张图片 | ffmpeg -i a.mp4 -t 5 -s 640x360 -r 10 out%03d.jpg | %03d表示三位数的整数 |
图片转视频 | ffmpeg -f image2 -i out%03d.jpg -r 5 video.gif | 将out开头的五张图片转成MP4视频 |
注:视频拼接的ts.txt文件里面存放的是要拼接的视频文件列表,一个文件写一行,格式为file ‘1.ts’。
2.5 ffmpeg过滤器
裁剪视频:ffplay -i input.mp4 -vf crop=iw/3:ih:iw/3*2:0
说明:crop后面的参数依次为:裁剪区域的宽和高,以及裁剪区域左上角坐标值x, y,上面这条命令功能为:裁剪掉左侧2/3,只保留右侧的1/3的视频
添加文字水印:ffplay -i a.mp4 -vf “drawtext=fontsize=50:fontfile=FreeSerif.ttf:text=‘hello world’:fontcolor=green:x=400:y=200:alpha=0.3”
说明:-vf是视频过滤器,上面这条命令功能为:在视频(400, 200)位置显示一个hello world的文字水印,字体大小50,颜色为绿色,透明度为0.3
添加图片水印:ffplay -i a.mp4 -vf “movie=logo.png[watermark];[in][watermark]overlay=x=10:y=10[out]” out.mp4
说明:在视频左上角(10, 10)位置显示一张图片水印
画中画:ffplay -i a.mp4 -vf “movie=b.mp4[sub];[in][sub]overlay=x=20:y=20[out]”
说明:a.mp4作为主视频播放,b.mp4作为画中画在屏幕左上角(20, 20)的位置显示播放。