在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官方二进制文件中也注意到了这一现象)

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

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

  1. Android消息向下堆积,android - 从CoordinatorLayout中的按钮单击事件触发NestedScroll折叠动作 - 堆栈内存溢出...

    我有一个CoordinatorLayout,它包含一个ViewPager,该控件使用嵌套的滚动行为可以正常滚动. 但是,我想在单击按钮时触发滚动/折叠行为. 如何通过单击按钮来控制这种崩溃行为. 通过 ...

  2. android 数据库 字节数组,java - 如何使用活动的android序列化字节数组并将其存储到数据库中? - 堆栈内存溢出...

    我有一个图像作为byte[] ,我需要将此图像保存在数据库中. 我为此使用Active Android库. 我知道db中用于此目的的数据类型应该是BLOB. 我知道byte[]不能直接存储,我知道它应 ...

  3. android7.0模拟器调试,android - 为什么在android 7.0及更高版本上出现模拟器错误? - 堆栈内存溢出...

    我正在开发将联系人保存在.vcf文件中的应用程序. 当我运行模拟器来测试应用程序时,我还会收到以下错误. 应用程序正在物理设备上运行. 但是android 7.0及更高版本的模拟器也给出了错误. (警 ...

  4. android flv 编码器,Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载)...

    Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载) 项目地址 https://github.com/979451341/RtmpSave 这个项目主要代码 ...

  5. 安卓和Linux动态库一样吗,在Linux环境下编译Android下的最新版ffmpeg+x264单个动态库(.so)...

    最近在mac下用ndk交叉编译最ffmpeg出问题,总是显示用系统的gcc而不是ndk的toolchain的交叉编译gcc来编译的.之前明明没问题的,可能是由于最近升级macOS导致的.由于对这方面实 ...

  6. 最简单的基于FFmpeg的移动端例子:Android HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  7. 视频教程-FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器-Android

    FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器 从事Android移动端开发多年.主导开发过直播.电商.聊天等各种类型APP和游戏SDK:熟悉Android音视频开发 ...

  8. Android录屏并利用FFmpeg转换成gif(一)录屏

    Android录屏并利用FFmpeg转换成gif(一) 录屏 写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲 ...

  9. Android录屏并利用FFmpeg转换成gif(二)交叉编译FFmpeg源码

    Android录屏并利用FFmpeg转换成gif(二) 写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲这种方 ...

最新文章

  1. 【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)
  2. mytag.class.php,织梦CMS/dedecms织梦模板留言板调用{dede:}标签的头部尾部的方法
  3. golang: 类型转换和类型断言
  4. 做安全操作系统,这位技术老兵是认真的!
  5. vue04-components
  6. 元胞计算机系统,元胞自动机
  7. ASP.NET缓存中Cache过期的三种策略
  8. linux RAID10测试
  9. Windows下安装 rubyinstaller
  10. win7 共享wifi 手机如何上网
  11. webassembly介绍
  12. Windows安全日志
  13. 解决:ADODB.Stream 错误 '800a0bbc' 写入文件失败
  14. A Persona-Based Neural Conversation Model论文
  15. TDS协议和FreeTDS开源实现
  16. 前端练习41 数组的空位填充
  17. teamcenter 异步服务_Teamcenter 11版本最新特征
  18. 简单学生选课系统之登录界面
  19. 怎么生产mysql.scok_如何更改生产MySQL数据库库表的字符集
  20. 常见加密分类以及接口sign签名

热门文章

  1. Linux shell判断cpu架构
  2. ProGuard的作用、使用及bug分析
  3. 关于TrueType字体结构的文章
  4. 重磅盘点:世界名校计算机专业必读的10本经典神书
  5. mysql 主键 自增_MySQL自增主键详解
  6. [ 英语 - 特别收录系列 ] 语法重塑专栏 之 时态 (Tense) —— 英语兔学习笔记(3)
  7. (C语言)八大排序之:归并排序
  8. FreeMarker生成word-定义模板步骤(带表格且含合并单元格)
  9. oracle 分隔符 0x05,sqlserver2005导出到oracle10错误 0xc0202009: 数据流任务 ROW-00060
  10. 博客马拉松|和 OpenMLDB 一路向前