1. 视频转 GIF
$ ffmpeg -an -skip_frame nokey -i 输入文件 -vf scale=导出分辨率:flags=fast_bilinear,palettegen=max_colors=色彩数量:stats_mode=diff 色板文件
$ ffmpeg -an -i 输入文件 -i 色板文件 -r 输出文件帧率 -lavfi "framestep=原视频帧率/输出文件帧率*变速速率,setpts=PTS/变速速率,scale=导出分辨率:flags=lanczos [x]; [x][1:v] paletteuse=dither=bayer" 输出文件
此脚本比较复杂,需要将汉字部分按下表进行填写替换:
参数名 | 填写示例 | 说明 |
---|---|---|
输入文件 | input.mp4 | 输入视频文件的路径 |
导出分辨率 | 320:240 | 长和宽必须都是2的倍数 |
色彩数量 | 128 | 可接受的值为[4, 256] ;值越大,色彩越保真,但输出的文件体积也越大; |
色板文件 | palette.png | GIF 调色板文件。在第一行生成,并第二行使用到 |
视频帧率 | 60 | 输入的视频的帧率 |
输出文件帧率 | 10 | 输出的GIF 的帧率 |
变速速率 | 1.0 | 如果不需要变速,填写1.0 ;二倍速则填写2.0 ,依此类推 |
输出文件 | output.gif | 输出GIF 文件的路径 |
此脚本转换 GIF 可以提供更好的画质和更小的体积,并且能够快速处理时长很长(超过一小时)的视频文件。
2. 时间重采样
时间重采样(Time interpolation)有时也称作“补帧”。
此条目內 60
指目标帧率
。
2.1 帧采样 (默认,Frame Sampling)
速度最快,不能改善视频流畅度
$ ffmpeg -input.mp4 -vf "minterpolate='fps=60:mi_mode=dup'" blend.mp4
2.2 帧混合 (Frame Blending)
速度快,效果一般
$ ffmpeg -i input.mp4 -vf "minterpolate='fps=60:mi_mode=blend'" blend.mp4
2.3 光流法(Optical Flow)
速度非常慢,消耗较高内存,效果较好
$ ffmpeg -i input.mp4 -vf "minterpolate='fps=60:mi_mode=mci:mc_mode=aobmc:vsbmc=1'" optical_flow.mp4
3. 降低视频抖动
$ ffmpeg -i input.mp4 -vf vidstabdetect=shakiness=10:result="mytransforms.trf" -f null -
$ ffmpeg -i input.mp4 -vf vidstabtransform=smoothing=30:input="mytransforms.trf",unsharp=5:5:0.8:3:3:0.4 stabilized.mp4
此操作需要两行:第一行分析视频input.mp4
的内容,并将结果保存至mytransforms.trf
;第二行生成稳定后的视频stabilized.mp4
。
速度较慢,且效果不如Google Photos
和Premiere Pro
好。
4. 获取媒体文件属性
$ ffprobe -v error -show_format -show_streams input.mp4
上面将返回媒体文件的所有属性。
$ ffprobe -v quiet -select_streams V:0 -show_entries stream=width,height,r_frame_rate,bit_rate -of csv=p=0:sv=fail -i input.mp4
有时只需要媒体文件中的特定几项信息,可以通过类似这样的方式指定。(这条脚本将返回视频流的宽、高、帧率、比特率,中间以逗号分隔,如1920,1080,30/1,11895227
)
补充说明:FLAC
在 FFprobe
中的特殊情况
对于大部分音频,FFprobe
在STREAM
中有bit_rate
值;而对于FLAC
音频,STREAM
流中bit_rate
值为N/A
,需要在FORMAT
中获取bit_rate
值。
补充说明:图片在 FFprobe
中的特殊情况
上面的命令用来读取视频和音频可能足够了,但许多图片中的元数据存储在视频流的帧内,需要通过 -show_frames
获取更完整的信息,例如:
$ ffprobe -v error -show_format -show_streams -show_frames input.jpg
5. 压缩音频为无损 FLAC
$ ffmpeg -i input.wav -c:a flac -compression_level 12 output.flac
6. 压缩音频为 Opus
$ ffmpeg -i input.wav -c:a libopus -b:a 128k output.ogg
128k
为比特率。
Opus
可能是目前压缩率最佳的音频编码器,在极低的比特率下也能提供优秀的音质,且大部分软件都兼容此格式。
7. 歌曲移除人声
$ ffmpeg -i song.mp3 -af pan="stereo|c0=c0|c1=-1*c1" -ac 1 karaoke.mp3
会将歌曲转换为单声道,效果类似卡拉OK。
8. 改变音频音量
$ ffmpeg -i input.wav -filter:a "volume=音量" output.wav
音量
填写方式:
调节音量至... | 填写 |
---|---|
50% | 0.5 |
150% | 1.5 |
提高 10 分贝 | 10dB |
降低 10 分贝 | -10dB |
9. 视频转 AV1
$ ffmpeg -i "input.mp4" -c:v libaom-av1 -crf 画质参数 -b:v 0 -vf scale=分辨率 -cpu-used 8 -row-mt 1 output.mkv
参数名 | 填写示例 | 说明 |
---|---|---|
画质参数 | 30 | 可接受的值为[0, 63] 。值越大,文件体积越小,视频画质越差。参考值:0 为无损,23 为视觉无损。 |
分辨率 | 1920:1080 | 可以只指定宽度或高度,如-2:1080 |