ffmpeg [全局选项] {[输入选项] -i input_url} ... {[输出选项] output_url} ...
# 查看解封装帮助(dhav ffmpeg4.2才有)
ffmpeg -h demuxer=dhav
ffmpeg -h demuxer=dshow
# 查看流过滤器帮助
ffmpeg -h bsf=h264_mp4toannexb
# 查看mp4封装器的选项帮助,比如movflags设置
ffmpeg -h muxer=mp4 -hide_banner
#
ffmpeg -h protocol=rtmp -hide_banner
摄像头
# windows 查看dshow设备 录制
ffmpeg.exe -hide_banner -list_devices true -f dshow -i dummy
ffmpeg -f dshow -i video="" -vcodec libx264 mycamera.mkv
# mac 查看设备 录制
ffmpeg -hide_banner -list_devices true -f avfoundation -i dummy
ffmpeg -f avfoundation -framerate 25 -i "" mycamera.mp4
ffmpeg -f avfoundation -framerate 25 -i 0 mycamera.mp4
./ffmpeg -hide_banner -f avfoundation -framerate 30 -pixel_format nv12 -i "FaceTime高清摄像头(内建)" -vcodec mpeg4 mycam.mp4
分离音视频
# 分离音频 -vn 表示禁用视频
ffmpeg -i 1.mp4 -vn -y -acodec copy 1.aac
# 分离视频 -an 表示禁用音频
ffmpeg -i 1.mp4 -an -y -vcodec copy 1.mp4
# 获取annexb格式h264裸流
ffmpeg -i 1.mp4 -c:v copy -bsf:v h264_mp4toannexb -an 1.h264
导出图片
ffmpeg -i input.mp4 -qscale:v 2 output_%03d.jpg
合并音视频
# 合并
ffmpeg -i 1.avi -i 1.mp3 -vcodec copy -acodec copy 2.avi
视频格式互转
# mp4 -> h264
ffmpeg -i 1.mp4 -vcodec copy -an -f h264 1.h264
# main/baseline/high - 无b帧,
ffmpeg -i 1.mp4 -vcodec libx264 -profile:v main -pix_fmt yuv420p -s 640x480 -an 2.mp4
ffmpeg -i 1.mp4 -vcodec libx264 -bf 0 -acodec copy 2.mp4
ffmpeg -i 1.mp4 -vcodec libx264 -x264opts "bframes=0" -an 2.mp4
#
ffmpeg -i 1.mp4 -c copy -f hls -hls_playlist_type vod -hls_time 6 -hls_flags single_file 2.m3u8
音频格式互转
# aac to pcm
ffmpeg -y -i 1.aac -acodec pcm_s16le -f s16le -ac 2 -ar 44100 1.pcm
ffmpeg -y -i 1.m4a -acodec pcm_f32le -f f32le -ac 2 -ar 44100 1.pcm
# pcm to aac
ffmpeg -y -acodec pcm_s16le -f s16le -ac 2 -ar 44100 -i 1.pcm 1.aac
# mp3 to aac
ffmpeg -hide_banner -i libai.mp3 -acodec aac libai.aac
视频操作
# 截图一段视频(从10s开始30s长的视频)
ffmpeg -i 1.mp4 -ss 10 -t 30 1_clip.mp4
# 添加字幕(未验证)
ffmpeg -i 1.avi -vf subtitles=titles.srt 1_srt.mp4
音频操作
图像缩放
ffmpeg -s 480x272 -pix_fmt yuv420p -i src01_480x272.yuv -sws_flags bilinear
-s 1280x720 -pix_fmt yuv420p src01_bilinear_1280x720.yuv
ffmpeg -s 480x272 -pix_fmt yuv420p -i src01_480x272.yuv -sws_flags bicubic
-s 1280x720 -pix_fmt yuv420p src01_bicubic_1280x720.yuv
ffmpeg -s 480x272 -pix_fmt yuv420p -i src01_480x272.yuv -sws_flags neighbor
-s 1280x720 -pix_fmt yuv420p src01_neighbor_1280x720.yuv
滤镜
# 模糊
ffmpeg -i 1.mp4 -vf boxblur=1.5:1 2.mp4
ffmpeg -i 1.mp4 -vf -vf smartblur=5:0.8:0 2.mp4
# 降噪
ffmpeg -i 1.mp4 -vf mp=denoise3d output.mp4
ffmpeg -i 1.mp4 -vf hqdn3d output.mp4
# 色彩空间或色域
ffmpeg -i 1.mp4 -vf "scale=in_color_matrix=bt709:out_color_matrix=bt601" output.mp4
-h full 显示所有帮助
-hide_banner 隐藏每次打印的banner
-devices 显示所有输入输出设备
-formats -demuxers -muxers 列表出所有demuxer和muxer、demuxer、muxer
-codecs -encoders -decoders 列表出所有编解码器、编码器、解码器
-hwaccels 列表出所有支持硬件加速
-pix_fmts 显示所有像素格式
-sample_fmts 显示所有采样格式
-bsfs (h264_mp4toannexb) 显示所有比特流过滤器
-protocols 显示所有支持的输入输出协议
-filters 显示所有音视频滤镜
-layouts 显示音频通道布局
主要参数
-f 输入输出格式
-y/-n 覆盖/不覆盖输出文件
-c/-codec 常见-c:v、c:v:1 libx264
-ss 起点时间,单位秒,或者00:00:00
-t 输入输出时间段
-to 读到写到的时间点
-metadata 添加元信息 -metadata title="mytitle"或 -metadata:s:a:0 language=ger
视频参数
音频参数
播放指定格式音视频(-loop 0表示一直循环)
# 播放pcm音频
ffplay -ar 16000 -channels 1 -f s16le -i xxx.pcm
ffplay -ar 16000 -ac 1 -f s16le -i xxx.pcm
播放带滤镜音视频
# 视频播放速度加快两倍(只加速视频,不加速音频)
ffplay -i input.mp4 -vf setpts=PTS/2
# 音频播放速度加快两倍
ffplay -i input.mp3 -af atempo=2
# 翻转
ffplay -i input.mp3 -vf hflip
ffplay -i input.mp3 -vf vflip
# 旋转
ffplay -i input.mp3 -vf transpose=1
摄像头和桌面
ffplay -f dshow -i video=""
ffplay -f gdigrab -i desktop
ffplay -f avfoundation -framerate 25 "FaceTime HD Camera"
ffplay -f avfoundation -framerate 25 "Capture screen 0"
# 指定索引 视频 音频
ffplay -f avfoundation -framerate 25 0
ffplay -f avfoundation -framerate 25 :0
# 视频和音频一起录制
ffplay -f avfoundation -framerate 25 -capture_cursor 1 "0:0"
播放网络地址
ffplay rtsp://yuan:[email protected]
# 显示流信息
ffprobe.exe -of xml -show_streams test.dav
# 查看是否含有B帧
ffprobe -v quiet -show_frames -select_streams v test.mp4 | find "pict_type=B"
#
ffprobe -show_format -show_streams libai.aac
ffmpeg文档