Homebrew
# 官网安装方式
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 懒人包安装方式(推荐)
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
Cakebrew
# Homebrew GUI Cakebrew
brew cask install cakebrew
Ffmpeg
# 需先安装Homebrew
brew install ffmpeg
# 查看版本
ffmpeg -version
ffprobe多媒体流分析工具
ffprobe output.mp4
# 以 JSON 格式显示每个流的信息
ffprobe -print_format json -show_streams output.mp4
# 不显示版本等信息
ffprobe -v quiet -show_format -i output.mp4
# 显示流信息
ffprobe -show_streams output.mp4
# 显示帧信息
ffprobe -show_frames output.mp4
ffmpeg -i output.mp4 -vn -c:a copy output.aac
- -i :input 输入文件
- -vn :v代表video , n表示去除
- -c:a : c代表编码器,a表示音频编码器
- copy :拷贝
- output.aac : 输出到output.aac文件
ffmpeg -i output.mp4 -an -c:a copy new.mp4
ffmpeg -i new.mp4 -i test.aac -shortest newtest.mp4
- -shortest : 视频和音频同时停止
# 视频时长大于音频时长的情况下,音频循环播放
ffmpeg -i new.mp4 -stream_loop -1 -i test.aac -shortest newtest.mp4
ffmpeg -i output.mp4 -c copy output.flv
ffmpeg -i output.flv -c copy output.ts
ffmpeg -i output.ts -c copy output.mov
# 视频转为高质量 GIF 动图
ffmpeg -ss 00:00:03 -t 3 -i test.mp4 -s 640x360 -r 15 test.gif
# 视频倍数播放转为高质量 GIF 动图 (0.25倍播放)
ffmpeg -ss 00:00:03 -t 3 -i test.mp4 -s 640x480 -r 15 -filter:v "setpts=0.25*PTS" test.gif
# GIF 转为 MP4
ffmpeg -f gif -i test.gif test.mp4
# 如上命令部分GIF转化出来的MP4不能被Mac QuickTime Player.app播放,需要添加pixel formal参数
# QuickTime Player对H.264视频只支持YUV色域4:2:0方式的二次插值算法
# 使用yunv420p需要保证长宽为偶数,这里同时使用了scale=420:-2
ffmpeg -i test.gif -vf scale=420:-2,format=yuv420p test.mp4
- ffmpeg 是你刚才安装的程序;
- -ss 00:00:03 表示从第 00 分钟 03 秒开始制作 GIF,如果你想从第 9 秒开始,则输入 -ss 00:00:09,或者 -ss 9,支持小数点,所以也可以输入 -ss 00:00:11.3,或者 -ss 34.6 之类的,如果不加该命令,则从 0 秒开始制作;
- -t 3 表示把持续 3 秒的视频转换为 GIF,你可以把它改为其他数字,例如 1.5,7 等等,时间越长,GIF 体积越大,如果不加该命令,则把整个视频转为 GIF;
- -i 读取任意数量的输入文件(这些文件可以是正常文件、管道、网络流,抓取设备等);
- test.mp4 就是你要转换的视频,名称最好不要有中文,不要留空格,支持多种视频格式;
- -s 640x360 是 GIF 的分辨率,视频分辨率可能是 1080p,但你制作的 GIF 可以转为 720p 等,允许自定义,分辨率越高体积越大,如果不加该命令,则保持分辨率不变;
- -r “15” 表示帧率,网上下载的视频帧率通常为 24,设为 15 效果挺好了,帧率越高体积越大,如果不加该命令,则保持帧率不变;
- test.gif:就是你要输出的文件,你也可以把它命名为 xxx.gif 等等。
- -filter:v "setpts=0.25*PTS" :视频以0.25(取值:[0.25, 4] )倍速播放。
- -filter:a "atempo=2.0" : 音频以2(取值:[0.5, 2.0] )倍速播放。
ffmpeg -r 30 -f image2 -s 540x540 -i "%07d.png" -vcodec libx264 -crf 17 -pix_fmt yuv420p output.mp4
- 帧率:30(请参见
fps
代码) - 尺寸:540x540
- 框架文件名:(
"%07d.png"
递增数字,长7个数字) - 质量(CRF):17(请参阅ffmpeg文档,但17–28是合理的,0是无损的)
# 参考 I帧 B帧 P帧
# 时间参数放在前面,是对没有编解码的文件设定的
ffmpeg -ss 00:00:50 -t 00:02:42 -i test.mp4 -vcodec copy -acodec copy output.mp4
# 时间参数放在后面是对解码后的数据按时间剪裁,更为准确
ffmpeg -i test.mp4 -ss 00:00:50 -t 00:02:42 -vcodec copy -acodec copy output.mp4
- -ss 00:00:50 :从00:00:50开始截取
- -t 00:02:42 :截取时长为00:02:42(可用秒代替如:-t 60)
- -vcodec copy :复制视频
- -acodec copy :复制音频
# 创建 scale=160:90,tile=10x10 的视频缩略图
# scale:视频缩略片段图的尺寸,表示width=160px,height=90px; tile: 指定缩略图排列规则
ffmpeg -i test.mp4 -vsync vfr -vf "select=isnan(prev_selected_t)+gte(t-prev_selected_t\,1),scale=160:90,tile=10x10" -qscale:v 3 "output%03d.jpg"
- scale=160:90 :视频缩略片段图的尺寸,表示width=160px,height=90px; tile: 指定缩略图排列规则
- tile=10x10 :10x10 的视频缩略图
# 截取视频时间帧:00:00:10 的图片, 图片按视频源分辨率大小输出
for name in ./*.mp4; do ffmpeg -i $name -y -f image2 -ss 00:00:10 -vframes 1 ./${name%.*}.jpg; done
# 截取视频第一帧 图片大小:1280x720
for name in ./*.mp4; do ffmpeg -i $name -y -f image2 -t 0.001 -s 1280x720 ./${name%.*}.jpg; done
- %.* : 即删除从右边开始到第一个"."及其右边所有字符
# mp4 to mp3:
ffmpeg -i input.mp4 -acodec libmp3lame -ac 1 -ar 16000 output.mp3
ffmpeg -i input.mp4 -vn -ab 128k -ar 16000 -y output.mp3
# mp4 to wav:
ffmpeg -i input.mp4 -ac 1 -ar 16000 output.wav
# webm to mp3:
ffmpeg -i input.webm -acodec libmp3lame -ac 1 -ar 16000 output.mp3
# webm to wav:
ffmpeg -i input.webm -ac 1 -ar 16000 output.wav
# wav to mp3:
# -f: 强制使用某种输出格式,通常输入文件的格式是自动检测的,输出文件的格式根据后缀猜测,所以大多数情况不需要设置 -f
ffmpeg -i input.wav -vn -ar 44100 -ac 2 -ab 192k -f mp3 output.mp3
ffmpeg -i audio.wav -acodec libmp3lame audio.mp3
# wav to flac:
ffmpeg -i input.wav output.flac
# flac to wav:
ffmpeg -i input.flac output.flac
# aac to mp3:
ffmpeg -i audio.aac -acodec libmp3lame -ac 2 -ab 160 audio.mp3
# aac to wav:
ffmpeg -i audio.aac audio.wav
# aac to ac3:
ffmpeg -i audio.aac -acodec ac3 audio.ac3
# aac to ogg:
ffmpeg -i input.aac -libvorbis output.ogg
# wav to ogg:
ffmpeg -i input.wav -acodec libvorbis output.ogg
# wav to aac:
ffmpeg -i input.wav -acodec libfaac output.aac
# wav to ac3:
ffmpeg -i input.wav -acodec ac3 output.ac3
- -i: 表示输入的音频或视频
- -ac: channel 设置通道3, 默认为1
- -ar: sample rate 设置音频采样率
- -acodec: 使用codec编解码
- -ab: bitrate 设置音频码率
- -vn: 不做视频记录
- libmp3lame: 使用libmp3lame编码mp3
- -y: 覆盖输出文件
# 输出是mp3:
-acodec libmp3lame
# 输出是aac:
-acodec libfaac
# 输出是ac3:
-acodec ac3
# 输出是ogg:
-acodec libvorbis
imagemagick
# 安装
brew install imagemagick
# 依赖Ghostscript字体
brew install ghostscript
# 通过[0]就可以提取出GIF的第一帧图像
convert test.gif[0] test.jpg