Part1 :FFmpeg简介
FFmpeg定义
FFmpeg是一款音视频编解码工具,为开发者提供了大量音视频处理接口。
FF指的是“Fast Forward”
FFmpeg历史
2000年,法国天才Fabrice Bellard开发出第一代版本
2004年,Michael Nidermayer接手
2011年,FFmpeg其中的提交者对项目管理不满意,自立门户,创建了Libav
2015年,Michael Nidermayer移植了大量的代码到FFmpeg中,并辞职,希望两个项目可以共同发展,若能合并则更好
GitHub地址:https://github.com/FFmpeg/FFmpeg
FFmpeg组成
- AVFormat:实现了大多数媒体的封装格式,包括MP4,FLV等文件封装格式,RTMP,RTSP等网络协议封装格式。
- AVCodec:实现了大多数媒体的编解码格式,支持MPEG4,AAC,H.264(AVC),H.265(HEVC),MP3
- AVFilter:一个通用的音视频,字幕等滤镜处理框架
- swscale视频图像转换计算模块:1080p转换为720或者480,或者将图像数据从YUV420p转换成YUYV.
- swresample音频计算转换模块:操作音频采样,音频通道布局转换,布局调整。
FFmpeg编解码工具ffmpeg
ffmpeg是FFmpeg源代码编译后生成的可执行程序,可以作为命令行使用。
ffmpeg主要工作流程:
- 读取数据源
- 进行音视频的解封装
- 解码每一帧音视频数据
- 编码每一帧音视频数据
- 对音视频数据重新封装
- 输出到目标
FFmpeg多媒体分析器ffprobe
包含音频,视频参数,媒体容器的参数信息。
FFmpeg编译
- windows平台编译 下载软件包 https://ffmpeg.zeranoe.com/builds/ 解压后配置环境变量 C:UsersnoneplusDesktopffmpeg-20191001-c4de49e-win64-staticbin 打开命令行 ffmpeg
Part2:常用命令
ffmpeg命令
命令格式
代码语言:javascript复制ffmpeg
[global_options]
[input_file_options] -i input_url
[actions]
[output_file_options] output_url
参数说明
代码语言:javascript复制-y 表示直接覆盖已经存在的输出文件
-n 表示若某个输出文件已经存在则退出
视频截取
代码语言:javascript复制ffmpeg -ss 00:00:20 -t 00:00:10 -i test.mp4 noneplus.mp4
-ss表示开始切割的时间,-t表示要切多少。上面就从20秒开始,切10秒钟出来。
视频格式转换
代码语言:javascript复制ffmpeg -i noneplus.mp4 noneplus.avi
提取音频流
代码语言:javascript复制ffmpeg -i output.mp4 -acodec copy -vn output.aac
-acodec表示音频编码,copy表示不改变编解码器,只是改封装器
-vn 不将视频流写到输出文件中
提取视频流
代码语言:javascript复制ffmpeg -i noneplus.mp4 -vcodec copy -an noneplus.mp4
-an 不将音频流写到输出文件中
添加音频
代码语言:javascript复制ffmpeg -i bgm.mp3 -i test.mp4 output.mp4
参数
参数名 | 作用 |
---|---|
-i filename | 输入文件 |
ffmpeg -i test1.mp4 test2.avi
转换格式mp4为avi。
参考书籍:
《FFmpeg从入门到精通》刘岐,赵文杰编著