android ffmpeg 编码h264,android - ffmpeg for android,编码h264内存不足 - 堆栈内存溢出

在android上用ffmpeg编码视频时出现奇怪的错误

Failed to inject frame into filter network: Out of memory

Althoug是一个非常客观的错误,我确实认为这是另一个问题的“通用消息”,因为我用于测试的视频长度为17MB,长度小于11秒,并且我已经成功地对大于200MB且长度大于5分钟

这个问题发生在 任何视频 在我的手机上录制的垂直视频(这些视频在我的手机上录制并可以正常播放,但是我无法对其进行重新编码...其他视频h264在同一部手机上可以正常编码)

这是ffmpeg的输出

ffmpeg version 4.0 Copyright (c) 2000-2018 the FFmpeg developers

built with Android (4691093 based on r316199) clang version 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f) (https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)

configuration: --prefix=/home/rafa/Desktop/m4/build --target-os=android --arch=i686 --cpu=i686 --cross-prefix=/home/rafa/Desktop/m4/ndk/toolchain/i686/bin/i686-linux-android- --enable-cross-compile --cc=/home/rafa/Desktop/m4/ndk/toolchain/i686/bin/clang --cxx=/home/rafa/Desktop/m4/ndk/toolchain/i686/bin/clang++ --pkg-config=/usr/bin/pkg-config --pkg-config-flags=--static --enable-pic --enable-gpl --enable-nonfree --enable-static --disable-shared --enable-ffmpeg --disable-ffplay --disable-ffprobe --disable-doc --disable-devices --enable-libx264 --enable-libfdk-aac --enable-bsf=aac_adtstoasc --disable-asm

libavutil 56. 14.100 / 56. 14.100

libavcodec 58. 18.100 / 58. 18.100

libavformat 58. 12.100 / 58. 12.100

libavdevice 58. 3.100 / 58. 3.100

libavfilter 7. 16.100 / 7. 16.100

libswscale 5. 1.100 / 5. 1.100

libswresample 3. 1.100 / 3. 1.100

libpostproc 55. 1.100 / 55. 1.100

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/data/data/com.tomatedigital.toolsforinstagram/qqq.mp4':

Metadata:

major_brand : mp42

minor_version : 0

compatible_brands: isommp42

creation_time : 2018-06-09T04:28:55.000000Z

location : -08.0638-034.8723/

location-eng : -08.0638-034.8723/

com.android.version: 7.0

Duration: 00:00:09.06, start: 0.000000, bitrate: 17349 kb/s

Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 17088 kb/s, SAR 1:1 DAR 16:9, 30.04 fps, 30 tbr, 90k tbn, 180k tbc (default)

Metadata:

rotate : 90

creation_time : 2018-06-09T04:28:55.000000Z

handler_name : VideoHandle

Side data:

displaymatrix: rotation of -90.00 degrees

Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 255 kb/s (default)

Metadata:

creation_time : 2018-06-09T04:28:55.000000Z

handler_name : SoundHandle

Stream mapping:

Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))

Stream #0:1 -> #0:1 (copy)

Press [q] to stop, [?] for help

Error reinitializing filters!

Failed to inject frame into filter network: Out of memory

Error while processing the decoded data for stream #0:0

Conversion failed!

====================更新===================

我使用-v 9 -loglevel 99重新运行命令,并将日志文件粘贴到:

如果有人在ffmpeg拥有真正的专业知识,我将非常感谢您的帮助

=====================更新2 ==================

我进行了更多测试,并且仅当我用手机垂直录制视频时问题才发生(垂直作品中的其他视频和手机中水平作品中的视频也可以工作)

==================更新3 ====================我检测到问题的任何视频都与

Metadata:

rotate : 90 (or any value)

建议使用-noautorotate作为解决方法,并且可以解决此问题,但这意味着大量其他并发症,例如:

-如果我决定对视频应用任何滤镜,它将应用于水平版本,但视频将在垂直方向播放,产生完全不同的效果

例如: https : //i.stack.imgur.com/R3jXJ.jpg (在此照片上,drawtext过滤器应放在水平文本的底行,但由于ffmpeg无法处理方向,因此在运行时会错位并旋转产生此垂直消息)

-我检查了一下,如果我设置了-metadata:s:v:0 rotate=则认为它无效,例如:

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate= output.mp4

将删除旋转元数据并生成非旋转视频

ffmpeg -i input.mp4 -c:v libx264 -metadata:s:v:0 rotate= output.mp4

会保留元数据,并旋转播放产生的视频(在ffmpeg网站上提供的适用于Windows的ffmpeg 4.0官方二进制文件中也注意到了这一现象)

我仍然在寻找更好的解决方案,谢谢您的帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值