ffmpeg 常用命令

说到音视频处理就不得不提到 ffmpeg 这个开源的工具,虽然自己之前也就开始使用,但是零零散散的笔记与需求不是很多再加上偶尔只是一次的使用,所以也就没怎么想着来写这篇文章,这次我想着把存储已久的文章汇集一下 (虽然好多都没记,只好自己补充下啦)

视频转格式

1
ffmpeg -i video.mp4 video.avi

视频转音频

1
ffmpeg -i input.mp4 -vn output.mp3
  • -vn:表明我们已经在输出文件中禁用视频录制。

视频重新编码

有时候视频的编码格式是损坏的,在部分设备下播放是较为卡顿的,这个时候就需要重新编码

1
ffmpeg -i "video.mp4" -c:v libx264 -c:a aac -preset fast "video_re.mp4"

这会用 x264 重新编码视频,用 aac 重新编码音频

转换为无声 webm 视频

1
ffmpeg -i input.mp4 -an -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

其中:

  • -an:关键参数,用于去除声音
  • -c:v libvpx-vp9:指定视频编码格式 (vp9 是较为通用格式,如果追求极速转换可使用 libvpx)
  • -crf 30:控制质量,通常在 0-63 之间,数字越小,画质越好,文件越大
  • -b:v 0:当使用 vp9 编码时,通常将比特率设为 0,让 -crf 参数来决定画质

转换为 GIF

使用 -loop 0 参数使其循环播放

1
ffmpeg -i input.mp4 -loop 0 output.gif

如果需要背景透明的话,分为两种情况

一种是原视频就是有透明通道 (如 ProRes 4444.mov) 直接转换可能会有噪点,一般需要使用调色盘 (Palette) 滤镜来确保透明色被正确映射

1
ffmpeg -i input.mov -vf "fps=15,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif

参数详情为:

  • fps=15:设置帧率,不写则使用原视频帧率

  • split[s0][s1]:将视频分为两路,这里 s0 用来生成调色板,s1 用来输出图像

  • [s0]palettegen[p]:对 s0 流生成专门的 256 色调色盘,并命名为 p,默认情况下 palettegen 会自动保留透明颜色

  • [s1][p]paletteuse:将生成的调色盘 p 应用到视频流 s1

    二是如果原视频是纯色背景,可以使用 colorkey 滤镜扣除背景

1
ffmpeg -i input.mp4 -vf "fps=15,colorkey=0x00FF00:0.1:0.1,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif

对于 colorkey=0x00FF00:0.1:0.1 具体为

  • 0x00FF00:需要扣除的颜色,这里是纯绿,黑色为 0x000000
  • 第一个 0.1:相似度 (Similarity),0.01-1.0 表示匹配度从精准匹配到完全匹配,一般设置在 0.1-0.3
  • 第二个 0.1:混合度 (Blend),用于柔化边缘

合并音视频

首先确认音频编码是否兼容 (比如 AAC 编码)

1
ffprobe audio.mp3

如果兼容,直接复制合并即可

1
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a copy output.mp4

如果音频不兼容,则需要转换音频格式

1
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4

图片格式

ffmpeg 甚至还可以用于转换图片格式,比较简单的就是直接

1
ffmpeg -i input.png output.jpg

这对于临时换一下格式非常实用

This post is licensed under CC BY-NC-SA 4.0 by the author.