ffmpeg
Last Update:
Word Count:
Read Time:
下载与安装
下载链接:ffmpeg-win64-动态链接版本
安装:解压后将
bin
文件夹的路径加入到环境变量验证安装:
ffmpeg -version
,出现如下信息1
2
3
4
5
6
7
8
9
10
11ffmpeg version N-105384-g3c831847a8-20220127 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 11.2.0 (crosstool-NG 1.24.0.498_5075e1f)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librist --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20220127
libavutil 57. 19.100 / 57. 19.100
libavcodec 59. 20.100 / 59. 20.100
libavformat 59. 17.101 / 59. 17.101
libavdevice 59. 5.100 / 59. 5.100
libavfilter 8. 26.101 / 8. 26.101
libswscale 6. 5.100 / 6. 5.100
libswresample 4. 4.100 / 4. 4.100
libpostproc 56. 4.100 / 56. 4.100
使用方法
基本使用方法:
-i
指定输入视频,-y
自动覆盖输出文件1
ffmpeg -i input.avi -y output.mp4
指定视频编码器:
-c:v
video encoder1
2
3
4# h264
ffmpeg -i input.avi -c:v libx264 output.mp4
# Nvidia GPU 加速编码(速度快但质量差)
ffmpeg -i input.avi -c:v h264_nvenc output.mp4预设编码速度:
-preset
1
2
3
4
5
6
7
8
9
10
11
12ffmpeg -i input.avi -c:v libx264 -preset [value] output.mp4
value取值如下:
- ultrafas
- superfast
- veryfast
- faster
- fast
- medium (default)
- slow
- slower
- veryslow
速度越快,压缩后文件越大控制编码视频的质量:
-crf
参数用于设置恒定质量模式(Constant Rate Factor,CRF)。它通过调整编码器的压缩级别来平衡视频质量和文件大小。1
ffmpeg -i input.mp4 -c:v libx264 -crf 18 output.mp4
- CRF 值范围:通常在 0 到 51 之间,数值越低,质量越高,文件大小也越大;数值越高,质量越低,文件大小越小。
- 推荐值:
- 18:被认为是视觉上无损的,适合高质量视频。
- 23:默认值,适合普通质量需求。
- 28:适合较低质量需求,文件大小更小。
- 51:最低质量,文件大小最小,但可能会出现明显的压缩伪影。
常见的视频过滤器
裁剪(crop)
语法:
crop=width:height:x:y
示例:
1
ffmpeg -i input.mp4 -vf "crop=1280:720:0:0" output.mp4
这将从输入视频中裁剪出一个宽为 1280 像素、高为 720 像素的区域,裁剪区域的左上角坐标为 (0, 0)。
缩放(scale)
语法:
scale=width:height
示例:
1
ffmpeg -i input.mp4 -vf "scale=640:480" output.mp4
这将把输入视频缩放到宽为 640 像素、高为 480 像素。
改变帧率(fps):
语法:
fps=25
示例:
1
ffmpeg -i input.mp4 -vf "fps=30" output.mp4
这将把输入视频缩放到宽为 640 像素、高为 480 像素。
旋转(rotate)
语法:
rotate=angle
示例:
1
ffmpeg -i input.mp4 -vf "rotate=90" output.mp4
这将把输入视频顺时针旋转 90 度。
添加水印(overlay)
语法:
overlay=x:y
示例:
1
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
这将把
watermark.png
图片作为水印添加到输入视频的左上角,水印的左上角坐标为 (10, 10)。
调整颜色(eq)
语法:
eq=brightness:contrast:saturation
示例:
1
ffmpeg -i input.mp4 -vf "eq=0.5:1.5:1.2" output.mp4
这将调整视频的亮度为 0.5、对比度为 1.5、饱和度为 1.2。
模糊(boxblur)
语法:
boxblur=luma_radius:chroma_radius:luma_power:chroma_power
示例:
1
ffmpeg -i input.mp4 -vf "boxblur=10:10" output.mp4
这将对视频应用模糊效果,模糊半径为 10。
裁剪并缩放(crop 和 scale 组合)
语法:
crop=width:height:x:y,scale=width:height
示例:
1
ffmpeg -i input.mp4 -vf "crop=1280:720:0:0,scale=640:480" output.mp4
这将先裁剪视频,然后将裁剪后的视频缩放到宽为 640 像素、高为 480 像素。
裁剪视频
指定持续时间:
-ss -t
1
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:30 output.mp4
这个命令表示从输入视频
input.mp4
的第1分30秒开始,截取30秒的内容,保存为output.mp4
。
注意事项
- 精度问题:
-ss
参数在某些情况下可能会有精度问题,尤其是在使用硬件加速或某些特定的编解码器时。如果需要高精度裁剪,建议在解码后使用-ss
参数。- 位置:
-ss
参数的位置很重要。如果放在-i
参数之前,ffmpeg
会在解码时跳过指定的时间,这可能会更快,但精度较低。如果放在-i
参数之后,ffmpeg
会在解码后裁剪,精度更高,但速度可能会慢一些。
指定结束时间:
-ss -to
1
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:00 output.mp4
这个命令表示从输入视频
input.mp4
的第1分30秒开始,处理到第2分钟结束,保存为output.mp4
。
总结
1 |
|