★,°:.☆( ̄▽ ̄)/$:.°★
这篇文章主要介绍FFmpeg音视频库。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路
ffmpeg官网:http://www.ffmpeg.org/
FFmpeg
是一款开源的音视频库,提供了处理音视频文件、转码、解码、编码、播放等功能。它是一个完整的跨平台解决方案,支持多种音视频格式,并提供多种API和工具来处理音视频数据。
FFmpeg框架的基本组成包括:AVFormet
封装模块、AVCodec
编解码模块、AVFilter
滤镜模块、AVDevice
、AVUtil
等模块库。
下面简单介绍一些FFmpeg库的基础知识:
- 编码器与解码器
FFmpeg提供了多种编码器和解码器来处理不同的音视频格式,例如H.264、MPEG-4、AAC等。可以使用avcodec_find_encoder和avcodec_find_decoder函数查找可用的编码器和解码器,并使用avcodec_open2函数打开需要使用的编码器或解码器。
- 格式封装与解封装
FFmpeg可以处理多种音视频文件格式,例如MP4、AVI、WAV等。它使用封装格式来将音视频流打包到一个容器中。常见的封装格式有MP4、AVI、FLV、MKV等。可以使用avformat_open_input函数打开音视频文件,并使用av_read_frame函数读取文件中的音视频数据。
- 帧与数据包
在FFmpeg中,音视频数据被组织成帧和数据包。音频数据通常被组织成PCM数据,每个样本对应一帧数据;而视频数据则被组织成一系列关键帧和非关键帧。
- 协议
FFmpeg可以处理不同的音视频流传输协议,例如RTSP、RTMP、HTTP等。可以使用avformat_open_input函数打开网络音视频流,并使用av_read_frame函数读取数据包。
下面进行环境配置:
# apt安装
sudo apt install ffmpeg
ffmpeg -version
# 也可选择源码安装
采集摄像头:
ffmpeg -f video4linux2 -s 640x480 -pixel_format yuyv422 -i /dev/video0 out.mp4 -loglevel debug
ffmpeg -f x11grab -framerate 25 -video_size 1280*720 -i :0.0 out.mp4 # 采集x11桌面
视频格式转换:
ffmpeg -i input.avi output.mp4
帧率转换:
ffmpeg -i input.avi -r 24 output.mp4
多路视频拼接命令行:
# 两路视频横向拼接
ffmpeg -i out1.mp4 -i out2.mp4 -filter_complex "[0:v]pad=iw*2:ih*1[a];[a][1:v]overlay=w" out.mp4
# 两路视频纵向拼接
ffmpeg -i out1.mp4 -i out2.mp4 -filter_complex "[0:v]pad=iw:ih*2[a];[a][1:v]overlay=0:h" out.mp4
# 三路视频横向拼接
ffmpeg -i out1.mp4 -i out2.mp4 -i out3.mp4 -filter_complex "[0:v]pad=iw*3:ih*1[a];[a][1:v]overlay=w[b];[b][2:v]overlay=2.0*w" out.mp4
# 三路视频纵向拼接
ffmpeg -i out1.mp4 -i out2.mp4 -i out3.mp4 -filter_complex "[0:v]pad=iw:ih*3[a];[a][1:v]overlay=0:h[b];[b][2:v]overlay=0:2.0*h" out.mp4
# 四路视频2X2排列
ffmpeg -i out1.mp4 -i out2.mp4 -i out3.mp4 -i out4.mp4 -filter_complex "[0:v]pad=iw*2:ih*2[a];[a][1:v]overlay=w[b];[b][2:v]overlay=0:h[c];[c][3:v]overlay=w:h" out.mp4
视频推流:
ffmpeg -r 100 -i /dev/video0 -f flv udp://192.168.111.121:9666
ffplay -max_delay 10 udp://192.168.111.121:9666
# 原始音视频推流
ffmpeg -f alsa -ar 11025 -ac 2 -i hw:0 -i /dev/video0 -f flv udp://192.168.111.121:9666
音频格式转换:
ffmpeg64 -i null.ape -ar 44100 -ac 2 -ab 16k -vol 50 -f mp3 null.mp3
注:-i代表输入参数
-acodec aac(音频编码用AAC)
-ar 设置音频采样频率
-ac 设置音频通道数
-ab 设定声音比特率
-vol <百分比> 设定音量
# 或创建list包含所需音频
ffmpeg -safe 0 -f concat -i list.txt -c copy out.wav
音频拼接:
# 新建列表,包含所需音频
touch list.txt
file '1.mp3'
file '2.mp3'
ffmpeg -f concat -i list.txt -c copy out.mp3
音频录制:
ffmpeg -y -f alsa -i hw:0 -t 00:00:03 -ar 8000 -ac 1 out.mp3
音频推流:
ffmpeg -f alsa -i hw:0 -ar 11025 -ac 1 -f flv udp://192.168.111.121:9666
其他参考:
视频播放器的实现:http://t.csdn.cn/N6Vuo
音视频播放器实现:http://t.csdn.cn/zJuXn
通过opencv读取摄像头:http://t.csdn.cn/mGCog
推送摄像头 rtsp 流:http://t.csdn.cn/YrLMm
视频播放器项目Github地址:https://github.com/pockethook/player.git
视频播放器项目主要使用FFmpeg做视频编解码,用SDL做渲染。
编译运行:
make
./player xxx.mp4
以上。