视频硬件编码器相关讨论(复制自公共聊天室)

回复列表(86|隐藏机器人聊天)
  • @Ta / 2022-09-02 / /

    @tasy5kg,我喜欢同时使用Windows和Linux软件,这样就不需要做选择。

  • @Ta / 2022-09-03 / /

    @无名啊,我下载并解压了 adrenosdk-linux-5_0.tar.gz,没有发现文件名类似 libqhevc.c 的文件。

    网络上的其他帖子也没有找到:
    libqhevc.c file/library for FFMPEG on Qualcomm chipsets
    libqhevc.c / Qualcomm HEVC Encoder

    我怀疑高通只给合作的大客户提供相关文件。

  • @Ta / 2022-09-03 / /

    @tasy5kg,那我也不知道了

    高通论坛里确实也搜出来一些类似找不到的问题,但都没见过官方人员回复

    估计确实如你所说,高通只给大客户提供技术支持

  • @Ta / 2022-09-08 / /

    @无名啊,今天测试 Android 原生图像编解码(不通过 FFmpeg 等第三方库)。

    在我的手机上,常见的图片格式均可解码,WEBPHEIF 也可以解码。AVIF 不支持。

    解码之后,可以压缩为 JPEGPNGWEBP_LOSSYWEBP_LOSSLESS。压缩时,JPEGWEBP_LOSSY 可以设置 qualityWEBP_LOSSLESS 可以设置 effort

    如果使用 androidx.heifwriter 库,还可以压缩为 HEIF(未实测)。

  • @Ta / 2022-09-08 / /

    Android 原生压缩为 format = WEBP_LOSSY, quality = 75,输出图像结果与 FFmpeg 的 -c libwebp -lossless 0 -compression_level 4 -q:v 75 近乎一致。

  • @Ta / 2022-09-09 / /
    @无名啊,Windows 画图 也能读取和保存 HEIF 照片,非常意外。

    image.png(272.6 KB)
  • @Ta / 2022-09-10 / /

    @tasy5kg,我印象中,画图保存的 HEIF,没体现出来多少体积优势

    早期画图保存的 HEIF,还有颜色问题(类似这种

  • @Ta / 2022-09-10 / /

    @tasy5kgwebp转码好像不怎么耗时间

    heifavif,甚至是HEVCAV1高质量硬件转码更有意义

  • @Ta / 2022-09-10 / /

    @无名啊,Android HEIF 照片的硬件编码是可用的。在我的手机 Redmi K40 上测试,既可以使用 HEIF 专用编码器 OMX.qcom.video.encoder.heic 编码,也可以使用 HEVC 编码器 OMX.qcom.video.encoder.hevc.cq 编码。

    视频的硬件编码我还没搞定,我会继续研究。

  • @Ta / 2022-09-14 / /

    @tasy5kgH264 H265,好像都是以 yuv 为基础的吧

  • @Ta / 2023-02-08 / /

    @tasy5kg,在这聊吧。上次我试用了你 40 楼提到的 apk,感觉硬编码效果不理想。。

  • @Ta / 2023-02-09 / /
    上下文:
    #无名啊,FFmpeg据说6.0版要官方支持Android硬件编码了,期待一下
    (tasy5kg 02-08 18:08:03)
  • @Ta / 2023-07-31 / /

    @无名啊@老虎会游泳,今天在 Termux 里更新了 FFmpeg 6.0 后,发现 Android 硬件加速的 H.264 和 HEVC 编码器已经可用:

    1000014096.jpg(155.63 KB)

    实测用 hevc_mediacodec 转码一段手机拍摄好的 4K60帧视频成功:

    $ ffmpeg -hwaccel mediacodec -an -i /storage/emulated/0/DCIM/Camera/VID_20230725_194612.mp4 -c:v hevc_mediacodec /storage/emulated/0/DCIM/Camera/VID_20230725_194612_test.mp4
    
    ......
    
    frame= 1001 fps=106 q=-0.0 Lsize=    4558kB time=00:00:16.66 bitrate=2240.6kbits/s speed=1.76x
    video:4553kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.109314%
    

    但可能是因为我转码时没有调节参数,视频画质比较模糊。

  • @Ta / 2023-07-31 / /

    @tasy5kg,我试了试 这个帖子 里的视频,用默认参数转了转,结果好像还可以。。但是大小和原来差不多。。

    哪里有使用文档吗?我用 ffmpeg -h full 里说的参数,好像没起作用?

  • @Ta / 2023-07-31 / /

    @无名啊,可能那个视频已经被妥善压缩过了。我用默认参数压缩的手机拍摄的 4K60FPS 视频,体积从 104MB 压缩至 5MB,但画质大幅降低了。

    我也没找到比较完整的帮助文档,只找到了这个:

    ~ $ ffmpeg -hide_banner -h encoder=hevc_mediacodec Encoder hevc_mediacodec [H.265 Android MediaCodec encoder]: General capabilities: dr1 delay hardware Threading capabilities: none Supported hardware devices: mediacodec Supported pixel formats: mediacodec yuv420p nv12 hevc_mediacodec AVOptions: -ndk_codec <boolean> E..V....... Use MediaCodec from NDK (default auto) -codec_name <string> E..V....... Select codec by name -bitrate_mode <int> E..V....... Bitrate control method (from -1 to INT_MAX) (default -1) cq 0 E..V....... Constant quality mode vbr 1 E..V....... Variable bitrate mode cbr 2 E..V....... Constant bitrate mode cbr_fd 3 E..V....... Constant bitrate mode with frame drops -pts_as_dts <boolean> E..V....... Use PTS as DTS. It is enabled automatically if avctx max_b_frames <= 0, since most of Android devices don't output B frames by default. (default auto) -level <int> E..V....... Specify tier and level (from 0 to INT_MAX) (default 0) m1 1 E..V....... Main tier level 1 h1 2 E..V....... High tier level 1 m2 4 E..V....... Main tier level 2 h2 8 E..V....... High tier level 2 m2.1 16 E..V....... Main tier level 2.1 h2.1 32 E..V....... High tier level 2.1 m3 64 E..V....... Main tier level 3 h3 128 E..V....... High tier level 3 m3.1 256 E..V....... Main tier level 3.1 h3.1 512 E..V....... High tier level 3.1 m4 1024 E..V....... Main tier level 4 h4 2048 E..V....... High tier level 4 m4.1 4096 E..V....... Main tier level 4.1 h4.1 8192 E..V....... High tier level 4.1 m5 16384 E..V....... Main tier level 5 h5 32768 E..V....... High tier level 5 m5.1 65536 E..V....... Main tier level 5.1 h5.1 131072 E..V....... High tier level 5.1 m5.2 262144 E..V....... Main tier level 5.2 h5.2 524288 E..V....... High tier level 5.2 m6 1048576 E..V....... Main tier level 6 h6 2097152 E..V....... High tier level 6 m6.1 4194304 E..V....... Main tier level 6.1 h6.1 8388608 E..V....... High tier level 6.1 m6.2 16777216 E..V....... Main tier level 6.2 h6.2 33554432 E..V....... High tier level 6.2
  • @Ta / 2023-07-31 / /

    @无名啊
    -b:v 比特率数值
    应该会生效吧,这是个编码器通用参数。如果不生效,
    -bitrate_mode cbr -b:v 比特率数值
    或者
    -bitrate_mode vbr -b:v 比特率数值

    注意参数位置很重要,必须放在输出文件名的前面,输入文件名的后面。

  • @Ta / 2023-07-31 / /

    @老虎会游泳,噢,cbr 生效了。我之前测试 -bitrate_mode cq -q 30-xxx cq -qp 30,以及 -xxx vbr -b:v 256k,都不行。。

    咋说呢。。给了 1mbps 码率,好像还是不咋地。。设置了 GOP 为 300 帧,至少 30 帧才为一组

  • @Ta / 2023-07-31 / /

    @tasy5kg,感觉 这个帖子 说的有点道理。

    摄像/录像的视频编码器,编码质量不高,视频体积较大。主要是:

    • 保证画面质量
    • 功耗不能太高
    • 要跟得上实时速度

    所以只能牺牲视频体积了。

    所以后期用 CPU 稍微压一压,都能挤掉很多水分了。

  • @Ta / 2023-07-31 / /
    @无名啊,dwing 是什么意思
  • @Ta / 2023-07-31 / /

    @tasy5kg,好像是大佬的网名。

    以前做过类似 upx 那样,压缩可执行文件体积的小程序。

    后来还做过类似 bpg、heif 那样,利用 h265 编码成体积很小的图片。。

    我只知道这么点了。。

添加新回复
回复需要登录