FFMpeg
- FFmpeg/FFmpeg
- 库
- libavcodec 提供大量的编码实现
- libavformat 实现流体协议,容器格式和基本的 IO 访问
- libavutil 提供哈希, 解压等其他辅助工具
- libavfilter 提供一系列过滤器用于修改编码的视频音频
- libavdevice 提供设备捕捉和重播的访问抽象
- libswresample 实现音频混合和重新取样
- libswscale 实现颜色转换和缩放
- 工具
- ffmpeg 命令行工具用于操作转换和流媒内容
- ffplay 多媒体播放器
- ffprobe 多媒体内容分析工具
- ffserver 多媒体流体服务器用于实时广播
- 其他的一些小工具例如 aviocat, ismindex 和 qt-faststart 等
- 参考
Flags
| flag |
| ----------------------------- | --- |
| -hide_banner | |
| -vf,-filter:v <filtergraph>
| |
- 常用参数
-r 17
修改帧率-an
移除所有音频,-vn
同理-acodec copy
直接复制内容,用户修改容器格式时,-acodec copy
同理-s 324x576
修改大小-vcodec h264 -profile:v high -level 4.2
- iOS iPhone 5s 后兼容的最高 h264 压缩 来源
- 查看 h264 相关信息
ffmpeg -h encoder=libx264
-movflags +faststart
- 将部分信息添加到开头,以保证在 web 中未下载完成时也能播放
-c:v libx265 -preset medium
- h265 压缩更好,但是目前设备支持有限
-x265-params
查看可行参数
-threads
0
优化选择- 线程数
- 多线程需要取决于编码器是否支持
- 参考
- scale - by libswscale - Scaler Options
- size,s - Video size
# 安装
# macOS
brew install ffmpeg
# 显示进度
pv input.avi | ffmpeg -i pipe:0 -v warning {arguments}
# 查看支持的像素格式
ffmpeg -pix_fmts
# 查看编码选项
ffmpeg -h encoder=libvpx
# 所有帮助内容
ffmpeg -h full
# 缩放
# ========
# https://trac.ffmpeg.org/wiki/Scaling
ffmpeg -i input.jpg -vf scale=iw*.5:ih*.5 input_half.png
# 保持比例
ffmpeg -i input.jpg -vf scale=w=320:h=240:force_original_aspect_ratio=decrease output_320.png
# 可以使用 ffplay 预览
ffplay -i input.mp4 -vf scale=iw*.2:ih*.2
# 剪切
# ========
# -ss 开始时间 -t 持续时间 -to 到达时间
ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv
ffmpeg -i input.wmv -ss 30 -c copy -t 10 output.wmv
# -ss 30 -t 10 等同于 -ss 30 -to 40
ffmpeg -i input.wmv -ss 30 -c copy -to 40 output.wmv
# 裁剪
# ========
# https://ffmpeg.org/ffmpeg-filters.html#crop
ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4
# 使用 ffplay 预览
ffplay -i input.mp4 -vf "crop=in_w:in_h-40"
# 合并拆分
# 将音频重新编码为 aac
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4
# 不对其进行编码
ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv
# 替换音频流
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 output.mp4
# 分离
ffmpeg -i input.mkv -vn -c:a copy marryme.ogg
# 元数据
# ========
# 移除
# -empty_hdlr_name 1 将 handler_name 设置为空字符串
ffmpeg -i in.mov -map_metadata -1 -c:v copy -c:a copy out.mov