实用的 FFmpeg 脚本合集 | 青训营

93 阅读2分钟

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.pngGIF调色板文件。在第一行生成,并第二行使用到
视频帧率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 PhotosPremiere 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 中的特殊情况

对于大部分音频,FFprobeSTREAM中有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