Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android FFmpeg中的amix过滤器根据mp3输入而失败_Android_Ffmpeg_Mp3 - Fatal编程技术网

Android FFmpeg中的amix过滤器根据mp3输入而失败

Android FFmpeg中的amix过滤器根据mp3输入而失败,android,ffmpeg,mp3,Android,Ffmpeg,Mp3,在android应用程序中,我使用amix过滤器合并两个mp3文件。现在,有时它工作,有时它给出了一个内存不足的错误取决于什么对mp3输入它采取。我将FFmpeg日志粘贴到这里,用于合并两个不同mp3文件的两个不同执行 由于内存不足,此操作失败: Input #0, mp3, from '/storage/emulated/0/beatmachine/esplode/1.mp3': Duration: 00:00:00.37, start: 0.000000, bitrate: 137 kb

在android应用程序中,我使用amix过滤器合并两个mp3文件。现在,有时它工作,有时它给出了一个内存不足的错误取决于什么对mp3输入它采取。我将FFmpeg日志粘贴到这里,用于合并两个不同mp3文件的两个不同执行

由于内存不足,此操作失败:

Input #0, mp3, from '/storage/emulated/0/beatmachine/esplode/1.mp3':
  Duration: 00:00:00.37, start: 0.000000, bitrate: 137 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
[mp3 @ 0xb5b9f600] Skipping 0 bytes of junk at 417.
Input #1, mp3, from '/storage/emulated/0/beatmachine/esplode/7.mp3':
  Duration: 00:00:01.78, start: 0.000000, bitrate: 129 kb/s
    Stream #1:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
Output #0, mp3, to '/storage/emulated/0/beatmachine/esplode/8.mp3':
  Metadata:
    TSSE            : Lavf57.25.100
    Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavc57.24.102 libmp3lame
Stream mapping:
  Stream #0:0 (mp3) -> amix:input0
  Stream #1:0 (mp3) -> amix:input1
  amix -> Stream #0:0 (libmp3lame)
Press [q] to stop, [?] for help
Error while filtering: Out of memory
size=       5kB time=00:00:00.36 bitrate= 105.0kbits/s speed=1.51x    
video:0kB audio:4kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 5.548245%
这很好用:

Input #0, mp3, from '/storage/emulated/0/beatmachine/esplode/2.mp3':
  Duration: 00:00:01.36, start: 0.025057, bitrate: 195 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 195 kb/s
[mp3 @ 0xb5c5f600] Skipping 0 bytes of junk at 417.
Input #1, mp3, from '/storage/emulated/0/beatmachine/esplode/4.mp3':
  Duration: 00:00:00.21, start: 0.000000, bitrate: 143 kb/s
    Stream #1:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
Output #0, mp3, to '/storage/emulated/0/beatmachine/esplode/8.mp3':
  Metadata:
    TSSE            : Lavf57.25.100
    Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavc57.24.102 libmp3lame
Stream mapping:
  Stream #0:0 (mp3) -> amix:input0
  Stream #1:0 (mp3) -> amix:input1
  amix -> Stream #0:0 (libmp3lame)
Press [q] to stop, [?] for help
size=       7kB time=00:00:00.73 bitrate=  79.6kbits/s speed=1.45x    
size=      13kB time=00:00:01.33 bitrate=  77.0kbits/s speed=1.76x    
video:0kB audio:12kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.010969%
这是我要传递给FFmpeg的参数:

[-i, input1, -i, input2, -filter_complex, amix=inputs=2:duration=longest[aout], -map, [aout], -ac, 2, -c:a, libmp3lame, -q:a, 9, outputmp3]

这两对文件有什么不同之处,一个失败,另一个正常工作?

我最终发现了问题所在。当第一个输入短于第二个输入时,会出现内存不足错误,并且当第一个输入结束时,输出是一个被截断的mp3文件,尽管在ffmpeg命令中I指定了duration=longest。
在我的例子中,解决方案就是计算最长的输入并将其设置为第一个。我还认为这是我正在使用的ffmpeg版本的一个缺陷,我希望它在较新的版本中得到纠正。

1。从不起作用的命令中提供完整的控制台输出/日志。2.提供两个不起作用的输入。3.尝试git master分支的最新版本的ffmpeg。