…
1. 编译
ffmpeg 依赖 x264
1 | !/bin/bash |
2. ffmpeg
2.1. 基本使用
1 | ffmpeg {1} {2} -i {3} {4} {5} |
5部分依次是:
- 全局参数
- 输入文件参数
- 输入文件
- 输出文件参数
- 输出文件
ffmpeg
-y \ # 全局参数
-c:a libfdk_aac -c:v libx264 \ # 输入文件参数
-i input.mp4 \ # 输入文件
-c:v libvpx-vp9 -c:a libvorbis \ # 输出文件参数
output.webm # 输出文件
2.2. 文件封装格式
File formats:
D. = Demuxing supported
.E = Muxing supported
编解码器
Codecs:
D….. = Decoding supported
.E…. = Encoding supported
..V… = Video codec
..A… = Audio codec
..S… = Subtitle codec
…I.. = Intra frame-only codec
….L. = Lossy compression
…..S = Lossless compression查看支持的音频编码
1
ffmpeg -codecs | grep ' ..A' |less
2.3. 推流
- 这个不再处理视频流, 只会抽取其中的视频流,消耗较少
ffmpeg -re -i /home/suntus/media_upgrade/tests/logicno6.mp4 -codec copy -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
ffmpeg -stream_loop -1 -re -i /home/suntus/media_upgrade/tests/logicno6.mp4 -codec copy -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
-stream_loop -1 中 -1 表示无限循环;0表示 不循环
重新编解码视频,在10.68.6.113上消耗CPU较大, 不会满速(0.3x左右)
ffmpeg -re -i /home/suntus/media_upgrade/tests/logicno6.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test推 rtmp
ffmpeg -stream_loop -1 -re -i /home/suntus/media_upgrade/tests/logicno6.mp4 -codec copy -f flv rtmp://127.0.0.1/live/test
2.4. 转码
g711a 转 aac
1 | ffmpeg -acodec pcm_alaw -i "${f_input}" -movflags faststart -vcodec copy -acodec aac "${f_output}" |
g711u 转 aac
1 | ffmpeg -acodec pcm_mulaw -i "${f_input}" -movflags faststart -vcodec copy -acodec aac "${f_output}" |
3. ffprobe
3.1. 探测文件格式
1 | ffprobe -show_streams -show_format http://10.68.6.113/live/test/hls.m3u8 |
4. ffplay
基于 ffmpeg 和 SDL 的播放器
4.1. 播放g711音频
1 | ffplay -i test.pcm -f s16le -ac 1 -ar 8000 |
4.2. 播放 http-flv 视频流
1 | 查看详细的播放信息 |