ffmpeg

First Post:

Last Update:

Word Count:
1.3k

Read Time:
5 min

下载与安装

  • 下载链接:ffmpeg-win64-动态链接版本

  • 安装:解压后将 bin 文件夹的路径加入到环境变量

  • 验证安装:ffmpeg -version,出现如下信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ffmpeg 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 encoder

    1
    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
    12
    ffmpeg -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:最低质量,文件大小最小,但可能会出现明显的压缩伪影。

常见的视频过滤器

  1. 裁剪(crop)

    • 语法crop=width:height:x:y

    • 示例

      1
      ffmpeg -i input.mp4 -vf "crop=1280:720:0:0" output.mp4

      这将从输入视频中裁剪出一个宽为 1280 像素、高为 720 像素的区域,裁剪区域的左上角坐标为 (0, 0)。

  2. 缩放(scale)

    • 语法scale=width:height

    • 示例

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

      这将把输入视频缩放到宽为 640 像素、高为 480 像素。

  3. 改变帧率(fps):

    • 语法fps=25

    • 示例

    1
    ffmpeg -i input.mp4 -vf "fps=30" output.mp4

    这将把输入视频缩放到宽为 640 像素、高为 480 像素。

  4. 旋转(rotate)

    • 语法rotate=angle

    • 示例

      1
      ffmpeg -i input.mp4 -vf "rotate=90" output.mp4

      这将把输入视频顺时针旋转 90 度。

  5. 添加水印(overlay)

    • 语法overlay=x:y

    • 示例

      1
      ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

      这将把 watermark.png 图片作为水印添加到输入视频的左上角,水印的左上角坐标为 (10, 10)。

  6. 调整颜色(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。

  7. 模糊(boxblur)

    • 语法boxblur=luma_radius:chroma_radius:luma_power:chroma_power

    • 示例

      1
      ffmpeg -i input.mp4 -vf "boxblur=10:10" output.mp4

      这将对视频应用模糊效果,模糊半径为 10。

  8. 裁剪并缩放(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 像素。

裁剪视频

  1. 指定持续时间-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 会在解码后裁剪,精度更高,但速度可能会慢一些。
  1. 指定结束时间-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
ffmpeg -i input.mp4 -vf "fps=30,scale=1920:1080" -crf 18 -y output.mp4