brew install ffmpeg
如果需要安装第三方 options,可以如下操作:
1.执行
brew tap homebrew-ffmpeg/ffmpeg
2.执行
brew install homebrew-ffmpeg/ffmpeg/ffmpeg
3.执行如下命令,看此仓库支持哪些options。
brew options homebrew-ffmpeg/ffmpeg/ffmpeg
4.根据第3)步得到的options,替换下面命令中的option,然后执行
brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-<option1> --with-<option2> ...
- 新建下载目录
mkdir ffm && cd $_
- 下载编译源代码
git clone https://git.ffmpeg.org/ffmpeg.git
- 编译
这个步骤检查配置、依赖是否满足,注意 --prefix
参数为从 git 下载后的 ffmpeg 目录。
./configure --prefix=/Users/zxh/ffm/ffmpeg --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-videotoolbox --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --cc=clang --host-cflags= --host-ldflags=
当中可能会有很多包找不到,逐个使用 brew install
安装即可。
- yasm 找不到:brew install yasm
- fdk-aac 找不到:brew install fdk-aac
- speex 找不到:brew install speex
- pkg-config 找不到:brew install pkg-config
- libx264 找不到:brew install x264
- libx265 找不到:brew install x265
- 安装
这个步骤进行具体的安装。
make && make install
如果没有权限,使用 sudo
。
使用 shell 扩展运算符 {num1..num2}
结合 wget 命令一起使用。
wget https://www.abc.com/{1..40}.mp4
首先使用 for 循环将所有 mp4 转化为 .ts 文件,先将 mp4 转化为同样编码形式的 ts 流,因为 ts 流是可以 concate 的,先把 mp4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 mp4。
for i in {1..40}; do ffmpeg -i $i.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb $i.ts; done;
然后新建一个输入清单文件。
> list.txt
然后使用 for 循环生成 file 1.ts
描述文件。
for i in {1..40}; do echo "file $i.ts" >> list.txt; done;
最后使用合并命令合并。
ffmpeg -f concat -i list.txt -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
使用 -ss 和 -t 选项,从第0秒开始,向后截取31秒视频,并保存.
ffmpeg -ss 00:00:00 -i video.mp4 -vcodec copy -acodec copy -t 00:00:31 output1.mp4
从第01:33:30 开始,向后截取 00:47:16 视频,并保存
ffmpeg -ss 01:33:30 -i video.mp4 -vcodec copy -acodec copy -t 00:47:16 output2.mp4
抽帧,每20秒抽一帧
// 去掉视频中的音频
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
// -an: 去掉音频;-vcodec:视频选项,一般后面加copy表示拷贝
// 提取视频中的音频
ffmpeg -i input.mp4 -acodec copy -vn output.mp3
// -vn: 去掉视频;-acodec: 音频选项, 一般后面加copy表示拷贝
// 如果提示: Invalid audio stream. Exactly one MP3 audio stream is required.
// 那么需要查看视频的音频编码,在上边文件简介中可以找到,例如
// Duration: 00:01:37.96, start: 0.000000, bitrate: 750 kb/s
// Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 48 kb/s (default)
// 因此上边需要输入 output.aac
// 音视频合成
ffmpeg -y –i input.mp4 –i input.mp3 –vcodec copy –acodec copy output.mp4
// -y 覆盖输出文件
//剪切视频
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.mp4 -vcodec copy -acodec copy output.mp4
// -ss 开始时间; -t 持续时间
// 视频截图
ffmpeg –i test.mp4 –f image2 -t 0.001 -s 320x240 image-%3d.jpg
// -s 设置分辨率; -f 强迫采用格式fmt;
// 视频分解为图片
ffmpeg –i test.mp4 –r 1 –f image2 image-%3d.jpg
// -r 指定截屏频率
// 将图片合成视频
ffmpeg -f image2 -i image%d.jpg output.mp4
//视频拼接
ffmpeg -f concat -i filelist.txt -c copy output.mp4
// 将视频转为gif
ffmpeg -i input.mp4 -ss 0:0:30 -t 10 -s 320x240 -pix_fmt rgb24 output.gif
// -pix_fmt 指定编码
// 将视频前30帧转为gif
ffmpeg -i input.mp4 -vframes 30 -f gif output.gif
// 旋转视频
ffmpeg -i input.mp4 -vf rotate=PI/2 output.mp4
// 缩放视频
ffmpeg -i input.mp4 -vf scale=iw/2:-1 output.mp4
// iw 是输入的宽度, iw/2就是一半;-1 为保持宽高比
//视频变速
ffmpeg -i input.mp4 -filter:v setpts=0.5*PTS output.mp4
//音频变速
ffmpeg -i input.mp3 -filter:a atempo=2.0 output.mp3
//音视频同时变速,但是音视频为互倒关系
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4
// 视频添加水印
ffmpeg -i input.mp4 -i logo.jpg -filter_complex [0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] -map [out] -map 0:a -codec:a copy output.mp4
// main_w-overlay_w-10 视频的宽度-水印的宽度-水印边距;
// 截取视频局部
ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4
// 截取部分视频,从[80,60]的位置开始,截取宽200,高100的视频
ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
// 截取右下角的四分之一
ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4
// 截去底部40像素高度
ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
参数说明:
参数说明:
-vcodec xvid 使用xvid压缩 -s 320x240 指定分辨率 -r fps 设置帧频 缺省25 -b <比特率> 指定压缩比特
-acodec aac 设定声音编码 -ac <数值> 设定声道数,1就是单声道,2就是立体声 -ar <采样率> 设定声音采样率,PSP只认24000 -ab <比特率> 设定声音比特率 -vol <百分比> 设定音量
-y(覆盖输出文件
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持 -ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持 -title string 设置标题 -author string 设置作者 -copyright string 设置版权 -hq 激活高质量设置
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777 -croptop size 设置顶部切除带大小 像素单位 -cropbottom size -cropleft size -cropright size -padtop size 设置顶部补齐的大小 像素单位 -padbottom size -padleft size -padright size -padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色) -bt tolerance 设置视频码率容忍度kbit/s -maxrate bitrate设置最大视频码率容忍度 -minrate bitreate 设置最小视频码率容忍度 -bufsize size 设置码率控制缓冲区大小 -vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。 -sameq 使用同样视频质量作为源(VBR) -pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率 -passlogfile file 选择两遍的纪录文件名为file
-map file:stream 设置输入流映射 -debug 打印特定调试信息