60.
@tasy5kg,我喜欢同时使用Windows和Linux软件,这样就不需要做选择。
61.
@无名啊,我下载并解压了 adrenosdk-linux-5_0.tar.gz
,没有发现文件名类似 libqhevc.c
的文件。
网络上的其他帖子也没有找到:
libqhevc.c file/library for FFMPEG on Qualcomm chipsets
libqhevc.c / Qualcomm HEVC Encoder
我怀疑高通只给合作的大客户提供相关文件。
62.
@tasy5kg,那我也不知道了
高通论坛里确实也搜出来一些类似找不到的问题,但都没见过官方人员回复
估计确实如你所说,高通只给大客户提供技术支持
63.
@无名啊,今天测试 Android 原生图像编解码(不通过 FFmpeg 等第三方库)。
在我的手机上,常见的图片格式均可解码,WEBP
和 HEIF
也可以解码。AVIF
不支持。
解码之后,可以压缩为 JPEG
、PNG
、WEBP_LOSSY
、WEBP_LOSSLESS
。压缩时,JPEG
和 WEBP_LOSSY
可以设置 quality
,WEBP_LOSSLESS
可以设置 effort
。
如果使用 androidx.heifwriter
库,还可以压缩为 HEIF
(未实测)。
64.
Android 原生压缩为 format = WEBP_LOSSY, quality = 75
,输出图像结果与 FFmpeg 的 -c libwebp -lossless 0 -compression_level 4 -q:v 75
近乎一致。
65.
@无名啊,Windows 画图 也能读取和保存 HEIF 照片,非常意外。
66.
@tasy5kg,我印象中,画图保存的 HEIF
,没体现出来多少体积优势
早期画图保存的 HEIF
,还有颜色问题(类似这种)
67.
@tasy5kg,webp
转码好像不怎么耗时间
heif
和avif
,甚至是HEVC
或AV1
高质量硬件转码更有意义
68.
@无名啊,Android HEIF 照片的硬件编码是可用的。在我的手机 Redmi K40 上测试,既可以使用 HEIF 专用编码器 OMX.qcom.video.encoder.heic
编码,也可以使用 HEVC 编码器 OMX.qcom.video.encoder.hevc.cq
编码。
视频的硬件编码我还没搞定,我会继续研究。
70.
@tasy5kg,H264
H265
,好像都是以 yuv
为基础的吧
71.
@tasy5kg,在这聊吧。上次我试用了你 40 楼提到的 apk,感觉硬编码效果不理想。。
72. 上下文:
#无名啊,FFmpeg据说6.0版要官方支持Android硬件编码了,期待一下
(tasy5kg 02-08 18:08:03)
73.
@无名啊,@老虎会游泳,今天在 Termux 里更新了 FFmpeg 6.0 后,发现 Android 硬件加速的 H.264 和 HEVC 编码器已经可用:
实测用 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%
但可能是因为我转码时没有调节参数,视频画质比较模糊。
74.
@tasy5kg,我试了试 这个帖子 里的视频,用默认参数转了转,结果好像还可以。。但是大小和原来差不多。。
哪里有使用文档吗?我用 ffmpeg -h full
里说的参数,好像没起作用?
75.
@无名啊,可能那个视频已经被妥善压缩过了。我用默认参数压缩的手机拍摄的 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
76.
@无名啊,
-b:v 比特率数值
应该会生效吧,这是个编码器通用参数。如果不生效,
-bitrate_mode cbr -b:v 比特率数值
或者
-bitrate_mode vbr -b:v 比特率数值
注意参数位置很重要,必须放在输出文件名的前面,输入文件名的后面。
77.
@老虎会游泳,噢,cbr
生效了。我之前测试 -bitrate_mode cq -q 30
或 -xxx cq -qp 30
,以及 -xxx vbr -b:v 256k
,都不行。。
咋说呢。。给了 1mbps 码率,好像还是不咋地。。设置了 GOP 为 300 帧,至少 30 帧才为一组
78.
@tasy5kg,感觉 这个帖子 说的有点道理。
摄像/录像的视频编码器,编码质量不高,视频体积较大。主要是:
所以只能牺牲视频体积了。
所以后期用 CPU 稍微压一压,都能挤掉很多水分了。
80.
@tasy5kg,好像是大佬的网名。
以前做过类似 upx 那样,压缩可执行文件体积的小程序。
后来还做过类似 bpg、heif 那样,利用 h265 编码成体积很小的图片。。
我只知道这么点了。。