Audio 如何无损连接ogg vorbis文件?
我正在尝试将多个ogg vorbis文件连接到一个文件中 我知道从理论上讲,它应该足以做到:Audio 如何无损连接ogg vorbis文件?,audio,concatenation,ogg,vorbis,lossless,Audio,Concatenation,Ogg,Vorbis,Lossless,我正在尝试将多个ogg vorbis文件连接到一个文件中 我知道从理论上讲,它应该足以做到: cat 1.ogg 2.ogg > combined.ogg 但这也有缺点: 并非所有玩家都支持这样创建的文件(gstreamer不支持) 这样做的玩家不会平滑地将它们连接起来,但会造成难看的瞬间停顿 寻找似乎不可能 我不想降低质量,所以我可以将它们重新编码为类似flac的无损格式,但这会让文件大小爆炸 似乎没有工具可以做到这一点。例如,oggCat将对音频进行重新编码,从而导致轻微的质量损
cat 1.ogg 2.ogg > combined.ogg
但这也有缺点:
- 并非所有玩家都支持这样创建的文件(gstreamer不支持)
- 这样做的玩家不会平滑地将它们连接起来,但会造成难看的瞬间停顿
- 寻找似乎不可能
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int read_页面(int fd、ogg_同步_状态*状态、ogg_页面*页面)
{
int ret;
ssize_t字节;
while(ogg_sync_pageout(状态,页面)!=1){
char*buffer=ogg_sync_buffer(状态,4096);
if(buffer==NULL){
fprintf(stderr,“ogg_同步_缓冲区失败\n”);
返回-1;
}
字节=读取(fd,缓冲区,4096);
如果(字节==0){
返回-1;
}
ret=ogg_同步_写入(状态,字节);
如果(ret!=0){
fprintf(stderr,“ogg_sync_写入失败\n”);
返回-1;
}
}
返回0;
}
int main(int argc,char*argv[])
{
int ret;
ogg_同步_状态;
ogg_页面;
int系列;
ogg_河州;
布尔发现了博斯;
ogg_包;
int-fd;
int i;
vorbis_信息;
vorbis_评论;
int vorbis_header_read;
ssize_t字节;
ogg_流_状态输出_流;
ogg_页面输出_页面;
如果(argc<2){
fprintf(stderr,“用法:%s file.ogg\n”,argv[0]);
返回1;
}
srand(时间(空));
ogg_stream_init(&out_stream,rand());
//检查所有输入文件
对于(i=1;i