Audio 用ffmpeg处理FLAC音频文件中的问题

Audio 用ffmpeg处理FLAC音频文件中的问题,audio,ffmpeg,Audio,Ffmpeg,我从一个朋友那里得到了一套FLAC音频文件。我把它们复制到我的音乐库中,然后开始欣赏一张漂亮的专辑。不幸的是,索诺斯不会播放这些文件。因此,我一直在了解 索诺斯对FLAC文件的抱怨是,它是以不受支持的采样率编码的。我睁大眼睛,摇摇头,注意到免费软件很高兴地播放这些文件,但我为Sonos支付的产品却没有。但我离题了 ffprobe显示FLAC文件包含音频通道和视频通道: $ ffprobe -hide_banner -show_streams "/path/to/Myaudio.flac"

我从一个朋友那里得到了一套FLAC音频文件。我把它们复制到我的音乐库中,然后开始欣赏一张漂亮的专辑。不幸的是,索诺斯不会播放这些文件。因此,我一直在了解

索诺斯对FLAC文件的抱怨是,它是以不受支持的采样率编码的。我睁大眼睛,摇摇头,注意到免费软件很高兴地播放这些文件,但我为Sonos支付的产品却没有。但我离题了

ffprobe显示FLAC文件包含音频通道和视频通道:

$ 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)  
酷!我猜这就是为什么一些音频播放器在播放歌曲时能够显示“专辑插图”?还请注意,音频流报告为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]对于不能有效支持它的多路复用器来说,帧速率非常高。 请考虑指定一个较低的帧率、不同的MUXER或-VSYNC 2

我还不太了解更多的研究,然后在一篇评论中说,不用担心,至少警告中的swscaler部分是这样的

最后我要问的问题是:

1.a。什么样的帧率、muxer和其他规范使图形与大多数使用该图形的程序兼容

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

2.a。如何从.flac音频文件中删除视频频道

2.b。如何将视频频道添加到.flac文件中

编辑: 在Sonos支持的从176.4 kHz的FLAC到最大48 kHz的ALAC.m4a的单个ffmpeg命令的“直接”转换失败后,我问了上述4个问题。我推断,通过一系列转换的“增量”方法可能会让我达到目的。事后诸葛亮,我现在明白了我应该把我原来失败的直接转换咒语贴出来。。。我们生活和学习

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

什么样的帧率、muxer和其他规范使图形与大多数使用图形的程序兼容

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

如何从.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"
什么样的帧率、muxer和其他规范使图形与大多数使用该图形的程序兼容

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

如何从.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"

这两个我都不担心。它不是真正的视频流,这只是为了在视频上下文中使用FFmpeg而解释JPEG的方式。这些警告只是这种怪癖的产物。我还没有测试,但是您可以尝试使用-vn从输出中删除视频流。我不知道如何从FFmpeg中正确地将JPEG添加到FLAC/Ogg元数据。@Brad:Unf

幸运的是,我不能忽视它。当我尝试将FLAC转换为ALAC时,由于视频流0:1,导致终端故障。错误为:[ipod@0x7fc022002800]在流0中找不到编解码器h264的标记,容器中当前不支持编解码器,无法为输出文件0写入头编解码器参数不正确?:参数无效,初始化输出流0:1时出错,转换失败!ALAC是一种不相关的格式,具有不同的功能。你现在想用FLAC还是ALAC?如果是ALAC,请更新您的问题或发布新问题。还有,请包括完整的FFmpeg命令及其完整输出。@Brad:是的。。。我试图让我的问题和我的方法保持简单。我试图满足Sonos和iTunes的限制。Sonos不支持>48K的采样率,iTunes不支持FLAC,两者都支持ALAC。所以,我们的计划是分两步进行:1。FLAC至-FLAC@48K2.FLAC@48K-致阿拉克。步骤1的工作原理如我上面所示;步骤2失败。我的问题1和2是希望插入一个兼容的图形,或者完全删除它。为什么不直接去ALAC呢?两个步骤都不需要。另外,您是否尝试了我建议的-vn参数?我不会担心这两个参数。它不是真正的视频流,这只是为了在视频上下文中使用FFmpeg而解释JPEG的方式。这些警告只是这种怪癖的产物。我还没有测试,但是您可以尝试使用-vn从输出中删除视频流。我不知道如何在FFmpeg的FLAC/Ogg元数据中正确添加JPEG。@布拉德:不幸的是,我不能忽略它。当我尝试将FLAC转换为ALAC时,由于视频流0:1,导致终端故障。错误为:[ipod@0x7fc022002800]在流0中找不到编解码器h264的标记,容器中当前不支持编解码器,无法为输出文件0写入头编解码器参数不正确?:参数无效,初始化输出流0:1时出错,转换失败!ALAC是一种不相关的格式,具有不同的功能。你现在想用FLAC还是ALAC?如果是ALAC,请更新您的问题或发布新问题。还有,请包括完整的FFmpeg命令及其完整输出。@Brad:是的。。。我试图让我的问题和我的方法保持简单。我试图满足Sonos和iTunes的限制。Sonos不支持>48K的采样率,iTunes不支持FLAC,两者都支持ALAC。所以,我们的计划是分两步进行:1。FLAC至-FLAC@48K2.FLAC@48K-致阿拉克。步骤1的工作原理如我上面所示;步骤2失败。我的问题1和2是希望插入一个兼容的图形,或者完全删除它。为什么不直接去ALAC呢?两个步骤都不需要。另外,您是否尝试了我建议的-vn参数?请查看我的Q中的更新。到ALAC的转换仍然失败。要在m4a中转换到ALAC,您需要在我的上一个命令中添加-c:v png。?最后一个命令中似乎没有任何内容会导致文件从FLAC转换为ALAC。。。我错过了什么?我不需要命令中的序列-acodec-alac吗?抱歉,添加了新的cmdq您的问题是如何将视频频道添加到.flac文件中?这意味着它还没有。如果是,请跳过-i coverimagePlease查看我的Q中的更新。转换为ALAC仍然失败。要在m4a中转换为ALAC,请在我的上一个命令中添加-c:v png。?最后一个命令中似乎没有任何内容会导致文件从FLAC转换为ALAC。。。我错过了什么?我不需要命令中的序列-acodec-alac吗?抱歉,添加了新的cmdq您的问题是如何将视频频道添加到.flac文件中?这意味着它还没有。如果有,请跳过-i coverimage