ffmpeg 常用的视频编码参数
梦幻-sym31
编辑于 2026年03月30日 09:15
软件技术分享

正文开始前先展示一些我个人常用的视频编码参数:

h264编码

ffmpeg -i "输入视频的路径" -vf "scale=1280:720:flags=spline,setsar=1/1" -af "aresample=48000:resampler=soxr" -f mp4 -c:v libx264 -crf:v 19.0 -qmin 15 -qmax 28 -r 30 -fps_mode cfr -profile:v high -level:v 5.0 -preset:v veryslow -tune:v ssim -g 6 -c:a aac -b:a 128k -c:s copy "F:\d\导出\h264-%2d.mp4"

h265编码

ffmpeg -i "输入视频的路径" -vf "scale=1280:720:flags=spline,setsar=1/1" -af "aresample=48000:resampler=soxr" -f mp4 -c:v libx265 -crf:v 22.0 -qmin 15 -qmax 28 -r 30 -fps_mode cfr -profile:v main10 -preset:v veryslow -tune:v ssim -g 6 -c:a aac -b:a 128k -c:s copy "F:\d\导出\h265-%2d.mp4"

av1编码

ffmpeg -i "输入视频的路径" -vf "scale=1280:720:flags=spline,setsar=1/1" -af "aresample=48000:resampler=soxr" -f mp4 -c:v libaom-av1 -crf:v 29.0 -cpu-used:v 2 -r 30 -fps_mode cfr -g 6 -c:a aac -b:a 128k -c:s copy "F:\d\导出\av1-%2d.mp4"

******学习使用ffmpeg需要的一些参数

查看帮助文档 ffmpeg -h

查看所有编码器 ffmpeg -encoders

查看所有解码器 ffmpeg -decoders

查看所有过滤器 ffmpeg -filters

查看某编码器的可用参数 ffmpeg -h encoder=某编码器名

查看所有支持的容器格式 ffmpeg -formats

显示标准频道布局 ffmpeg -layouts

显示可用的音频采样格式 ffmpeg -sample_fmts

查询ffmpeg支持哪些编码格式及编解码器名 ffmpeg -codecs

******常用的参数

-i "文件路径" 指定输入文件;直接按回车可以查看该文件的信息,加上-hide_banner参数,可以只显示元信息

-f 强制容器格式(否则自动检测)

-y 设定输出格式,输出时直接覆盖同名文件

-c 选择编码器/解码器(“copy”以在不重新编码的情况下复制流)

-filter 将指定的过滤器应用于音频/视频

-b 设置比特率

-crf 选择恒定质量模式的质量(从-1到FLT_MAX)(默认为-1)

-qp 恒定量化参数速率控制方法(从-1到INT_MAX)(默认为-1)

-threads 0 使用所有可用的CPU核心进行编码

***视频过滤器处理参数

-vf 或者 -filter:v 将过滤器应用于视频流

例如:-vf "scale=1280:720:flags=spline, setsar=1/1, fps=24, setpts=PTS/2, pad=1280:820:0:50:black"

参数解释:

scale是常用的过滤器,可以改变视频的分辨率;spline是一种高质量的缩放滤波器,用于高质量的视频处理;setsar 表示设置采样宽高比;1比1表示方形像素

sar是采样宽高比,是视频帧每一个像素的宽高比;dar是显示宽高比,指视频在播放设备上的实际显示宽高比

fps=24 用滤镜fps设置视频帧速率为24;滤镜fps可以调整视频帧速率

setpts=PTS/2 用滤镜setpts设置视频播放速度为2倍速;滤镜setpts可以在不改变原始帧数的情况下调整播放速度(调整时间戳);在使用setpts滤镜时,确保不要产生负的时间戳,这可能会导致FFmpeg报错或输出不正确的文件

pad=1280:820:0:50:black 用过滤器pad设置画布大小为1280x820(不拉伸原视频帧的前提下增大分辨率),并用黑色填充;0:50可以理解成原视频帧左上角在画布上的位置坐标(x,y),坐标原点在画布的左上角(0,0),x方向是向右,y方向是向下

-vf "crop=w:h:x:y" 设置视频过滤器,用过滤器crop裁剪视频;w:h是裁剪后的视频分辨率,x:y可以理解成裁剪后的“视频帧左上角的位置坐标”,坐标原点是原视频帧的左上角

**常用的视频缩放滤波器

缩放质量由中等到高(缩放质量都是好的,差的没收集):

area bicublin gauss sinc lanczos spline

***音频过滤器处理参数

-af或者-filter:a 将过滤器应用于音频流

例如:-af "aresample=48000:resampler=soxr"

参数解释:

使用过滤器aresample设置音频采样率为48000;使用重采样算法soxr处理音频

soxr是高质量重采样算法,慢速但高质量;重采样算法linear,快速但质量较低

-af "volume=0.5" 使用volume过滤器将音量降低到原来的50%

***视频处理参数

-c:v或者-vcodec 为视频流选择编码器/解码器

-crf:v 恒定质量模式编码视频;h264和h265编码建议使用18~27;av1编码建议用26~40

-qp:v或者 -q:v 恒定量化参数模式编码视频(建议使用26~35);-qscale 是一个较旧的选项,用于设置整个视频的恒定量化参数

-qmin 量化参数最小值;-qmax 量化参数最大值;建议配合-crf:v参数使用

-cpu-used:v 质量/速度比修改器(从0到8)(默认值1);受编码器限制;vp8、vp9和av1编码可以使用这个参数;数值越大,质量越差,比特率模式编码最明显

-r 覆盖输入帧速率/转换为给定的输出帧速率(Hz值、分数或缩写)

-framerate 设置帧速率

-fps_mode cfr 设置恒定帧速率编码

-profile:v 设置视频配置文件限制;受编码器限制;(libx264和libx264rgb编码器可用参数:baseline main high high10 high422 high444 ;建议用 high);(libx265编码器可用参数:main main10 mainstillpicture msp main-intra main10-intra main444-8 main444-intra main444-stillpicture main422-10 main422-10-intra main444-10 main444-10-intra main12 main12-intra main422-12 main422-12-intra main444-12 main444-12-intra main444-16-intra main444-16-stillpicture)

-level:v 设置视频编码级别;受编码器限制,libx264和libx264rgb编码器可以使用这个参数;720p建议用 5.0 ,1080p建议用 5.1 ,2160p建议用 5.2以上

-preset:v 设置视频编码预设;受编码器限制;(libx264、libx264rgb和libx265编码器可用参数:ultrafast superfast veryfast faster fast medium slow slower veryslow placebo );比特率模式要用cpu慢速编码才能得到设置码率的最好质量,除非用的码率很高

-tune:v 调整视频编码参数;看到一些教程说 ssim 是最好的;(libx264和libx264rgb编码器可用参数:film animation grain stillimage psnr ssim fastdecode zerolatency );(libx265编码器可用参数:psnr ssim grain zerolatency fastdecode animation);(libaom-av1编码器可用参数:0和1;0是psnr, 1是ssim;默认禁用)

-g(或--keyint_min和--keyint_max) 设置关键帧距离(秒)

-aspect 设置纵横比(4:3、16:9或1.3333、1.7777)

-vn 禁用视频

-b:v 设置视频比特率

-maxrate 设置最大比特率;-minrate 设置最小比特率;配合参数 -b:v 使用

-bufsize 设置缓冲区大小(b);用以控制编码过程中的比特率波动,参数通常设置为比特率的2到4倍;配合参数 -b:v 使用

-s size,设置帧大小 格式为 宽x高

-ss 在指定时间开始转码

-t 在指定的持续时间后停止转码

-to 达到指定时间后停止转码

-pix_fmt 设置输出颜色格式及颜色位深度;受编码器限制;设置10位以上颜色位深度会增加编码时间;(libx264编码器可用参数: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21 yuv420p10le yuv422p10le yuv444p10le nv20le gray gray10le);(libx264rgb编码器可用参数:bgr0 bgr24 rgb24);(libx265编码器可用参数:yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p gbrp yuv420p10le yuv422p10le yuv444p10le gbrp10le yuv420p12le yuv422p12le yuv444p12le gbrp12le gray gray10le gray12le yuva420p yuva420p10le);(libaom-av1编码器可用参数:yuv420p yuv422p yuv444p gbrp yuv420p10le yuv422p10le yuv444p10le yuv420p12le yuv422p12le yuv444p12le gbrp10le gbrp12le gray gray10le gray12le)

-bits_per_raw_sample number 设置每个原始样本的位数

-vframes 设置要输出的视频帧数

***音频处理参数

-c:a或者-acodec 为音频流选择编码器/解码器

-ab或者-b:a 为音频流选择比特率

-aq 设置音频质量(特定于编解码器)

-ar 设置音频采样率(Hz)

-ac 设置音频通道数

-an 禁用音频

-aframes 设置要输出的音频帧数

-vol 改变音量(256 =正常)

***字幕处理参数

-c:s或者-scodec 为字幕流选择编码器/解码器

-sn 禁用字幕

-s size 设置框架大小(WxH或缩写)

-canvas_size size 设置画布大小(WxH或缩写)

**可能用到的参数

-max_keyframe_interval 限制关键帧数量,如果数值为100,意思为最多每100帧一个关键帧

-metadata 添加元数据

-map 设置所输入的流需要指向哪个新的相应的流

-strict experimental 允许使用实验性编解码器。

-fs limit_size 设置限制文件大小(以字节B为单位)

***常用编码器名字参数

视频编码器: libx264 libx264rgb libx265 libaom-av1 libsvtav1

图像、动态图像编码器:gif png bmp apng libwebp_anim libwebp

音频编码器: aac aac_mf ac3 ac3_fixed ac3_mf flac pcm_f32le pcm_s16le pcm_s32le pcm_s24le

字幕编码器:ssa ass srt dvbsub dvdsub mov_text subrip text

#ffmpeg#​ #编码#​ #编码器#​ #视频编码器#​ #音频编码器#​ #教程#​ #参数#​ #压缩#​ #工具#​ #软件#​