gpt4 book ai didi

Gstreamer multifilesink wav 文件分割

转载 作者:行者123 更新时间:2023-12-05 06:45:08 29 4
gpt4 key购买 nike

我在使用 gstreamer 录制流时遇到问题。我必须将音频和视频分开编写,并在信号到达时切入。我有正常工作的视频,但仍然有 wav 文件的问题。即使是 gst-launch 中的简单管道也无法正常工作。我有 wave 文件,我正在尝试使用 multifilesink 拆分它:
gst-launch filesrc location=test.wav ! multifilesink location=test2%d.wav next-file=4 max-file-size=512000 但是最终的 wav 文件已损坏,而与 ts 文件相同的管道工作正常:
gst-launch-1.0 filesrc location=test.ts ! multifilesink location=test2%d.ts next-file=4 max-file-size=2000000

最佳答案

multifilesink 对它拆分的数据一无所知,因此它不会为它写入的每个文件添加 header 。

您的 .ts 文件之所以有效,是因为它被设计为一种流格式,其中每个单独的数据包都将被独立处理。因此,人们可以随时“收听”流。解码器将简单地寻找它找到的下一个数据包头并在那里开始解码(有关详细信息,请查看 MPEG TS' wiki page

不过,WAV 文件格式被设计为纯文件(而非流媒体)格式。因此,文件的开头只有一个标题。当您将该文件拆分为多个文件时,这些 header 将丢失(该文件仅包含原始 PCM 数据)。

要解决该问题,您可以...

  • 手动将 .wav header 从第一个文件复制到所有其他文件
  • 使用支持 PCM 文件的程序并直接使用它们或转换文件(不过在打开这些文件时您必须手动设置 channel 数、采样率和比特率)。
  • 使用另一种面向流的文件格式,如 .mp3,它来自与 .ts 相同的编解码器系列,并且还为每个帧使用单独的 4 字节 header (请记住尽管 MP3 是一种有损文件格式)。
    一个示例管道是:

    gst-launch filesrc location=test.wav ! wavparse ! lame ! multifilesink location=test%d.mp3 next-file=4 max-file-size=100000

关于Gstreamer multifilesink wav 文件分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25662392/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com