ffmpeg 命令行操作

ffmpeg 命令行操作

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:

视频时长

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://zwc365.com/2024/03/09/ffmpeg命令行操作

Buy me a cup of coffee ☕.