1. 概述

本文描述了 MXMACA® 软件栈的FFmpeg命令行工具使用方法。

2. 编码参数

支持的编码参数,可通过ffmpeg -h查看帮助文档,如:

ffmpeg -h encoder=hevc_mxenc

支持的硬件编码器包含h264_mxenchevc_mxencmjpeg_mxenc

h264_mxenc上查看编码参数,如下所示:

ffmpeg version n4.4.3-39-g1914aedcc1-VERSION--build_data:2025-04-04_04:56:43,branch:,commit_id:1914aedcc1 Copyright (c) 2000-2022 the FFmpeg developers
   built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
   configuration: --disable-asm --enable-metax --enable-shared --enable-cross-compile --enable-gpl --enable-libx264 --enable-libx265 --enable-libaom --enable-libdavs2 --enable-libxavs2 --enable-libopus --enable-libfreetype --enable-libvmaf --enable-version3 --enable-avresample --disable-sndio --disable-xlib --disable-alsa --disable-sdl2 --extra-version='VERSION--build_data:2025-04-04_04:56:43,branch:,commit_id:1914aedcc1' --extra-cflags=-I/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/include --extra-cflags=-I/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/include/mcr --extra-cflags=-I/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/ffmpeg/thirdparty/include --extra-ldflags=-L/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/lib --extra-ldflags=-L/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/ffmpeg/thirdparty/lib --extra-libs=-lmcruntime --extra-libs=-lmxkw --extra-libs=-lmxc-runtime64 --extra-libs=-lmcimage --prefix=/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/ffmpeg
   libavutil      56. 70.100 / 56. 70.100
   libavcodec     58.134.100 / 58.134.100
   libavformat    58. 76.100 / 58. 76.100
   libavdevice    58. 13.100 / 58. 13.100
   libavfilter     7.110.100 /  7.110.100
   libavresample   4.  0.  0 /  4.  0.  0
   libswscale      5.  9.100 /  5.  9.100
   libswresample   3.  9.100 /  3.  9.100
   libpostproc    55.  9.100 / 55.  9.100
Encoder h264_mxenc [METAX VPUE H.264 encoder]:
      General capabilities: delay hardware
      Threading capabilities: none
      Supported hardware devices: metax metax
      Supported pixel formats: yuv420p yuv420p10le nv12 p010le metax
h264_mxenc AVOptions:
   -preset            <int>        E..V....... Set the encoding preset (from 0 to 5) (default faster)
      veryfast        0            E..V.......
      faster          1            E..V.......
      fast            2            E..V.......
      medium          3            E..V.......
      slow            4            E..V.......
      slower          5            E..V.......
   -profile           <int>        E..V....... Set the encoding profile (from -1 to 3) (default auto)
      auto            -1           E..V.......
      baseline        0            E..V.......
      main            1            E..V.......
      high            2            E..V.......
      high10          3            E..V.......
   -level             <int>        E..V....... Set the encoding level restriction (from -1 to 99) (default auto)
      auto            -1           E..V.......
      1               10           E..V.......
      1.0             10           E..V.......
      1b              99           E..V.......
      1.0b            99           E..V.......
      1.1             11           E..V.......
      1.2             12           E..V.......
      1.3             13           E..V.......
      2               20           E..V.......
      2.0             20           E..V.......
      2.1             21           E..V.......
      2.2             22           E..V.......
      3               30           E..V.......
      3.0             30           E..V.......
      3.1             31           E..V.......
      3.2             32           E..V.......
      4               40           E..V.......
      4.0             40           E..V.......
      4.1             41           E..V.......
      4.2             42           E..V.......
      5               50           E..V.......
      5.0             50           E..V.......
      5.1             51           E..V.......
      5.2             52           E..V.......
      6               60           E..V.......
      6.0             60           E..V.......
      6.1             61           E..V.......
      6.2             62           E..V.......
   -tune              <int>        E..V....... Video quality for different target (from -1 to 0) (default auto)
      auto            -1           E..V.......
      psnr            0            E..V.......
   -rc                <int>        E..V....... Override the preset rate-control (from -1 to 4) (default auto)
      auto            -1           E..V.......
      cbr             1            E..V....... Constant bitrate mode
      vbr             2            E..V....... Variable bitrate mode
      crf             3            E..V....... Constant rate factor mode
      constqp         4            E..V....... Constant QP mode
.......

hevc_mxenc上查看编码参数,如下所示:

 ffmpeg version n4.4.3-39-g1914aedcc1-VERSION--build_data:2025-04-04_04:56:43,branch:,commit_id:1914aedcc1 Copyright (c) 2000-2022 the FFmpeg developers
    built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
    configuration: --disable-asm --enable-metax --enable-shared --enable-cross-compile --enable-gpl --enable-libx264 --enable-libx265 --enable-libaom --enable-libdavs2 --enable-libxavs2 --enable-libopus --enable-libfreetype --enable-libvmaf --enable-version3 --enable-avresample --disable-sndio --disable-xlib --disable-alsa --disable-sdl2 --extra-version='VERSION--build_data:2025-04-04_04:56:43,branch:,commit_id:1914aedcc1' --extra-cflags=-I/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/include --extra-cflags=-I/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/include/mcr --extra-cflags=-I/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/ffmpeg/thirdparty/include --extra-ldflags=-L/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/lib --extra-ldflags=-L/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/ffmpeg/thirdparty/lib --extra-libs=-lmcruntime --extra-libs=-lmxkw --extra-libs=-lmxc-runtime64 --extra-libs=-lmcimage --prefix=/workspace/out/Release/mxc500-2.32.0.1/linux/x86_64/ffmpeg
    libavutil      56. 70.100 / 56. 70.100
    libavcodec     58.134.100 / 58.134.100
    libavformat    58. 76.100 / 58. 76.100
    libavdevice    58. 13.100 / 58. 13.100
    libavfilter     7.110.100 /  7.110.100
    libavresample   4.  0.  0 /  4.  0.  0
    libswscale      5.  9.100 /  5.  9.100
    libswresample   3.  9.100 /  3.  9.100
    libpostproc    55.  9.100 / 55.  9.100
 Encoder hevc_mxenc [METAX VPUE HEVC encoder]:
       General capabilities: delay hardware
       Threading capabilities: none
       Supported hardware devices: metax metax
       Supported pixel formats: yuv420p yuv420p10le nv12 p010le metax
 hevc_mxenc AVOptions:
    -preset            <int>        E..V....... Set the encoding preset (from 0 to 5) (default fast)
       veryfast        0            E..V.......
       faster          1            E..V.......
       fast            2            E..V.......
       medium          3            E..V.......
       slow            4            E..V.......
       slower          5            E..V.......
    -profile           <int>        E..V....... Set the encoding profile (from -1 to 3) (default auto)
       auto            -1           E..V.......
       main            0            E..V.......
       mainstillpicture 1            E..V.......
       main10          2            E..V.......
       rext            3            E..V.......
    -level             <int>        E..V....... Set the encoding level restriction (from -1 to 186) (default auto)
       auto            -1           E..V.......
       1               30           E..V.......
       1.0             30           E..V.......
       2               60           E..V.......
       2.0             60           E..V.......
       2.1             63           E..V.......
       3               90           E..V.......
       3.0             90           E..V.......
       3.1             93           E..V.......
       4               120          E..V.......
       4.0             120          E..V.......
       4.1             123          E..V.......
       5               150          E..V.......
       5.0             150          E..V.......
       5.1             153          E..V.......
       5.2             156          E..V.......
       6               180          E..V.......
       6.0             180          E..V.......
       6.1             183          E..V.......
       6.2             186          E..V.......
    -tune              <int>        E..V....... Video quality for different target (from -1 to 0) (default auto)
       auto            -1           E..V.......
       psnr            0            E..V.......
    -rc                <int>        E..V....... Override the preset rate-control (from -1 to 4) (default auto)
       auto            -1           E..V.......
       cbr             1            E..V....... Constant bitrate mode
       vbr             2            E..V....... Variable bitrate mode
       crf             3            E..V....... Constant rate factor mode
       constqp         4            E..V....... Constant QP mode
.......

3. 解码

目前解码只支持NV12像素格式输出,支持8-bit和10-bit位深。

可通过ffmpeg -h查看解码器支持的额外参数,如:

ffmpeg -h decoder=h264_mxvid

支持的解码器包含h264_mxvidhevc_mxvidav1_mxvidavs2_mxvidmjpeg_mxvid

使用示例

解码h264

ffmpeg -c:v h264_mxvid -i input.mp4 -y output.yuv

4. 编码

4.1. 输入源YUV文件

使用示例

编码hevc

ffmpeg -r 50 -s 1280x720 -pix_fmt yuv420p -i input.yuv -c:v hevc_mxenc -b:v 30000000 -r 50 output.hevc

4.2. 输入源带封装文件(转码)

目前硬解硬编有2种模式可以选择,分别为hostdevice

-device模式:解码后的图像数据一直保存在device内存上,供编码器或filters使用。

-host模式:解码器解码后yuv图像拷贝到系统内存上,供其他模块使用。性能低于device模式。

使用示例

device模式

ffmpeg -hwaccel metax -hwaccel_output_format metax -c:v hevc_mxvid -i input.ts -c:v hevc_mxenc -c:a copy -y output.mp4
ffmpeg -hwaccel metax -hwaccel_output_format metax -c:v hevc_mxvid -r 25 -b:v 3M -i input.ts -c:v hevc_mxenc -c:a copy -y output.mp4

host模式

ffmpeg -c:v hevc_mxvid -i input.ts -c:v hevc_mxenc -c:a copy -y output.mp4
ffmpeg -c:v hevc_mxvid -i input.ts -c:v hevc_mxenc -c:a copy -r 25 -b:v 3M -y output.mp4

4.3. 支持卡选择

可通过-init_hw_device选择设备,如:

-init_hw_device metax:0 //0代表第一张卡

使用示例

ffmpeg -init_hw_device metax:0 -hwaccel metax -hwaccel_output_format metax -c:v hevc_mxvid -i input.ts -c:v hevc_mxenc -c:a copy -y output.mp4

5. Filter

本章详细描述硬件支持的FFmpeg filter的参数及使用方法。

可以根据帮助文档查看当前版本的具体参数,使用方法如下:

ffmpeg -h filter=scale_metax

其中scale_metax为filter名称,可以替换成其他filter。

5.1. scale_metax

该filter用于转换图像格式和分辨率。支持的参数,参见表 5.1

表 5.1 scale_metax参数

参数

说明

w

输出的宽(默认iw)

h

输出的高(默认ih)

format

输出的格式(默认为输入格式)

in_left

输入图像中有效矩形的左上角横坐标(默认0)

in_top

输入图像中有效矩形的左上角纵坐标(默认0)

in_right

输入图像中有效矩形的右下角横坐标(默认iw)

in_bottom

输入图像中有效矩形的右下角纵坐标(默认ih)

out_left

输出图像中有效矩形的左上角横坐标(默认0)

out_top

输出图像中有效矩形的左上角纵坐标(默认0)

out_right

输出图像中有效矩形的右下角横坐标(默认ow)

out_bottom

输出图像中有效矩形的右下角纵坐标(默认ow)

flags

选择插值算法,可选值sync,blur,bicubic,bilinear(默认值)

window_size

窗口size,默认3(3*3),可选3、5

使用示例

host模式

ffmpeg -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -vf hwupload_metax,scale_metax=w=960:h=540:format=yuv420p,hwdownload -c:v hevc_mxenc -y output.mp4
ffmpeg -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -vf hwupload_metax,scale_metax_bsh=w=960:h=540:format=yuv420p,hwdownload -c:v hevc_mxenc -y output.mp4 //速度快,适用于缩放的宽高和原视频很接近

device模式

ffmpeg -hwaccel metax -hwaccel_output_format metax -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -vf scale_metax=w=640:h=320:format=yuv420p -c:v hevc_mxenc -y output_device_scale.mp4

5.2. scale_metax_bsh

该filter用于转换图像格式和分辨率,速度较快。支持的参数,参见表 5.2

表 5.2 scale_metax_bsh参数

参数

说明

w

输出的宽(默认iw)

h

输出的高(默认ih)

format

输出的格式(默认为输入格式)

in_left

输入图像中有效矩形的左上角横坐标(默认0)

in_top

输入图像中有效矩形的左上角纵坐标(默认0)

in_right

输入图像中有效矩形的右下角横坐标(默认iw)

in_bottom

输入图像中有效矩形的右下角纵坐标(默认ih)

out_left

输出图像中有效矩形的左上角横坐标(默认0)

out_top

输出图像中有效矩形的左上角纵坐标(默认0)

out_right

输出图像中有效矩形的右下角横坐标(默认ow)

out_bottom

输出图像中有效矩形的右下角纵坐标(默认ow)

使用示例

host模式

ffmpeg -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -vf hwupload_metax,scale_metax_bsh=w=960:h=540:format=yuv420p,hwdownload -c:v hevc_mxenc -y output.mp4

device模式

ffmpeg -hwaccel metax -hwaccel_output_format metax -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -vf scale_metax_bsh=w=640:h=320:format=yuv420p -c:v hevc_mxenc -y output_device_scale.mp4

5.3. overlay_metax

该filter用于图像叠加/融合。支持的参数,参见表 5.3

表 5.3 overlay_metax参数

参数

说明

x

覆盖位置(x,y)中的x,默认0

y

覆盖位置(x,y)中的y,默认0

b

是否融合,默认0,不融合

使用示例

host模式

ffmpeg -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -i 001_176x144_I420_b.jpeg -filter_complex "[0:v]hwupload_metax[base],[1:v]hwupload_metax[overlay],[base][overlay]overlay_metax=x=20:y=20" -c:v h264_mxenc -y output_jpeg.mp4

device模式

ffmpeg -hwaccel metax -hwaccel_output_format metax -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -i 001_176x144_I420_b.jpeg -filter_complex "[0:v]scale_metax=w=960:h=540[base],[1:v]hwupload_metax[overlay],[base][overlay]overlay_metax=x=10:y=10" -c:v hevc_mxenc -y output_jpeg.mp4
ffmpeg -hwaccel metax -hwaccel_output_format metax -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -i 001_176x144_I420_b.jpeg -filter_complex "[1:v]hwupload_metax[overlay],[0:v][overlay]overlay_metax=x=10:y=10" -c:v hevc_mxenc -y output_jpeg.mp4

5.4. drawbox_metax

该filter用于在图像上画框。支持的参数,参见表 5.4

表 5.4 drawbox_metax参数

参数

说明

x

画框的左上角横坐标,默认0

y

画框的左上角纵坐标,默认0

w/width

框的宽,默认0

h/height

框的高,默认0

c/color

框的颜色,默认black

t/thickness

框的厚度,默认3

使用示例

device模式

ffmpeg -hwaccel metax -hwaccel_output_format metax -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -vf drawbox_metax=x=300:y=300:w=480:h=270:color=pink:t=2 -c:v hevc_mxenc -y output_device_drawbox.mp4

5.5. crop_metax

该filter用于裁剪图像。支持的参数,参见表 5.5

表 5.5 crop_metax参数

参数

说明

w/out_w

输出图像的宽,默认iw

h/out_h

输出图像的高,默认ih

x

裁剪时左上角横坐标,默认为(in_w-out_w)/2

y

裁剪时左上角纵坐标,默认为(in_h-out_h)/2

使用示例

device模式

ffmpeg -hwaccel metax -hwaccel_output_format metax -c:v h264_mxvid -i 1920x1080_24fps_h264_mm01.mp4 -vf crop_metax=w=960:h=540:x=480:y=270 -c:v hevc_mxenc -y output_device_crop.mp4

5.6. hwupload_metax

该filter用于将图像从系统内存拷贝到设备内存,和其他filter一起使用。支持的参数参见表 5.6

表 5.6 hwupload_metax参数

参数

说明

device

硬件卡编号,默认值为0

-vf "hwupload_metax=device=1"

6. 复合型FFmpeg命令行

6.1. 多路视频合成一路

使用1080p的4图像,以2*2方式合成为一个1080p视频

ffmpeg -hwaccel mxvid -c:v h264_mxvid -i xxx0.mp4 -hwaccel mxvid -c:v h264_mxvid -i xxx1.mp4 -hwaccel mxvid -c:v h264_mxvid -i xxx2.mp4 -hwaccel mxvid -c:v h264_mxvid -i xxx3.mp4 -filter_complex "[0:v]scale_metax=w=1920:h=1080[base];[0:v]scale_metax=w=960:h=540[video_1];[1:v]scale_metax=w=960:h=540[video_2];[2:v]scale_metax=w=960:h=540[video_3];[3:v]scale_metax=w=960:h=540[video_4];[base][video_1]overlay_metax=x=0:y=0[overlay1];[overlay1][video_2]overlay_metax=x=960:y=0[overlay2];[overlay2][video_3]overlay_metax=x=0:y=540[overlay3];[overlay3][video_4]overlay_metax=x=960:y=540" -c:v h264_mxenc -y -f mp4 xxx4.mp4

6.2. 一路视频转码多路

将1路视频转码为4路

ffmpeg -i xxx0.mp4 -map 0 -c:v hevc_mxenc -preset faster -rc vbr -b:v 1M -y output1.mp4 -map 0 -c:v hevc_mxenc -preset fast -rc vbr -b:v 2M -y output2.mp4 -map 0 -c:v hevc_mxenc -preset medium -rc vbr -b:v 2M -y output3.mp4 -map 0 -c:v hevc_mxenc -preset fast -rc crf -qp 23 -y output4.mp4

6.3. 使用PNG添加水印

ffmpeg -hwaccel mxvid -c:v h264_mxvid -i Bosphorus.mp4 -i 0023.png -filter_complex "[0:v]scale_metax=format=bgra[in0];[1:v]hwupload_metax,scale_metax=format=bgra [in1];[in0][in1]overlay_metax=x=960:y=540:b=1[ov3];[ov3]scale_metax=format=nv12" -c:v h264_mxenc -f mp4 -y BrosOver.mp4

6.4. 多路解码

ffmpeg -hwaccel metax -c:v h264_mxvid -i xxx1.mp4 -hwaccel metax -c:v h264_mxvid -i xxx2.mp4 -hwaccel metax -c:v h264_mxvid -i xxx3.mp4 -map 0:v -y xxx1out.yuv -map 1:v -f rawvideo -y xxx2out.yuv -map 2:v -f rawvideo -y xxx3out.yuv

6.5. 多路转码

ffmpeg -s 1920x1080 -pix_fmt nv12 -i 1.yuv -s 1920x1080 -pix_fmt nv12 -i 2.yuv -map 0 -c:v hevc_mxenc -preset medium -rc vbr -b:v 2M -r 30 -y 1.mp4 -map 1 -c:v hevc_mxenc -preset medium -rc vbr -b:v 2M -r 25 -y 2.mp4

6.6. 多路转码

ffmpeg -hwaccel mxvid -c:v h264_mxvid -i xxx1.mp4 -hwaccel mxvid -c:v h264_mxvid -i xxx2.mp4 -hwaccel mxvid -c:v h264_mxvid -i xxx3.mp4 -map 0 -c:v hevc_mxenc -preset medium -rc vbr -b:v 2M -r 30 -y 1.mp4 -map 1 -c:v hevc_mxenc -preset medium -rc vbr -b:v 2M -r 25 -y 2.mp4 -map 2 -c:v hevc_mxenc -preset medium -rc vbr -b:v 2M -r 25 -y 3.mp4