ffmpeg 提取视频中的音频
ffmpeg -i test2.mp4 -f mp3 -vn test2.mp3
ffmpeg 修改视频分辨率
ffmpeg -i video_1920.mp4 -vf scale=640:360 video_640.mp4 -hide_banner
-vf scale = 640:360以新的所需分辨率(640:360)指示缩放视频滤波器
更改视频宽高比
将16:9的宽高比改为4:3,因此视频的分辨率为4:3宽高比,在这种情况下,它将是640x480。进行此转换的ffmpeg命令将是
ffmpeg -i video_1920.mp4 -vf scale=640:480,setdar=4:3 video_640x480.mp4 -hide_banner
ffmpeg 转视频为 gif
# mp4 转 gif
ffmpeg -i small.mp4 small.gif
指定 gif 帧率用参数 -r 25
ffmpeg -i test2.mp4 -r 25 test2.gif
gif 转换后有网格、格栅优化
ffmpeg 有透明度优化,用以降低 gif 大小。加入参数: -gifflags -transdiff
关闭优化。
$ ffmpeg -i demo.mp4 -vf "fps=10,scale=480:-1" -gifflags -transdiff ffmpeg_default_no_transdiff.gif
推荐脚本:
set -e
# global filter
fps=10
scale=480:-1
interpolation=lanczos
# for palettegen
max_colors=256 # up to 256
reserve_transparent=on
stats_mode=full # chosen from [full, diff, single]
# for paletteuse
dither=bayer # chosen from [bayer, heckbert, floyd_steinberg, sierra2, sierra2_4a, none]
bayer_scale=3 # [0, 5]. only works when dither=bayer. higher means more color banding but less crosshatch pattern and smaller file size
diff_mode=rectangle # chosen from [rectangle, none]
new=off # when stats_mode=single and new=on, each frame uses different palette
ffmpeg -i $1 -vf "fps=$fps,scale=$scale:flags=$interpolation,split[split1][split2];[split1]palettegen=max_colors=$max_colors:reserve_transparent=$reserve_transparent:stats_mode=$stats_mode[pal];[split2][pal]paletteuse=dither=$dither:bayer_scale=$bayer_scale:diff_mode=$diff_mode:new=$new" -y $2
实测脚本出的gif画质更好,但大小提升约50%
制作更好的 GIF: 另一种更好的办法(gif 画质优化,去除 ffmpeg 网格栅栏)
将视频中的一部分转换为GIF
// 从视频中第二秒开始,截取时长为3秒的片段转化为 gif
ffmpeg -t 3 -ss 00:00:02 -i small.mp4 small-clip.gif
转化高质量 GIF
// 默认转化是中等质量模式,若要转化出高质量的 gif,可以修改比特率
ffmpeg -i small.mp4 -b 2048k small.gif
将 GIF 转化为 MP4
ffmpeg -f gif -i animation.gif animation.mp4
将 gif 转为其他视频格式
ffmpeg -f gif -i animation.gif animation.mpeg
ffmpeg -f gif -i animation.gif animation.webm
加倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=0.5*PTS" output.mov
定义帧率 16fps:
ffmpeg -i input.mov -r 16 -filter:v "setpts=0.125*PTS" -an output.mov
慢倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=2.0*PTS" output.mov
静音视频(移除视频中的音频)
ffmpeg -i input.mov -an mute-output.mov
视频提取帧
// 将视频提取10帧
ffmpeg -i index.mp4 -r 10 %03d.jpg;
ffmpeg 清除视频文件中包含的元数据信息
ffmpeg -i input.mp4 -map_metadata -1 -c:v copy -c:a copy output.mp4
主要参数是:
-map_metadata -1
MP4 格式转 webm 文件格式
ffmpeg 格式转换 webm
ffmpeg -i input.mp4 -b:v 0 -c:v libvpx-vp9 -c:a libopus out.webm
ffmpeg 生成纯色视频,黑色视频
ffmpeg -f lavfi -i color=size=1920x1080:rate=25:color=black:duration=5 black.mp4
或者
ffmpeg -f lavfi -i color=s=1920x1080:r=25:c='#FF00FF':d=5 purple.mp4
color,c:
视频颜色,可以是颜色名或者数值#RRGGBB,详见 ffmpeg color。
- size, s:
图像分辨率
- rate, r:
视频帧率
- duration, d:
视频时长