https://www.jianshu.com/p/c141fc7881e7
ffmpeg 常见命令功能:
查看电脑设备:
ffmpeg -list_devices true -f dshow -i dummy
测试摄像头是否可用:
ffplay -f dshow -i video="USB2.0 PC CAMERA" USB2.0 PC CAMERA为摄像头名称
或者
ffplay -f vfwcap -i 0
查看摄像头和麦克风信息:
ffmpeg -list_options true -f dshow -i video="USB2.0 PC CAMERA" USB2.0 PC CAMERA为摄像头名称
ffmpeg -list_options true -f dshow -i audio="麦克风 (2- USB2.0 MIC)"
本地视频的推流:
ffmpeg.exe -re -i demo.wmv -f flv rtmp://127.0.0.1:1935/live/123 此时ffmpeg源源不断的把视频推流至服务器,如果地址没错,
视频文件 demo.wmv 可以利用vlc或其他手段实现拉流,这里就先不解释如何拉流
摄像头推流:
ffmpeg -f dshow -i video="USB2.0 PC CAMERA"
-vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
USB2.0 PC CAMERA为摄像头名称 播放地址: rtmp://127.0.0.1:1935/live/123
麦克风推流:
ffmpeg -f dshow -i audio="麦克风 (2- USB2.0 MIC)"
-vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
麦克风 (2- USB2.0 MIC) 播放地址: rtmp://127.0.0.1:1935/live/123
声音被推流出去了,通过vlc拉流可以听到录制的声音,但很明显不会有画面
摄像头&麦克风推流:
ffmpeg -f dshow -i video="USB2.0 PC CAMERA"
-f dshow -i audio="麦克风 (2- USB2.0 MIC)"
-vcodec libx264 -preset:v ultrafast -tune:v zerolatency
-f flv rtmp://127.0.0.1:1935/live/123
或者 ( USB2.0 PC CAMERA为摄像头名称 麦克风 (2- USB2.0 MIC) 播放地址: rtmp://127.0.0.1:1935/live/123
)
ffmpeg -f dshow -i video="USB2.0 PC CAMERA":audio="麦克风 (2- USB2.0 MIC)"
-vcodec libx264 -r 25 -preset:v ultrafast -tune:v zerolatency
-f flv rtmp://127.0.0.1:1935/live/123
画面与声音源源不断的被推流到服务器,接下来我们就应该正式的开发拉流了
分离视频和音频:
ffmpeg -i input_file.mp4 -vcodec copy -an output_file.avi //只保留了视频 视频文件: input_file.mp4 输出文件: output_file.avi
ffmpeg -i input_file.mp4 -acodec copy -vn output_file.mp3 //只保留了音频 视频文件: input_file.mp4 输出文件: output_file.mp3
合并视频和音频:
ffmpeg -i input_file1.avi
-i input_file2.mp3
-vcodec copy
-acodec copy output_file.mp4
视频文件: input_file1.avi + input_file2.mp3 输出文件: output_file.mp4
选项说明:
-vcodec copy:指定复制视频数据,不对输如视频进行编解码
-acodec copy:指定复制音频数据,不对输如音频进行编解码
-an:指数去除音频数据
-vn:指定去除视频数据
-vcodec mpeg4:指定输出视频数据按照mp4格式编码
-acodec mp3:指定输出音频数据按照mp3格式编码
转换音频格式 :
ffmpeg -i input_file.mp3 -acodec g722 -ar 16k -ac 1 output_file.wav //转换MP3格式音频为用g722编码的wav格式
视频文件: input_file.mp3 输出文件: output_file.avi
列举几个生成其他音频格式的命令:
ffmpeg -i input_file.mp3 // 视频文件: input_file.mp3
-acodec g723_1 // g723标准
-ar 8k // 采样频率8kHz
-ab 6.3k // 码率为5.3kbs/6.3kbs
-ac 1
output_file.wav //g723标准要求采样频率8kHz,码率为5.3kbs/6.3kbs
ffmpeg -i input_file.mp3 // 视频文件: input_file.mp3
-acodec g726 // g726标准
-ar 8k // 采样频率8kHz
-ab 32k // 码率为40kbs/32kbs/24kbs/16kbs
-ac 1
output_file.wav //g726标准要求采样率为8k,码率为40kbs/32kbs/24kbs/16kbs
视频格式转换 :
ffmpeg -i input_file.avi -f mp4 -vcodec output_file.mp4 //转换avi格式视频为MP4格式
-f mp4:指定输出视频封装格式为MP4
-vcodec h264:指定输出视频编码格式为h264
截取图片 :(截取视频开始的图片 )
ffmpeg -i input_file.h264
-y // -y:输出文件可以覆盖已存文件
-f image2 // -f image2:输出图像文件编码为image2
-t 0.001 // -t 0.001:持续时间为0.001s
-s 420x272 // -s 420x272:输出图片分辨率420x272
output_file.jpg
合成视频 : (把连续编号的图片文件生成视频 )
ffmpeg -i input_file%d.jpg
-y // -y:输出文件可以覆盖已存文件
-f mp4 // -f mp4:输出视频文件编码为MP4
output_file.mp4
其他例子:
ffmpeg -i input_file.h264
-y
-f image2 // -f image2:输出图像文件编码为image2
-t 1 // 1s内
-s 420x272 // -s 420x272:输出图片分辨率420x272
output_file_%d.jpg
// 截取1s内所有的图像,输出文件按照顺序编号
ffmpeg -i input_file.h264
-y
-f image2
-ss 60 // 60s
-vframes 1 // 一帧
output_file.jpg
//截取60s的一帧视频图片
ffmpeg -i input_file.h264
-y
-f gif // gif
-ss 20 // 20s后
-vframes 30 // 30帧
output_file.jpg // 截取20s后的30帧图片保存为gif