标签: vorbis

ogg vorbis 文件的无损连接

我有几个 ogg vorbis 文件,所有文件都使用我想要连接到单个文件的完全相同的属性进行编码。

我知道 ogg vorbis 格式支持多个文件的简单连接,例如:

$ cat file1.ogg file2.ogg > output.ogg
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,并非所有播放器都能理解这样创建的文件,例如我的移动音频播放器,我会避免购买新的。其他不理解它的程序是 gstreamer。如果输入的 ogg 文件碰巧都具有相同的流 ID,则该方法也不起作用。

此外,由于我想扔掉原始文件并只保留连接的版本,因此我希望像cat解决方案一样无损地完成连接。

我还想避免将文件连接成像 flac 这样的无损格式,因为这会不必要地增加文件大小。如果那没问题,那么我可以保留原始的 ogg 文件并使用更少的空间。

似乎 ffmpeg 有时可以使用concat demuxer来做到这一点:

$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Run Code Online (Sandbox Code Playgroud)

如果我查看输入文件的原始十六进制转储,那么我可以找到在输出文件中准确表示的 vorbis 数据包。所以我想真的没有重新编码发生。

但这似乎不适用于所有输入文件。有时(不确定是什么触发了这个),ffmpeg 会发出警告:

Non-monotonous DTS in output stream 0:0; previous: 5011328, current: 5011200; changing to 5011329. This may result in incorrect timestamps in the output file.
Run Code Online (Sandbox Code Playgroud)

然后我会听到两个文件之间非常微弱的“间隙”。因此,这当然不是全球解决方案。

由于找不到,我尝试在此 …

audio ogg vorbis cat lossless

14
推荐指数
2
解决办法
3659
查看次数

如何使用ffmpeg对ogg音频文件进行编码?

我想转换以下简单oggenc命令以使用ffmpeg

oggenc -b 8 input.wav -o out.ogg
Run Code Online (Sandbox Code Playgroud)

ffmpeg libvorbis wrapper doc,它说,

libvorbis 包装器支持以下选项。选项的 oggenc 等效项列在括号中。

  b (-b)
Run Code Online (Sandbox Code Playgroud)

为 ABR 设置以比特/秒表示的比特率。oggenc -b 以千比特/秒表示。

但我只是不知道如何将其应用于ffmpeg,我已经尝试过,

ffmpeg -i input.aac -c:a libvorbis -b 8 out.ogg
ffmpeg -i input.aac -c:a libvorbis b 8 out.ogg
ffmpeg -i input.aac -c:a libvorbis=b:8 out.ogg
Run Code Online (Sandbox Code Playgroud)

但没有一个按预期工作。

更新:我想知道的是如何将 ffmpeg(libvorbis 包装器)文档中列出的选项“翻译”为 ffmpeg 命令。我可以通过-abswitch 进行转码,但我认为这不是libvorbis 包装器特定的选项。因此,如果您提供了答案,请同时提供指定以下所有选项的演示。

b (-b)

q (-q)

minrate (-m)

maxrate (-M)

iblock
Run Code Online (Sandbox Code Playgroud)

audio encoding ogg vorbis ffmpeg

1
推荐指数
2
解决办法
3万
查看次数

标签 统计

audio ×2

ogg ×2

vorbis ×2

cat ×1

encoding ×1

ffmpeg ×1

lossless ×1