Java 使用ffmpeg导出.ogg音频包

Java 使用ffmpeg导出.ogg音频包,java,ffmpeg,ogg,Java,Ffmpeg,Ogg,我的目的是从磁盘读取一个简单的.ogg文件,并将所有音频包作为多个.ogg文件再次导出到磁盘 //创建AVIOContext(主) //读取数据包并将其写入磁盘 最后,这是我的回调函数: 事实上,这段代码运行得很好,但我对数据包有一些问题。我想一个接一个地导出每个数据包,但是对于test.ogg,回调函数每50个数据包调用一次(50个数据包=1秒),其他音频文件的这个数字会改变 如何控制回调以及是否可以将声音包逐个提取为.ogg文件 AVIOContext avio = avio

我的目的是从磁盘读取一个简单的.ogg文件,并将所有音频包作为多个.ogg文件再次导出到磁盘

//创建AVIOContext(主)

//读取数据包并将其写入磁盘

最后,这是我的回调函数:

事实上,这段代码运行得很好,但我对数据包有一些问题。我想一个接一个地导出每个数据包,但是对于test.ogg,回调函数每50个数据包调用一次(50个数据包=1秒),其他音频文件的这个数字会改变

如何控制回调以及是否可以将声音包逐个提取为.ogg文件

        AVIOContext avio = avio_alloc_context(new BytePointer(av_malloc(BUFFER_SIZE)), 
        BUFFER_SIZE, 1, outputFormatContext, null, writeCallback, null);
        outputFormatContext.pb(avio);
        ret = avformat_write_header(outputFormatContext, (AVDictionary)null);

       
 AVPacket pkt = new AVPacket();
    while (av_read_frame(inputFormatContext, pkt) >= 0) 
    {
        
        ret = av_write_frame(outputFormatContext, pkt);
        if (ret != 0) {
            System.out.println("Write frame is failed ");
        }
        
        av_packet_unref(pkt);
    }
static int BUFFER_SIZE = 8192;
    static class WriteCallback extends Write_packet_Pointer_BytePointer_int {
        @Override public int call(Pointer opaque, BytePointer buf, int buf_size) {
            try {
                
                File dir = new File("audio_parts");
                if (!dir.exists()) {
                    dir.mkdir();
                }
                
                FileOutputStream fos = new FileOutputStream(dir.getAbsolutePath() + "/audio_file_part" + fileCount);
                                
                byte[] b = new byte[buf_size];
                buf.get(b, 0, buf_size);
                fos.write(b, 0, buf_size);
                
                fos.close();
                fileCount++;
                return buf_size;
            }
            catch (Throwable t) {
                System.err.println("Error on OutputStream.write(): " + t);
                return -1;
            }
        }
    }

    static WriteCallback writeCallback = new WriteCallback();