You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React-Native FFmpeg-kit iOS端hevc_videotoolbox编码失败求助

问题

使用ffmpeg-kit-react-native@6.0.2在React Native中实现H264转HEVC编码,iOS端hevc_videotoolbox编码器报错无法工作。

当前代码:

// iOS 端逻辑
await FFmpegKit.execute(`-i ${videoUri} -c:v hevc_videotoolbox  -c:a aac -tag:v hvc1 -movflags +faststart -y ${outputUri}`);
// Android 端逻辑
await FFmpegKit.execute(`-i ${videoUri} -c:v hevc_omx -c:a aac -tag:v hvc1 -movflags +faststart -y ${outputUri}`);

错误日志:

LOG    libavutil      58.  2.100 / 58.  2.100
LOG    libavcodec     60.  3.100 / 60.  3.100
LOG    libavformat    60.  3.100 / 60.  3.100
LOG    libavdevice    60.  1.100 / 60.  1.100
LOG    libavfilter     9.  3.100 /  9.  3.100
LOG    libswscale      7.  1.100 /  7.  1.100
LOG    libswresample   4. 10.100 /  4. 10.100
LOG  Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 
LOG    Metadata:
LOG      major_brand     :
LOG  mp42
LOG  
LOG      minor_version   :
LOG  1
LOG  
LOG      compatible_brands:
LOG  isommp41mp42
LOG  
LOG      creation_time   :
LOG  2024-08-29T02:42:24.000000Z
LOG  
LOG    Duration:
LOG  00:00:23.10
LOG  , start:
LOG  0.000000
LOG  , bitrate:
LOG  1223 kb/s
LOG  
LOG    Stream #0:0
LOG  [0x1]
LOG  (und)
LOG  : Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 1220 kb/s
LOG  ,
LOG  30 fps,
LOG  30 tbr,
LOG  600 tbn
LOG   (default)
LOG  
LOG      Metadata:
LOG        creation_time   :
LOG  2024-08-29T02:42:24.000000Z
LOG  
LOG        handler_name    :
LOG  Core Media Video
LOG  
LOG        vendor_id       :
LOG  [0][0][0][0]
LOG  
LOG  Stream mapping:
LOG    Stream #0:0 -> #0:0
LOG   (h264 (native) -> hevc (hevc_videotoolbox))
LOG  
LOG  Press [q] to stop, [?] for help
LOG  [hevc_videotoolbox @ 0x11af89120] Error encoding frame: -12905
LOG  [hevc_videotoolbox @ 0x11af89120] popping: -542398533
LOG  [vost#0:0/hevc_videotoolbox @ 0x11af88e50] Error initializing output stream: Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
LOG  Conversion failed!

已尝试相关方案但无效,需求是在iOS和Android端实现视频压缩以降低存储成本。

修复方案

1. 补充硬编码必要参数

hevc_videotoolbox对参数格式要求严格,需明确指定分辨率对齐规则和像素格式:

// iOS 端修正命令
await FFmpegKit.execute(`-i ${videoUri} -c:v hevc_videotoolbox -vf scale=trunc(iw/2)*2:trunc(ih/2)*2 -pix_fmt yuv420p -c:a aac -tag:v hvc1 -movflags +faststart -y ${outputUri}`);
  • scale=trunc(iw/2)*2:trunc(ih/2)*2:强制分辨率为偶数,Videotoolbox不支持奇数分辨率编码
  • -pix_fmt yuv420p:指定通用兼容的像素格式,避免格式不匹配导致的编码失败

2. 切换软件编码器作为备选

如果硬编码仍失败,可使用FFmpeg内置的软件HEVC编码器libx265(需确保安装的FFmpeg Kit包含该组件,full或full-gpl版本已内置):

// iOS 端备选命令
await FFmpegKit.execute(`-i ${videoUri} -c:v libx265 -crf 28 -c:a aac -tag:v hvc1 -movflags +faststart -y ${outputUri}`);
  • -crf 28:控制视频质量与体积平衡,数值越大文件越小,可在0-51区间调整

3. 确认FFmpeg Kit包类型

检查安装的FFmpeg Kit是否包含硬编码组件,min或basic包可能缺少hevc_videotoolbox,建议安装完整包:

npm install ffmpeg-kit-react-native-full@6.0.2 --save

4. 验证文件访问权限

确保videoUri和outputUri对应的路径在iOS上有合法访问权限,需提前通过权限库申请相册/文件读写权限。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:07:31