Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Audio 如何无损连接ogg vorbis文件?_Audio_Concatenation_Ogg_Vorbis_Lossless - Fatal编程技术网

Audio 如何无损连接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将对音频进行重新编码,从而导致轻微的质量损

我正在尝试将多个ogg vorbis文件连接到一个文件中

我知道从理论上讲,它应该足以做到:

cat 1.ogg 2.ogg > combined.ogg
但这也有缺点:

  • 并非所有玩家都支持这样创建的文件(gstreamer不支持)
  • 这样做的玩家不会平滑地将它们连接起来,但会造成难看的瞬间停顿
  • 寻找似乎不可能
我不想降低质量,所以我可以将它们重新编码为类似flac的无损格式,但这会让文件大小爆炸

似乎没有工具可以做到这一点。例如,oggCat将对音频进行重新编码,从而导致轻微的质量损失,并且ffmpeg不会适用于所有输入文件。我打开门想找到一个工具,但当我发现没有工具时,我写了自己的工具

因此,我尝试使用libogg和libvorbis手动将输入文件中的ogg数据包连接到输出文件的ogg页面中。假设所有ogg输入文件都使用完全相同的参数进行编码

我想出了以下代码:

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
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