我在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!
===================== UPDATE ===================
我使用-v 9 -loglevel 99
重新运行命令并将日志文件粘贴到:
如果有人在ffmpeg拥有真正优秀的专业知识,我会非常感谢帮助
=====================更新2 =================
我做了更多的测试,只有当我用手机垂直录制视频时才会出现问题(垂直工作的其他视频和手机水平的视频也可以工作)
==================更新3 ==================== 我用
检测到问题发生在任何视频上Metadata:
rotate : 90 (or any value)
有人建议使用-noautorotate
作为解决方法并且工作正常,但这意味着其他许多并发症:
- 如果我决定对视频应用任何过滤器,它将应用于水平版本,但视频将在垂直方向播放,产生完全不同的效果
ex: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
将删除旋转元数据并生成非旋转视频
BUT
{{1}}
将保持元数据和制作的视频将被旋转播放(这种行为也在ffmpeg网站上提供的官方ffmpeg 4.0二进制文件中注意到了)
我仍然期待更好的解决方案,感谢帮助