【发布时间】: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.什么framerate、muxer 和其他规范使图形与大多数使用该图形的程序兼容?
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 container、Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument、Error initializing output stream 0:1、Conversion 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参数你试过了吗?