在我的程序中,我必须从视频和音频中删除某些帧,以便删除广告。视频存储在 .rgb 文件中,音频存储在 .wav 文件中。
视频工作正常。但是,当我尝试仅将一个 wav 文件中的几帧写入输出 wav 文件时,它在播放时会出错。
虽然程序编写正确并且我可以在 Real Player 中播放它,但当我在代码上运行它时,音频给出了一个名为 mark/reset not supported 并且无法获得位置错误的错误,以播放教授给出的 wav 文件.
我找不到写入音频功能的错误。这是功能
public void do_audioWrite() throws IOException
{
long offset=0;
long offset2=0;
int audioInfoSize = 2; //audio info is in bytes
long FRAMESIZE= 352*288*(24/8);
double MAX_POSSIBLE_FRAMES=AdvRemove.file_len/FRAMESIZE;
double AUDIO_PER_FRAME = 2000;
long videoFrames=0;
byte[] bytes = new byte[4000];
byte[] head = new byte[44];
RandomAccessFile raf = new RandomAccessFile(AdvRemove.afilename,"r");
OutputStream outputStream = new FileOutputStream(AdvRemove.write_audio);
raf.seek(0);
raf.read(head);
outputStream.write(head);
for (offset=44; ((offset < raf.length()) && (videoFrames < MAX_POSSIBLE_FRAMES)); offset+=2*AUDIO_PER_FRAME)
{
if(Group1.size()>Group2.size())
{
if(Group1.contains((int)videoFrames))
{
raf.seek(offset);
raf.read(bytes);
outputStream.write(bytes);
}
}
else if(Group1.size()<Group2.size())
{
if(Group2.contains((int)videoFrames))
{
raf.seek(offset);
raf.read(bytes);
outputStream.write(bytes);
}
}
videoFrames++;
}
}
以上是我编写音频的功能。
如果在我的名为 Group1 和 Group2 的 arrayList 中找到相应的视频帧,我只会写一个音频帧
首先,我获取输入 wav 文件的标题并将其写入输出 wav 文件。
然后我检查是否存在相应的视频帧。如果是,我写对应于该视频帧的音频帧。