FFmpeg系列(一)—— FFmpeg常用命令总结

文章目录

  • 1、ffplay命令
      • 1.1 ffplay播放控制:
      • 1.2 ffplay播放选项
      • 1.3 ffplay常用媒体播放命令举例
      • 1.4 ffplay过滤器
  • 2、ffmpeg命令
      • 2.1 ffmpeg选项
      • 2.2 ffmpeg提取像素格式举例
      • 2.3 ffmpeg转封装举例
      • 2.4 视频裁剪拼接、图片与视频转换
      • 2.5 ffmpeg过滤器

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)的位置显示播放。

你可能感兴趣的:(ffmpeg,音视频)