文章目录
一、设置视频帧数 -vframes 参数
1、-vframes 参数解析
在 ffmpeg 命令中 , -vframes
参数 的 作用是 指定要输出的视频帧数 , 通过该参数 可以 控制 视频处理的长度 , 即 : 在输出多少帧后 停止处理 视频流 ;
使用 -vframes
参数时 , 后面 的 参数值 是 一个具体的帧数 , -vframes 100
参数 是 输出 100 帧 画面 的 视频 ;
在 新版本的 ffmpeg 中 , -vframes
参数 会被标记为过时 或 不再推荐使用 ; 此时 使用 -frames:v
参数 设置 输出视频帧数 ;
2、设置视频帧数示例
使用 -vframes 参数设置帧数
执行
ffmpeg -i input.mp4 -vframes 100 output.mp4
命令 , 将 input.mp4 视频文件 的 前 100 帧视频画面 输出到 到 output.mp4 视频文件中 ;
下图中 输出文件 output.mp4 视频文件中 , 每秒大约 30 帧 , 有 3 秒 840 毫秒 的视频 , 计算出来是 100 帧视频画面 ;
使用 -frames:v 参数设置帧数
执行
ffmpeg -i input.mp4 -frames:v 100 output.mp4
命令 , 将 input.mp4 视频文件 的 前 100 帧视频画面 输出到 到 output.mp4 视频文件中 ;
二、设置视频码率 -b:v / -b 参数
1、-b:v / -b 参数解析
在 ffmpeg 命令中 , -b:v
参数 和 -b
参数 的 作用 都是 设置 视频码率 ,
- 推荐使用
-b:v
参数 设置视频码率 , 参数中的b
代表 码率 ( bitrate ) ,:v
表示该码率参数是针对 视频流 ( Vedio Stream ) 设置的 ; - 不推荐使用
-b
参数 , 该参数命令设置不明确 ,-b
参数 同时可以用于设置 音频码率 和 视频码率 , 但是通常情况下 默认 设置的是 视频码率 ;
-b:v
/ -b
参数 值 是 要设置的 输出文件 的 视频 码率值 , 如 : -b:v 1M
参数的作用是 将 视频码率设置为 1 Mbps , Mbps 代表兆比特每秒 ( Megabits per second ) ;
2、设置视频码率示例
执行
ffmpeg -i input.mp4 -b:v 1M output.mp4
命令 , 将 输入文件 input.mp4 以 1M 的视频码率 输出到 输出文件 output.mp4 中 ;
输入文件 input.mp4 的 视频码率为 1580 kb/s , 输出文件 output.mp4 的 视频码率为 1000 kb/s , 视频大小 由 13.1MB 变为 8.16MB ;
执行
ffmpeg -i input.mp4 -b 1M output.mp4
命令 , 将 输入文件 input.mp4 以 1M 的视频码率 输出到 输出文件 output.mp4 中 ;
三、设置输出视频帧率 -r 参数
1、-r 参数解析
在 ffmpeg 命令中 , -r
参数 的 作用是 设置 输出视频 的 帧率 Frame Rate , 帧率是指每秒钟显示的图像帧数 , 单位是 FPS , Frame Per Second ;
通过 -r
参数 可以 控制 输出视频的 播放速度 和 平滑度 , 帧率越高 , 视频越平滑流畅 , 帧率越低 , 视频越卡顿 ;
-r
参数 的 参数值 是 一个具体的帧率值 , 是一个数字 , 一般情况下 取值 0 ~ 120 , 设置 -r 60
参数 , 表示 输出视频的帧率为 60 帧每秒 ;
注意 : -r
参数 设置的是 输出视频的帧率 , 输入视频的帧率是固定的 , 如果 输入视频的帧率 与 该 -r
参数 设置的 输出视频帧率不同 ,
- 如果 输入视频帧率 > 输出视频帧率 : 通过 丢弃视频帧 来调整输出视频的帧率。
- 如果 输入视频帧率 < 输出视频帧率 : 通过 增加重复帧 来调整输出视频的帧率。
2、设置输出视频帧率示例
执行
ffmpeg -i input.mp4 -r 60 output.mp4
命令 , 将输入文件 input.mp4 的 视频流 重新编码为 帧率为 60 帧每秒 , 并将结果保存到 output.mp4 文件中 ;
下图中 , 输入文件 input.mp4 的 帧率为 29.608 FPS , 输出文件 output.mp4 的 帧率为 60 FPS ;
四、设置视频画面宽高 -s 参数
1、-s 参数解析
在 ffmpeg 命令中 , -s
参数 的 作用是 设置 输出视频 的分辨率 , 单位是 像素 ;
-s
参数的 参数值 是 一个宽度和高度的值 , 中间用 x 分隔 , 如 : 如果输出视频的分辨率为 376x210 , 则可以使用 -s 376x210
参数设置 ;
2、设置视频画面宽高示例
执行
ffmpeg -i input.mp4 -s 376x210 output.mp4
命令 , 将输入文件 input.mp4 的 视频流 重新编码为 376x210 的分辨率 , 并将输出结果保存到 output.mp4 输出文件中 ;
下图中 , 输入文件 input.mp4 的 视频分辨率为 752x420 像素 , 输出文件 output.mp4 的 视频分辨率为 376x210 像素 ;
五、设置视频画面宽高比 -aspect 参数
1、-aspect 参数解析
在 ffmpeg 命令中 , -aspect
参数 的作用是 设置视频画面的宽高比 ;
使用 -aspect
参数时 , 设置的参数值是 一个宽高比的值 , 这个参数值可以是一个
- 浮点数 : 表示宽度与高度的比值 , 如 :
-aspect 0.5
; - 以冒号分隔的两个整数 : 表示宽和高的具体数值 , 如 :
-aspect 1:2
;
2、设置视频画面宽高比示例
执行
ffmpeg -i input.mp4 -aspect 1:1 output.mp4
命令 , 将输入文件 input.mp4 的 视频流 重新编码为 1:1 的宽高比 , 并将输出结果保存到 output.mp4 输出文件中 ;
下图中 , 输入文件 input.mp4 的 视频分辨率为 752x420 像素 宽高比为 16:9 , 输出文件 output.mp4 的 视频分辨率为 752x420 像素 宽高比为 1:1 ;
六、设置视频编解码器 -vcodec 参数
1、-vcodec 参数解析
在 ffmpeg 命令中 , -vcodec
参数 的 作用是 指定 视频编解码器 ;
视频编解码器 是用于 对 视频数据 进行 压缩编码 和 解压缩解码 的算法 , 使用 不同的 编解码器 获得的 视频文件 的 画面质量 / 文件大小 / 兼容性 不同 ;
-acodec
后面的 参数值 是 编解码器的名称 ;
常见的 视频编解码器 包括
- libx264 : 用于 H.264 格式的视频编码 ;
- libvpx : 用于 VP8 编码 ;
- libvpx-vp9 : 用于 VP9 编码 ;
- copy : 用于直接复制原始视频流而不进行重新编码 ;
在 【FFmpeg】ffmpeg 命令行参数 ② ( Windows 环境中 ffmpeg 命令行输出文本搜索 -findstr 用法 | -findstr 搜索文本字符串用法 | 输出命令行到文件中 ) 博客中介绍了 获取 常用的 编解码器 的方法 , 执行
ffmpeg -encoders
命令 , 即可查看当前 版本的 ffmpeg 支持的 编解码器 ;
下面列举了 视频 编解码器 , 仅做参考 ;
V..... a64multi Multicolor charset for Commodore 64 (codec a64_multi)
V..... a64multi5 Multicolor charset for Commodore 64, extended with 5th color (colram) (codec a64_multi5)
V..... alias_pix Alias/Wavefront PIX image
V..... amv AMV Video
V..... apng APNG (Animated Portable Network Graphics) image
V..... asv1 ASUS V1
V..... asv2 ASUS V2
V..... libaom-av1 libaom AV1 (codec av1)
V....D librav1e librav1e AV1 (codec av1)
V..... libsvtav1 SVT-AV1(Scalable Video Technology for AV1) encoder (codec av1)
V..... avrp Avid 1:1 10-bit RGB Packer
V..... libxavs2 libxavs2 AVS2-P2/IEEE1857.4 (codec avs2)
V..X.. avui Avid Meridien Uncompressed
V..... ayuv Uncompressed packed MS 4:4:4:4
V..... bmp BMP (Windows and OS/2 bitmap)
VF.... cfhd GoPro CineForm HD
V..... cinepak Cinepak
V..... cljr Cirrus Logic AccuPak
V.S... vc2 SMPTE VC-2 (codec dirac)
VFS... dnxhd VC3/DNxHD
V..... dpx DPX (Digital Picture Exchange) image
VFS... dvvideo DV (Digital Video)
VF.... exr OpenEXR image
V.S... ffv1 FFmpeg video codec #1
VF.... ffvhuff Huffyuv FFmpeg variant
V..... fits Flexible Image Transport System
V..... flashsv Flash Screen Video
V..... flashsv2 Flash Screen Video Version 2
V..... flv FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1)
V..... gif GIF (Graphics Interchange Format)
V..... h261 H.261
V..... h263 H.263 / H.263-1996
V.S... h263p H.263+ / H.263-1998 / H.263 version 2
V..... libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
V..... libx264rgb libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
V....D h264_amf AMD AMF H.264 Encoder (codec h264)
V....D h264_mf H264 via MediaFoundation (codec h264)
V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... h264_qsv H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
V..... nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264)
V..... libx265 libx265 H.265 / HEVC (codec hevc)
V..... nvenc_hevc NVIDIA NVENC hevc encoder (codec hevc)
V....D hevc_amf AMD AMF HEVC encoder (codec hevc)
V....D hevc_mf HEVC via MediaFoundation (codec hevc)
V....D hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)
V..... hevc_qsv HEVC (Intel Quick Sync Video acceleration) (codec hevc)
VF.... huffyuv Huffyuv / HuffYUV
V..... jpeg2000 JPEG 2000
VF.... libopenjpeg OpenJPEG JPEG 2000 (codec jpeg2000)
VF.... jpegls JPEG-LS
VF.... ljpeg Lossless JPEG
VF.... magicyuv MagicYUV video
VFS... mjpeg MJPEG (Motion JPEG)
V..... mjpeg_qsv MJPEG (Intel Quick Sync Video acceleration) (codec mjpeg)
V.S... mpeg1video MPEG-1 video
V.S... mpeg2video MPEG-2 video
V..... mpeg2_qsv MPEG-2 video (Intel Quick Sync Video acceleration) (codec mpeg2video)
V.S... mpeg4 MPEG-4 part 2
V..... libxvid libxvidcore MPEG-4 part 2 (codec mpeg4)
V..... msmpeg4v2 MPEG-4 part 2 Microsoft variant version 2
V..... msmpeg4 MPEG-4 part 2 Microsoft variant version 3 (codec msmpeg4v3)
V..... msvideo1 Microsoft Video-1
V..... pam PAM (Portable AnyMap) image
V..... pbm PBM (Portable BitMap) image
V..... pcx PC Paintbrush PCX image
V..... pfm PFM (Portable FloatMap) image
V..... pgm PGM (Portable GrayMap) image
V..... pgmyuv PGMYUV (Portable GrayMap YUV) image
VF.... png PNG (Portable Network Graphics) image
V..... ppm PPM (Portable PixelMap) image
VF.... prores Apple ProRes
VF.... prores_aw Apple ProRes (codec prores)
VFS... prores_ks Apple ProRes (iCodec Pro) (codec prores)
V..... qtrle QuickTime Animation (RLE) video
V..... r10k AJA Kona 10-bit RGB Codec
V..... r210 Uncompressed RGB 10-bit
V..... rawvideo raw video
V..... roqvideo id RoQ video (codec roq)
V..... rpza QuickTime video (RPZA)
V..... rv10 RealVideo 1.0
V..... rv20 RealVideo 2.0
V..... sgi SGI image
V..... snow Snow
V..... speedhq NewTek SpeedHQ
V..... sunrast Sun Rasterfile image
V..... svq1 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1
V..... targa Truevision Targa image
V..... libtheora libtheora Theora (codec theora)
VF.... tiff TIFF image
VF.... utvideo Ut Video
V..... v210 Uncompressed 4:2:2 10-bit
V..... v308 Uncompressed packed 4:4:4
V..... v408 Uncompressed packed QT 4:4:4:4
V..... v410 Uncompressed 4:4:4 10-bit
V..... libvpx libvpx VP8 (codec vp8)
V..... libvpx-vp9 libvpx VP9 (codec vp9)
V..... vp9_qsv VP9 video (Intel Quick Sync Video acceleration) (codec vp9)
V..... libwebp_anim libwebp WebP image (codec webp)
V..... libwebp libwebp WebP image (codec webp)
V..... wmv1 Windows Media Video 7
V..... wmv2 Windows Media Video 8
V..... wrapped_avframe AVFrame to AVPacket passthrough
V..... xbm XBM (X BitMap) image
V..... xface X-face image
V..... xwd XWD (X Window Dump) image
V..... y41p Uncompressed YUV 4:1:1 12-bit
V..... yuv4 Uncompressed packed 4:2:0
VF.... zlib LCL (LossLess Codec Library) ZLIB
V..... zmbv Zip Motion Blocks Video
2、-vcodec 参数设置 libx264 视频编码器
执行
ffmpeg -i input.mp4 -vcodec libx264 output.mp4
命令 , 将 input.mp4 输入文件转换为 H.264 编码的视频 输出到 output.mp4 输出文件中 ;
3、-vcodec 参数设置 libvpx-vp9 视频编码器
执行
ffmpeg -i input.mp4 -vcodec libvpx-vp9 output.mp4
命令 , 将 input.mp4 输入文件转换为 VP9 编码的视频 输出到 output.mp4 输出文件中 ;
七、设置视频滤镜 -vf 参数
1、-vf 参数解析
在 ffmpeg 命令中 , -vf
参数 的 作用是 设置 视频滤镜 , 可以对输入的视频流进行各种复杂的图像处理 ;
-vf
参数 的 参数值 通常是 单个滤镜 或 多个由逗号分隔的滤镜链 , 每个滤镜都可以对视频进行特定的变换效果 ;
参考 【FFmpeg】ffplay 命令行参数 ④ ( 修改窗口标题 -window_title 参数 | 设置播放循环次数 | 设置显示模式 -showmode 参数 | 设置视频滤镜 -vf 参数 ) 四、ffplay 命令行参数 - 设置视频滤镜 博客中的 视频滤镜 设置 ,
2、视频滤镜示例
执行
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4
命令 , 将输入视频 input.mp4 的尺寸调整为 1280x720 像素 , 并输出到 output.mp4 输出文件中 ;