FFmpeg 常用到的命令
1. windows 配置 ffmpeg
下载地址:
将下载的压缩包解压放在: D:\SoftWare\ffmpeg
将 "D:\SoftWare\ffmpeg\bin" 添加到Windows环境变量
通过在CMD中运行 ffmpeg --version 命令来查看是否安装成功
2. 显式视频的细节
ffmpeg -i vedio.mp4
// 通过 -hide_banner 隐藏 ffmpeg 标语及细节, 只显示媒体文件的信息
ffmpeg -hide_banner -i vedio-down.mp4
3. 视频文件格式的转换
// 在常用的视频格式之间转换如: .avi .mp4 .rmvb .3gp .mpeg .wmv .flv
ffmpeg -i vedio-down.mp4 vedio-down.avi
ffmpeg -i vedio-down.avi vedio-down.flv
//
// 通过 -qscale 0 参数设置维持源视频文件的质量
ffmpeg -i vedio-down.flv -qscale 0 vedio-down01.mp4
//
// 检查 ffmpeg 支持的格式
ffmpeg -formats
4. 提取视频中的音频(去掉视频)
// 参数说明:
// -vn : 不处理视频
// -an : 不处理音频
// -ar : 设定采样率 常用的值是22050 Hz、44100 Hz、48000 Hz
// -ac : 设定声音的通道数目
// -acodec : 设定声音编解码器,未设定时则使用与输入流相同的编解码器
// -vcodec : 设定视频编解码器,未设定时则使用与输入流相同的编解码器
// -ab : 表明音频比特率
// -f : 输出文件格式 如: mp3
ffmpeg -i out-countdown.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 start.mp3
// 或者
ffmpeg -i out-countdown.mp4 -vn -acodec copy start.mp3
5. 提取视频中的视频(去掉音频)
// 参数说明同上
ffmpeg -i out-countdown.mp4 -an -vcodec copy start.mp4
6. 更改视频的分辨率
// 将vedio-down.mp4的分辨率设置为1920:1080的分辨率
ffmpeg -i vedio-down.mp4 -filter:v scale=1920:1080 -c:a copy output-down.mp4
// 将vedio-down.mp4的分辨率设置为640:480的分辨率
ffmpeg -i vedio-down.mp4 -filter:v scale=640:480 -c:a copy output-down.mp4
7. 压缩视频文件
// 压缩视频就是意味着损失视频质量
ffmpeg -i vedio.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 vedio-out.mp4
8. 压缩音频文件
// 和视频一样,也会有损失
ffmpeg -i start.mp3 -ab 128 start-out.mp3
9. 设置视频的屏幕显式比例
// -aspect : 设置视频文件的屏幕显式比例
// 常用的比例: 16:9, 4:3, 16:10, 2.21:1, 2.35:1, 5:4, 2.39:1 等等
ffmpeg -i start.mp4 -aspect 16:9 out-start16_9.mp4
10. 给视频添加logo
// 将logo.png 放在当前文件夹
ffmpeg -i start.mp4 -i logo.png -filter_complex overlay out-image-start.mp4
11. 剪切媒体文件的某一段
// 如: 将时长25秒的十秒倒计时视频剪切为五秒倒计时
// 参数说明:
// -ss : 视频剪切的来时时间
// -t : 总的持续时间
// vedio
ffmpeg -i start.mp4 -ss 00:00:00 -codec copy -t 13 output.mp4
// audio
ffmpeg -i numb.mp3 -ss 00:00:00 -t 00:01:29 mid-numb.mp3
12. 将一个视频文件分为多个部分
// 将一个视频分成两个
ffmpeg -i start.mp4 -t 00:00:12 -c copy part01.mp4 -ss 00:00:12 -codec copy part02.mp4
13. 将多个视频拼接成一个视频
// 今天将一个15S的视频合并成3分钟的视频
// 第一步: 将源视频包装进TS格式的容器在进行合并
ffmpeg -i mid01.mp4 - copy -bsf:v h264_mp4toannexb -f mpegts mid01.ts
// 剩下的11个和上面的一样; 也可以写个脚本来完成呀
//
// 第二步: 编写 filelist.txt, 其每一行内容是
file 'mid01.ts'
file 'mid02.ts'
//...
// 第三步: 执行命令合成视频
ffmpeg -f concat -i filelist.txt -c copy down-output.mp4
14. 给一个视频添加指定的音频
// 第一步: 通过 11 条的命令来剪切视频到指定的长度
//
// 第二步: 通过 5 将源视频的音频去掉
ffmpeg -i start.mp4 -c:v copy -an start-no-audio.mp4
//
// 第三步: 将音频混到上面的视频中
ffmpeg -i start-no-audio.mp4 -i audio.mp4 -vcodec copy -acodec copy start-OK.mp4
15. Linux下, 将摄像头实时视频录制并保存为文件
ffmpeg -f video4linux -s 320*240 -r 10 -i /home/jeff/video output.mp4
16. 音视频变速
// video 加速
ffmpeg -i start.mp4 -filter:v setpts=0.5*PTS slow-start.mp4
// audio 变速
ffmpeg -i input.mp3 -filter:a atempo=2.0 output.mp3
17. 常用的OPTIONS 选项
17.1 获得帮助:
| 参数 |
说明 |
| -h |
打印基本选项 |
| -h long |
打印更多选项 |
| -h full |
打印所有选项(包括所有格式和编解码器特定的选项,很长) |
| -h type=name |
打印命名的解码器/编码器/解复用器/ muxer /过滤器/ bsf的所有选项有关选项的详细说明,请参见man ffmpeg |
17.2 打印帮助/信息/功能:
| 参数 |
说明 |
| -L |
显式执照 |
| -h topic |
显示帮助 |
| -? topic |
显示帮助 |
| -help topic |
显示帮助 |
| --help topic |
显示帮助 |
| -version |
显示版本 |
| -buildconf |
显示构建配置 |
| -formats |
显示可用格式 |
| -muxers |
显示可用的muxers |
| -demuxers |
显示可用的多路分解器 |
| -devices |
显示可用设备 |
| -codecs |
显示可用的编解码器 |
| -decoders |
显示可用的解码器 |
| -encoders |
显示可用的编码器 |
| -bsfs |
显示可用的位流过滤器 |
| -protocols |
显示可用协议 |
| -filters |
显示可用的过滤器 |
| -pix_fmts |
显示可用的像素格式 |
| -layouts |
显示标准的频道布局 |
| -sample_fmts |
显示可用的音频样本格式 |
| -colors |
显示可用的颜色名称 |
| -sources device |
列出输入设备的来源 |
| -sinks device |
列出输出设备的接收器 |
| -hwaccels |
显示可用的硬件加速方法 |
17.3 全局选项(影响整个程序,而不仅仅是一个文件):
| 参数 |
说明 |
| -loglevel loglevel |
设置日志记录级别 |
| -v loglevel |
设置日志记录级别 |
| -report |
生成报告 |
| -max_alloc bytes |
设置单个分配块的最大大小 |
| -y |
覆盖输出文件 |
| -n |
从不覆盖输出文件 |
| -ignore_unknown |
忽略未知的流类型 |
| -filter_threads |
非复杂过滤器线程的数量 |
| -filter_complex_threads |
-filter_complex的线程数 |
| -stats |
在编码过程中打印进度报告 |
| -max_error_rate maximum error rate |
最大错误率的错误率(0.0:无错误,1.0:100%错误),高于此比率ffmpeg将返回错误而不是成功。 |
| -bits_per_raw_sample number |
设置每个原始样本的位数 |
| -vol volume |
更改音频音量(256 =正常) |
17.4 每个文件的主要选项:
| 参数 |
说明 |
| -f fmt |
强制格式 |
| -c codec |
编解码器名称 |
| -codec codec |
编解码器名称 |
| -pre preset |
预设名称 |
| -map_metadata outfile[,metadata]:infile[,metadata] |
设置infile中outfile的元数据信息infile |
| -t duration |
记录或转码音频/视频的“持续时间”秒 |
| -to time_stop |
记录或转码停止时间 |
| -fs limit_size |
设置限制文件大小(以字节为单位) |
| -ss time_off |
设置开始时间偏移 |
| -sseof time_off |
设置相对于EOF的开始时间偏移 |
| -seek_timestamp |
使用-ss按时间戳启用/禁用查找 |
| -timestamp time |
设置录制时间戳(“现在”设置当前时间) |
| -metadata string=string |
添加元数据 |
| -program title=string:st=number... |
添加具有指定流的程序 |
| -target type |
指定目标文件类型(带有可选前缀“ pal-”,“ ntsc-”或“ film-”的“ vcd”,“ svcd”,“ dvd”,“ dv”或“ dv50”) |
| -apad |
音频垫 |
| -frames number |
设置要输出的帧数 |
| -filter filter_graph |
设置流filtergraph |
| -filter_script filename |
从文件中读取流filtergraph描述 |
| -reinit_filter |
输入参数更改时重新初始化filtergraph |
| -discard |
丢弃 |
| -disposition |
处置 |
17.5 视频选项:
| 参数 |
说明 |
| -vframes number |
设置要输出的视频帧数 |
| -r rate |
设置帧速率(Hz值,分数或缩写) |
| -s size |
设置帧大小(WxH或缩写) |
| -aspect aspect |
宽高比设置的宽高比(4:3、16:9或1.3333、1.7777) |
| -bits_per_raw_sample number 设置每个原始样本的位数 |
| -vn |
禁用视频 |
| -vcodec codec |
强制视频编解码器(“复制”以复制流) |
| -timecode hh:mm:ss[:;.]ff |
设置初始TimeCode值 |
| -pass n |
选择通行证编号(1至3) |
| -vf filter_graph |
设置视频过滤器 |
| -ab bitrate |
音频比特率(请使用-b:a) |
| -b bitrate |
视频比特率(请使用-b:v) |
| -dn |
禁用数据 |
17.6 音频选项:
| 参数 |
说明 |
| -aframes number |
设置要输出的音频帧数 |
| -aq quality |
设置音频质量(特定于编解码器) |
| -ar rate |
设置音频采样率(以Hz为单位) |
| -ac channels |
设置音频频道数 |
| -an |
禁用音频 |
| -acodec codec |
强制音频编解码器(“复制”以复制流) |
| -vol volume |
更改音频音量(256 =正常) |
| -af filter_graph |
设置音频过滤器 |
17.7 字幕选项:
| 参数 |
说明 |
| -s size |
设置帧大小(WxH或缩写) |
| -sn |
禁用字幕 |
| -scodec codec |
强制字幕编解码器(“复制”以复制流) |
| -stag fourcc/tag |
强制字幕tag/fourcc |
| -fix_sub_duration |
修复字幕的持续时间 |
| -canvas_size size |
设置画布大小(WxH或缩写) |
| -spre preset |
将字幕选项设置为指示的预设 |
18. 未完, 目前这些已经够我用了, 用到在学习