【问题标题】:Dealing with problems in FLAC audio files with ffmpeg使用 ffmpeg 处理 FLAC 音频文件中的问题
【发布时间】:2020-01-13 23:53:27
【问题描述】:

我从朋友那里得到了一组 FLAC(音频)文件。我将它们复制到我的Sonos 音乐库,然后开始欣赏一张不错的专辑。不幸的是,Sonos 不会播放这些文件。结果,我开始了解ffmpeg

Sonos 对 FLAC 文件的抱怨是它“以不受支持的采样率编码”。我翻了个白眼,摇头,注意到免费的VLC media player 可以愉快地播放这些文件,但我付费购买的产品(Sonos)却没有。但是我跑题了……

ffprobe 透露 FLAC 文件同时包含 Audio 频道 Video 频道:

$ ffprobe -hide_banner  -show_streams "/path/to/Myaudio.flac"


    Duration: 00:02:23.17, start: 0.000000, bitrate: 6176 kb/s  
    Stream #0:0: Audio: flac, 176400 Hz, stereo, s32 (24 bit)  
    Stream #0:1: Video: mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 450x446 [SAR 72:72 DAR 225:223], 90k tbr, 90k tbn, 90k tbc (attached pic)  
    Metadata:  
      comment         : Cover (front)  

酷!我这就是一些音频播放器在播放歌曲时能够显示“专辑插图”的方式?另请注意,Audio 流在176400 Hz 上报告!显然我失去了联系;我认为 44.1khz 的采样率有效地消除了我们能听到的所有“采样伪影”。无论如何,我了解到 Sonos 将支持最大 48kHz 的采样率,而这(176.4kHz 的采样率)是 Sonos 不满意的地方。我用ffmpeg 为他们“麻木了”:

$ ffmpeg -i "/path/to/Myaudio.flac" -sample_fmt s32 -ar 48000 "/path/to/Myaudio48K.flac"

这似乎奏效了——至少我得到了一个 Sonos 可以播放的 FLAC 文件。然而,我也得到了某种类似警告的东西:

[swscaler @ 0x108e0d000] 已弃用像素格式,请确保您正确设置了范围
[flac @ 0x7feefd812a00] 对于无法有效支持它的复用器,帧速率非常高。
请考虑指定较低的帧速率、不同的复用器或 -vsync 2

更多的研究出现了this answer,我不太明白,然后在评论中说,“不用担心” - 至少在警告的swscaler 部分。

这(最终)让我想到了我的问题:

1.a.什么frameratemuxer 和其他规范使图形与大多数使用该图形的程序兼容?

1.b。我应该如何使用ffmpeg 修改Video 通道来设置这些规范(参考 Q 1.a.)?

2.a.如何从.flac 音频文件中删除Video 频道?

2.b。如何将Video 频道添加.flac 文件中?

编辑:

在未能完成从 176.4 kHz 的 FLAC 到 48 kHz 的 ALAC (.m4a) 的“直接”转换(单个 ffmpeg 命令)后,我问了上述 (4) 个问题(Sonos 最大支持)。我推断通过一系列转换的“增量”方法可能会让我到达那里。凭借事后诸葛亮的优势,我现在看到我应该发布我最初失败的直接转换咒语......我们生活和学习。

也就是说,下面接受的答案符合我的最终目标,即将以 176.4kHz 编码的 FLAC 文件转换为 48kHz 的 ALAC (.m4a),并保留封面艺术/视频频道 em>

【问题讨论】:

  • 我不会担心其中任何一个。它不是真正的视频流,这只是为了 FFmpeg 在视频上下文中使用而解释 JPEG 的方式。警告只是这个怪癖的产物。我还没有测试过,但你可以尝试-vn 从输出中删除“视频”流。我不知道如何将 JPEG 正确添加到 FFmpeg 的 FLAC/Ogg 元数据中。
  • @Brad:不幸的是,我不能忽略它。当我尝试将 FLAC 转换为 ALAC 时,由于“视频”stream 0:1 而出现终端故障。错误是:[ipod @ 0x7fc022002800] Could not find tag for codec h264 in stream #0, codec not currently supported in containerCould not write header for output file #0 (incorrect codec parameters ?): Invalid argumentError initializing output stream 0:1Conversion failed!
  • ALAC 是一种不相关的格式,具有不同的功能。您现在尝试使用 FLAC 还是 ALAC?如果是 ALAC,请更新您的问题或发布新问题。并且,请包含完整的 FFmpeg 命令及其完整输出。
  • @Brad:是的......我试图让我的问题(以及我的解决方法)“简单”。我正在尝试满足 Sonos 和 iTunes 的限制。 Sonos 不支持 > 48K 采样率,iTunes 不支持 FLAC,两者都支持 ALAC。因此,计划分两步进行:1. FLAC-to-FLAC@48K,2. FLAC@48K-to-ALAC。第 1 步的工作原理如上所示;第 2 步失败。我的 Q(1 和 2)希望要么插入符合要求的图形,要么完全删除它。
  • 为什么不直接去 ALAC?这两个步骤都不需要。另外,我建议的-vn参数你试过了吗?

标签: audio ffmpeg


【解决方案1】:

什么帧率、复用器和其他规范使图形与大多数使用该图形的程序兼容?

封面艺术只是一帧,因此在这种情况下,帧率无关紧要。但是,您不想要视频流,它必须保持单个图像,因此应该添加 -vsync 0。 Muxer 只是媒体文件处理中使用的打包程序的特定术语。它由格式的选择决定,例如FLAC,WAV..等。重要的是封面艺术的编解码器;通常,它是 PNG 或 JPEG。对于 FLAC,PNG 是默认编解码器。

如何从 .flac 音频文件中删除视频通道

ffmpeg -i "/path/to/Myaudio.flac" -vn -c copy "/path/to/Myaudio48K.flac"

(这只是跳过输入中的任何视频并复制其他所有内容)

如何将视频频道添加到 .flac 文件中?

要将封面艺术添加到纯音频格式,如 MP3、FLAC..等,视频流必须具有附加图片的处置。所以,

ffmpeg -i "/path/to/Myaudio.flac" -i coverimage -sample_fmt s32 -ar 48000 -disposition:v attached_pic -vsync 0 "/path/to/Myaudio48K.flac"

要直接转换为 ALAC,请使用

ffmpeg -i "/path/to/Myaudio.flac" -i coverimage -ar 48000 -c:a alac -disposition:v attached_pic -vsync 0 -c:v png "/path/to/Myaudio48K.m4a"

【讨论】:

  • 请查看我的 Q 中的更新。转换为 ALAC 仍然失败。
  • 要在 m4a 中转换为 ALAC,您需要在我的最后一条命令中添加 -c:v png
  • ?最后一个命令似乎没有任何内容会导致文件从 FLAC 转换为 ALAC ......我错过了什么?我在命令中不需要序列-acodec alac吗?
  • 抱歉,添加了新的cmd
  • 您的问题是如何将视频频道添加到 .flac 文件中? 这意味着它还没有。如果是,请跳过-i coverimage
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2014-08-01
  • 2014-04-23
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多