常用 FFmpeg 命令

字幕

视频添加字幕

ffmpeg -i input.mp4 -i subtitle.ass -c:v copy -c:a copy -c:s ass -y output.mkv

或:(烧录为 mp4,速度慢)

ffmpeg -i input.mp4 -vf ass=subtitle.ass -y output.mp4

视频提取字幕

ffmpeg -i video.mkv -map 0:s:0 out.ass

这将下载第一个字幕轨。如果有多个,则使用 0:s:1 下载第二个,0:s:2 下载第三个,以此类推。可以生成任意所需的格式,改一下扩展名即可。


图片

图片压缩

ffmpeg -i image.jpg -q 4 out.jpg
  • -q 4 为压缩级别,数字越大压缩级别越高

约束比例压缩

ffmpeg -i image.jpg -vf scale=-1:1000 out.jpg
  • scale=-1:1000 表示保持图片尺寸比,将高度缩减为 1000px
  • scale=1000:-1 表示保持图片尺寸比,将宽度缩减为 1000px
  • scale=1000:500 表示将宽度缩减为 1000px,高度缩减为 500px (图片可能会拉伸)

图片裁剪

ffmpeg -i image.jpg -vf crop=1000:800:0:0 out.jpg
  • crop=1000:800:0:0 表示裁剪后的图片大小为 1000x800 px,从 0,0 坐标位置开始裁剪,即左上角

添加文字水印

ffmpeg -i image.jpg -vf drawtext=fontfile="simkai.ttf":fontcolor="#D85840":fontsize=100:text="Hello World!你好,世界":x=1000:y=1000 out.jpg
  • fontfile=“simkai.ttf” 为字体路径(绝对路径好像不生效?只好把字体复制到当前目录)
  • 不支持中文的字体,中文会显示不正常
  • Windows 系统字体位置为 “C:/Windows/Fonts”
  • fontcolor=“#D85840” 为字体颜色,支持不透明度
  • fontsize=100 为字体大小
  • text=“Hello World!你好,世界!” 为要设置的文字
  • x=1000:y=1000 为文字起始坐标,图片左上角坐标为 (0,0)

图片旋转

ffmpeg -i image.jpg -vf rotate=90*PI/180 -y out.jpg
  • rotate=90*PI/180 指顺时针旋转 90 度

图片左右翻转

ffmpeg -i image.jpg -vf hflip out.jpg

图片上下翻转

ffmpeg -i image.jpg -vf vflip out.jpg

音频

导出视频中的音频

ffmpeg -i input.mp4 -vn -y -acodec copy output.m4a

去除视频中的音频

ffmpeg -i input.mp4 -an output.mp4

添加封面

ffmpeg -y -i audio.mp3 -i cover.jpg -map 0:0 -map 1:0 -c copy -id3v2_version 3 output.mp3

去除封面

ffmpeg -i audio.mp3 -vn -codec:a copy -map_metadata -1 output.mp3

m4a 转 mp3

ffmpeg -i audio.m4a -f mp3 output.mp3

音频增益

ffmpeg -i input.mp3 -af volume=-5dB -y output.mp3
  • volume=-5dB 表示将音量减少 5 dB,升高则不用加负号

音频压缩

ffmpeg -i input.mp3 -ab 128k output.mp3
  • -ab 128k 表示将音频压缩为 128kbps 比特率
    常用的比特率有 96k, 112k, 128k, 160k, 192k, 256k, 320k

视频

合并音视频

ffmpeg -i input.mp4 -i audio.mp3 -vcodec copy -acodec copy output.mp4

合并多个视频文件

  • 方法 1(直接指定文件名)

    ffmpeg -i "concat:1.ts|2.ts|3.ts" -c copy output.mp4
    
  • 方法 2(根据配置文件合并)

    file.txt:

    file '1.mp4'
    file '2.mp4'
    file '3.mp4'
    
    ffmpeg -f concat -i file.txt -c copy -y output.mp4
    

视频转为 gif

ffmpeg -ss 00:00:01 -i input.mp4 -s 1024x768 -r 15 output.gif
  • -ss 00:00:01 表示从第 00 小时 00 分钟 01 秒 开始制作 gif,也可以简写为 1,可以省略
  • -s 1024x768 表示 gif 分辨率,可以省略
  • -r 15 表示 gif 帧率,可以省略

视频截取

ffmpeg -ss 00:00:00 -i input.mp4 -vcodec copy -acodec copy -t 00:00:30 output.mp4
  • -ss 00:00:00 表示从第 00 小时 00 分钟 01 秒 秒开始截取
  • -t 00:00:30 表示向后截取 30 秒视频

修改分辨率

  • 方法 1(直接设置分辨率)

    ffmpeg -i input.mp4 -s 640x480 output.mp4
    
  • 方法 2(设置缩放比)

    ffmpeg -i input.mp4 -vf scale=-1:480 output.mp4
    

调整视频帧率

ffmpeg -i input.mp4 -r 20 output.mp4
  • -r 20 表示调整视频帧率为 20 帧/s

调整视频播放速度

只调整视频速度

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
  • 0.5 表示 2 倍速播放,2 表示 0.5 倍速播放,以此类推

同时调整视频音频速度

ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4
  • 0.5*PTS[v] 表示 视频 2 倍速播放,2.0[a] 表示音频 2 倍速播放

视频截图

ffmpeg -i input.mp4 -r 30 image-%3d.jpg
  • -r 30 表示每秒提取 30 帧
  • image-%3d 文件命名格式是 image-001.jpg
ffmpeg -i input.mp4 -r 30 -t 4 image-%3d.jpg
  • -t 4 表示取第 4 秒的帧
ffmpeg -i input.mp4 -r 30 -t 4 -vframes 1 image-%3d.jpg
  • -vframes 1 表示取 1 帧

裁剪视频

ffmpeg -i input.mp4 -vf crop=w=1500:h=600:x=0:y=200 output.mp4
  • w=1500 表示输出视频宽度 1500 px
  • h=600 表示输出视频高度 600 px
  • x=0 y=200 表示从坐标(0, 200)开始裁剪

视频旋转

ffmpeg -i input.mp4 -metadata:s:v rotate="-90" -codec copy outut.mp4
  • rotate=“-90” 表示将视频顺时针旋转 90°

视频镜像

ffmpeg -i input.mp4 -vf "hflip" outut.mp4
  • -vf “hflip” 表示将视频水平镜像,vflip 则是垂直镜像

参考链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值