20.
@无名啊,至于B站的压制,我觉得要么是CPU集群,要么是GPU集群,也没有其他什么好选择了。电视直播才会用很贵的实时流式编码器。
21.
@老虎会游泳,我觉得应该会有专用硬件编码方案才对。CPU 转,老慢老贵了
以前听说过 FPGA 啥的,但没具体了解
22.
@无名啊,所以是什么需求让你如此关心编码器的视频质量呢?你的存储很紧缺吗,还是说你直接面向最终用户进行交付?
23.
@无名啊,专用硬件编码方案可不见得比CPU和GPU便宜,毕竟产量比CPU和GPU小多了。规模效应带来的成本下降是非常可观的。
24.
@老虎会游泳,以前转录像视频时捣鼓过一点。毕竟太大了,想质量损失不大情况下,尽量压小一点儿
25.
@老虎会游泳,@tasy5kg 先开始说硬件编码的,我只是扯远了一点。。
26.
@无名啊,那我只能说,在我非常有限的几次HEVC_NVENC压制经历中,它的输出让我满意。至于其他方案,我没有用过,所以无法评论。
28.
Android 手机的多媒体编解码器列表
通过此 Kotlin 代码获取:
MediaCodecList(MediaCodecList.ALL_CODECS).codecInfos.filter { !it.isAlias }.joinToString("\n") {
"| " + listOf(it.name, it.isHardwareAccelerated, it.supportedTypes.joinToString(", ")).joinToString(" | ") + " |"
}
Redmi K60 Pro (Snapdragon 8G2)
| Name | Hwaccel | Supported Types |
|---------------------------------|---------|---------------------------------------|
| c2.qti.alac.sw.decoder | true | audio/alac |
| c2.qti.ape.sw.decoder | true | audio/x-ape |
| c2.qti.dsd.sw.decoder | true | audio/dsd |
| c2.qti.amrwbplus.hw.decoder | true | audio/amr-wb-plus |
| c2.qti.amrwb+.hw.decoder | true | audio/amr-wb+ |
| c2.qti.wma.hw.decoder | true | audio/x-ms-wma |
| c2.qti.alac.hw.decoder | true | audio/alac |
| c2.qti.ape.hw.decoder | true | audio/x-ape |
| c2.dolby.ac4.decoder | false | audio/ac4 |
| c2.dolby.eac3.decoder | false | audio/ac3, audio/eac3, audio/eac3-joc |
| c2.android.aac.decoder | false | audio/mp4a-latm |
| c2.android.aac.encoder | false | audio/mp4a-latm |
| c2.android.amrnb.decoder | false | audio/3gpp |
| c2.android.amrnb.encoder | false | audio/3gpp |
| c2.android.amrwb.decoder | false | audio/amr-wb |
| c2.android.amrwb.encoder | false | audio/amr-wb |
| c2.android.flac.decoder | false | audio/flac |
| c2.android.flac.encoder | false | audio/flac |
| c2.android.g711.alaw.decoder | false | audio/g711-alaw |
| c2.android.g711.mlaw.decoder | false | audio/g711-mlaw |
| c2.android.mp3.decoder | false | audio/mpeg |
| c2.android.opus.decoder | false | audio/opus |
| c2.android.opus.encoder | false | audio/opus |
| c2.android.raw.decoder | false | audio/raw |
| c2.android.vorbis.decoder | false | audio/vorbis |
| c2.qti.avc.decoder | true | video/avc |
| c2.qti.avc.decoder.low_latency | true | video/avc |
| c2.qti.avc.decoder.secure | true | video/avc |
| c2.qti.hevc.decoder | true | video/hevc |
| c2.qti.hevc.decoder.low_latency | true | video/hevc |
| c2.qti.hevc.decoder.secure | true | video/hevc |
| c2.qti.vp9.decoder | true | video/x-vnd.on2.vp9 |
| c2.qti.vp9.decoder.low_latency | true | video/x-vnd.on2.vp9 |
| c2.qti.vp9.decoder.secure | true | video/x-vnd.on2.vp9 |
| c2.qti.av1.decoder | true | video/av01 |
| c2.qti.av1.decoder.low_latency | true | video/av01 |
| c2.qti.av1.decoder.secure | true | video/av01 |
| c2.qti.avc.encoder | true | video/avc |
| c2.qti.hevc.encoder | true | video/hevc |
| c2.qti.hevc.encoder.cq | true | video/hevc |
| c2.qti.heic.encoder | true | image/vnd.android.heic |
| c2.qti.flac.sw.decoder | true | audio/flac |
| c2.qti.aac.hw.decoder | true | audio/mp4a-latm |
| c2.qti.aac.hw.encoder | true | audio/mp4a-latm |
| c2.qti.amrnb.hw.encoder | true | audio/3gpp |
| c2.qti.amrwb.hw.encoder | true | audio/amr-wb |
| c2.dolby.decoder.hevc | true | video/dolby-vision |
| c2.dolby.decoder.hevc.secure | true | video/dolby-vision |
| c2.android.av1.decoder | false | video/av01 |
| c2.android.avc.decoder | false | video/avc |
| c2.android.avc.encoder | false | video/avc |
| c2.android.h263.decoder | false | video/3gpp |
| c2.android.h263.encoder | false | video/3gpp |
| c2.android.hevc.decoder | false | video/hevc |
| c2.android.hevc.encoder | false | video/hevc |
| c2.android.mpeg4.decoder | false | video/mp4v-es |
| c2.android.mpeg4.encoder | false | video/mp4v-es |
| c2.android.vp8.decoder | false | video/x-vnd.on2.vp8 |
| c2.android.vp8.encoder | false | video/x-vnd.on2.vp8 |
| c2.android.vp9.decoder | false | video/x-vnd.on2.vp9 |
| c2.android.vp9.encoder | false | video/x-vnd.on2.vp9 |
Redmi K40 (Snapdragon 870)
| Name | Hwaccel | Supported Types |
|-------------------------------------|---------|------------------------|
| OMX.dolby.ac3.decoder | true | audio/ac3 |
| OMX.dolby.ac4.decoder | true | audio/ac4 |
| OMX.dolby.eac3.decoder | true | audio/eac3 |
| OMX.dolby.eac3-joc.decoder | true | audio/eac3-joc |
| OMX.qcom.video.encoder.heic | true | image/vnd.android.heic |
| OMX.qcom.video.decoder.avc | true | video/avc |
| OMX.qcom.video.decoder.avc.secure | true | video/avc |
| OMX.qti.video.decoder.h263sw | true | video/3gpp |
| OMX.qcom.video.decoder.hevc | true | video/hevc |
| OMX.qcom.video.decoder.hevc.secure | true | video/hevc |
| OMX.qcom.video.decoder.mpeg2 | true | video/mpeg2 |
| OMX.qcom.video.decoder.mpeg2.secure | true | video/mpeg2 |
| OMX.qti.video.decoder.mpeg4sw | true | video/mp4v-es |
| OMX.qcom.video.decoder.vp8 | true | video/x-vnd.on2.vp8 |
| OMX.qcom.video.decoder.vp9 | true | video/x-vnd.on2.vp9 |
| OMX.qcom.video.decoder.vp9.secure | true | video/x-vnd.on2.vp9 |
| OMX.qcom.video.encoder.avc | true | video/avc |
| OMX.qcom.video.encoder.h263sw | true | video/3gpp |
| OMX.qcom.video.encoder.hevc | true | video/hevc |
| OMX.qcom.video.encoder.hevc.cq | true | video/hevc |
| OMX.qcom.video.encoder.vp8 | true | video/x-vnd.on2.vp8 |
| c2.android.aac.decoder | false | audio/mp4a-latm |
| c2.android.aac.encoder | false | audio/mp4a-latm |
| c2.android.amrnb.decoder | false | audio/3gpp |
| c2.android.amrnb.encoder | false | audio/3gpp |
| c2.android.amrwb.decoder | false | audio/amr-wb |
| c2.android.amrwb.encoder | false | audio/amr-wb |
| c2.android.flac.decoder | false | audio/flac |
| c2.android.flac.encoder | false | audio/flac |
| c2.android.g711.alaw.decoder | false | audio/g711-alaw |
| c2.android.g711.mlaw.decoder | false | audio/g711-mlaw |
| c2.android.mp3.decoder | false | audio/mpeg |
| c2.android.opus.decoder | false | audio/opus |
| c2.android.opus.encoder | false | audio/opus |
| c2.android.raw.decoder | false | audio/raw |
| c2.android.vorbis.decoder | false | audio/vorbis |
| OMX.google.gsm.decoder | false | audio/gsm |
| c2.android.av1.decoder | false | video/av01 |
| c2.android.avc.decoder | false | video/avc |
| c2.android.avc.encoder | false | video/avc |
| c2.android.h263.decoder | false | video/3gpp |
| c2.android.h263.encoder | false | video/3gpp |
| c2.android.hevc.decoder | false | video/hevc |
| c2.android.hevc.encoder | false | video/hevc |
| c2.android.mpeg4.decoder | false | video/mp4v-es |
| c2.android.mpeg4.encoder | false | video/mp4v-es |
| c2.android.vp8.decoder | false | video/x-vnd.on2.vp8 |
| c2.android.vp8.encoder | false | video/x-vnd.on2.vp8 |
| c2.android.vp9.decoder | false | video/x-vnd.on2.vp9 |
| c2.android.vp9.encoder | false | video/x-vnd.on2.vp9 |
| c2.qti.avc.decoder | true | video/avc |
| c2.qti.avc.encoder | true | video/avc |
Redmi Note 7 (Snapdragon 660)
| Name | Hwaccel | Supported Types |
|-------------------------------------|---------|---------------------|
| OMX.qcom.video.decoder.avc | true | video/avc |
| OMX.qcom.video.decoder.avc.secure | true | video/avc |
| OMX.qcom.video.decoder.h263 | true | video/3gpp |
| OMX.qcom.video.decoder.hevc | true | video/hevc |
| OMX.qcom.video.decoder.hevc.secure | true | video/hevc |
| OMX.qcom.video.decoder.mpeg2 | true | video/mpeg2 |
| OMX.qcom.video.decoder.mpeg2.secure | true | video/mpeg2 |
| OMX.qcom.video.decoder.mpeg4 | true | video/mp4v-es |
| OMX.qcom.video.decoder.vp8 | true | video/x-vnd.on2.vp8 |
| OMX.qcom.video.decoder.vp9 | true | video/x-vnd.on2.vp9 |
| OMX.qcom.video.decoder.vp9.secure | true | video/x-vnd.on2.vp9 |
| OMX.qcom.video.encoder.avc | true | video/avc |
| OMX.qcom.video.encoder.h263 | true | video/3gpp |
| OMX.qcom.video.encoder.hevc | true | video/hevc |
| OMX.qcom.video.encoder.mpeg4 | true | video/mp4v-es |
| OMX.qcom.video.encoder.vp8 | true | video/x-vnd.on2.vp8 |
| OMX.google.aac.decoder | false | audio/mp4a-latm |
| OMX.google.amrnb.decoder | false | audio/3gpp |
| OMX.google.amrwb.decoder | false | audio/amr-wb |
| OMX.google.flac.decoder | false | audio/flac |
| OMX.google.g711.alaw.decoder | false | audio/g711-alaw |
| OMX.google.g711.mlaw.decoder | false | audio/g711-mlaw |
| OMX.google.gsm.decoder | false | audio/gsm |
| OMX.google.mp3.decoder | false | audio/mpeg |
| OMX.google.raw.decoder | false | audio/raw |
| OMX.google.vorbis.decoder | false | audio/vorbis |
| OMX.google.aac.encoder | false | audio/mp4a-latm |
| OMX.google.amrnb.encoder | false | audio/3gpp |
| OMX.google.amrwb.encoder | false | audio/amr-wb |
| OMX.google.flac.encoder | false | audio/flac |
| c2.android.aac.decoder | false | audio/mp4a-latm |
| c2.android.aac.encoder | false | audio/mp4a-latm |
| c2.android.amrnb.decoder | false | audio/3gpp |
| c2.android.amrnb.encoder | false | audio/3gpp |
| c2.android.amrwb.decoder | false | audio/amr-wb |
| c2.android.amrwb.encoder | false | audio/amr-wb |
| c2.android.flac.decoder | false | audio/flac |
| c2.android.flac.encoder | false | audio/flac |
| c2.android.g711.alaw.decoder | false | audio/g711-alaw |
| c2.android.g711.mlaw.decoder | false | audio/g711-mlaw |
| c2.android.mp3.decoder | false | audio/mpeg |
| c2.android.opus.decoder | false | audio/opus |
| c2.android.opus.encoder | false | audio/opus |
| c2.android.raw.decoder | false | audio/raw |
| c2.android.vorbis.decoder | false | audio/vorbis |
| c2.android.av1.decoder | false | video/av01 |
| c2.android.avc.decoder | false | video/avc |
| c2.android.avc.encoder | false | video/avc |
| c2.android.h263.decoder | false | video/3gpp |
| c2.android.h263.encoder | false | video/3gpp |
| c2.android.hevc.decoder | false | video/hevc |
| c2.android.hevc.encoder | false | video/hevc |
| c2.android.mpeg4.decoder | false | video/mp4v-es |
| c2.android.mpeg4.encoder | false | video/mp4v-es |
| c2.android.vp8.decoder | false | video/x-vnd.on2.vp8 |
| c2.android.vp8.encoder | false | video/x-vnd.on2.vp8 |
| c2.android.vp9.decoder | false | video/x-vnd.on2.vp9 |
| c2.android.vp9.encoder | false | video/x-vnd.on2.vp9 |
Redmi 9 (Helio G80)
| Name | Hwaccel | Supported Types |
|----------------------------------|---------|-----------------------|
| OMX.MTK.AUDIO.DECODER.MP3 | true | audio/mpeg |
| c2.android.aac.decoder | false | audio/mp4a-latm |
| c2.android.aac.encoder | false | audio/mp4a-latm |
| c2.android.amrnb.decoder | false | audio/3gpp |
| c2.android.amrnb.encoder | false | audio/3gpp |
| c2.android.amrwb.decoder | false | audio/amr-wb |
| c2.android.amrwb.encoder | false | audio/amr-wb |
| c2.android.flac.decoder | false | audio/flac |
| c2.android.flac.encoder | false | audio/flac |
| c2.android.g711.alaw.decoder | false | audio/g711-alaw |
| c2.android.g711.mlaw.decoder | false | audio/g711-mlaw |
| c2.android.mp3.decoder | false | audio/mpeg |
| c2.android.opus.decoder | false | audio/opus |
| c2.android.opus.encoder | false | audio/opus |
| c2.android.raw.decoder | false | audio/raw |
| c2.android.vorbis.decoder | false | audio/vorbis |
| OMX.MTK.AUDIO.DECODER.ADPCM.MS | true | audio/x-adpcm-ms |
| OMX.MTK.AUDIO.DECODER.ADPCM.DVI | true | audio/x-adpcm-dvi-ima |
| OMX.MTK.AUDIO.DECODER.ALAC | true | audio/alac |
| OMX.MTK.AUDIO.DECODER.APE | true | audio/ape |
| OMX.MTK.AUDIO.DECODER.GSM | true | audio/gsm |
| OMX.MTK.VIDEO.DECODER.AVC | true | video/avc |
| OMX.MTK.VIDEO.DECODER.AVC.secure | true | video/avc |
| OMX.MTK.VIDEO.DECODER.DIVX | true | video/divx |
| OMX.MTK.VIDEO.DECODER.DIVX3 | true | video/divx3 |
| OMX.MTK.VIDEO.DECODER.H263 | true | video/3gpp |
| OMX.MTK.VIDEO.DECODER.HEVC | true | video/hevc |
| OMX.MTK.VIDEO.DECODER.MPEG2 | true | video/mpeg2 |
| OMX.MTK.VIDEO.DECODER.MPEG4 | true | video/mp4v-es |
| OMX.MTK.VIDEO.DECODER.VPX | true | video/x-vnd.on2.vp8 |
| OMX.MTK.VIDEO.DECODER.VP9 | true | video/x-vnd.on2.vp9 |
| OMX.MTK.VIDEO.DECODER.VC1 | true | video/x-ms-wmv |
| OMX.MTK.VIDEO.DECODER.XVID | true | video/xvid |
| OMX.MTK.VIDEO.ENCODER.AVC | true | video/avc |
| OMX.MTK.VIDEO.ENCODER.H263 | true | video/3gpp |
| OMX.MTK.VIDEO.ENCODER.HEVC | true | video/hevc |
| OMX.MTK.VIDEO.ENCODER.MPEG4 | true | video/mp4v-es |
| c2.android.av1.decoder | false | video/av01 |
| c2.android.avc.decoder | false | video/avc |
| c2.android.avc.encoder | false | video/avc |
| c2.android.h263.decoder | false | video/3gpp |
| c2.android.h263.encoder | false | video/3gpp |
| c2.android.hevc.decoder | false | video/hevc |
| c2.android.mpeg4.decoder | false | video/mp4v-es |
| c2.android.mpeg4.encoder | false | video/mp4v-es |
| c2.android.vp8.decoder | false | video/x-vnd.on2.vp8 |
| c2.android.vp8.encoder | false | video/x-vnd.on2.vp8 |
| c2.android.vp9.decoder | false | video/x-vnd.on2.vp9 |
30.
@老虎会游泳,QSVEnc 的作者,在这个月倒是测试了下 Intel Arc A380(我还没细看):
31.
@tasy5kg,能在 Termux
上通过 ffmpeg
使用这些硬件编码器吗?我想试试效果
32.
@无名啊,FFmpeg 不支持 Android 硬件编码(解码似乎可以)
33.
@tasy5kg,除了自己写安卓APP外,还有啥方法可以使用这些硬件编码嘛?
有没有人编好了APP,能直接使用啥的?
34.
@无名啊,Android 平台的视频处理工具几乎都是调用硬件编码器吧。毕竟软件编码器太慢太耗电。
MIUI 系统相册内置的“视频压缩”功能可以使用硬件 H.264/H.265 编码。
35.
@tasy5kg,看起来,调不了参数。。
还是希望起码有个命令行接口,可以方便自定义参数尝试
36.
@tasy5kg,我搜到一份高通网站上的HEVC视频编码用户手册.pdf
手册中有提到个QcHevcEncode
命令行工具,以及重新编译ffmpeg
以启用Qualcomm HEVC encoding
的方法
37.
@tasy5kg,要不开个帖子说吧,这里不方便修改回复,以后聊天室也容易被清空,这样讨论就全没了
38.
@老虎会游泳,管理员能不能把这个聊天室里的 118 ~ 153 楼,移至一个新帖子中呢?
这些都是以视频硬件编码器为主题的一些讨论,适合圈至一个帖子中,免得聊天室被清空就没了
39.
@老虎会游泳,也就是,剪切一部分回复,至另一个帖子中?