【问题标题】:Using FLAC decoder and LAME Encoder to convert FLAC files using Python使用 FLAC 解码器和 LAME 编码器使用 Python 转换 FLAC 文件
【发布时间】:2015-08-01 02:57:37
【问题描述】:

我目前正在尝试使用 Python 脚本自动执行我的音乐库编目的项目,在我发疯之前我迫切需要帮助。对于初学者,我使用的是 Linux(具体来说是 Arch Linux)。为了解释,我最近开始使用 Morituri 来翻录我的 CD 收藏。我特别喜欢 Mortituri 脚本,因为它检查文件三遍,并立即生成 FLAC 文件。

上述系统工作正常,但我遇到了另一个问题。我喜欢用于我的 PC 的 FLAC 文件,但对于移动设备,我需要 MP3 文件。我遇到了这个著名的小 bash 脚本:

for f in *.flac; do flac -cd "$f" | lame -b 320 - "${f%.*}".mp3; done

我看到了这个很棒的小脚本,我知道一定有某种方法可以在 python 中复制它。因此,我开始编写将 FLAC 转换为 MP3 的脚本,并使用它们各自的 CLI 接口使用的基本参数。我决定最好一次从一个文件开始,然后逐步向上。在了解了python中的子进程模块和管道之后,我编写了以下代码:

#!/usr/bin/python3

from subprocess import *

MyTestFile = ('/path/to/file.flac')

def Convert_It(File):
with open(File, 'r') as infile:
    FlacDecode = Popen(["flac", "-cd","-","-"],stdin=infile,stdout=PIPE)
    LameEncode = Popen(["lame", "-b", "192","-", "/a/differnet/path/test.mp3"],stdin=PIPE)

Convert_It(MyTestFile)

事实证明,这个脚本的输出如下:

flac 1.3.1, Copyright (C) 2000-2009  Josh Coalson, 2011-2014  Xiph.Org Foundation
flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are
welcome to redistribute it under certain conditions.  Type `flac' for details.



-: ERROR while decoding metadata
state = FLAC__STREAM_DECODER_END_OF_STREAM
Warning: unsupported audio format

所以我有几个问题:

  1. 为什么 FLAC 会这样?在测试脚本时,我设置了一个真正的 FLAC 文件的路径。为什么会这样说?

  2. 我怎样才能做到这一点?!

真的,任何使用简单命令的方法。像 ffmpeg 这样的程序不是很容易理解(如何将 LAME q 值设置为 0?不知道。)而其他 python 脚本对于我进行逆向工程来说太长了(比如 flac2all)。

在审核中,接受任何帮助。只要它遵循我的规范:1. 只使用用于 linux 的裸 FLAC 和 LAME 工具(没有 sox 或 ffmpeg),2. 脚本不要太长。 3. 不创建临时 WAV 文件。 4.可以将任何Flac文件编码为MP3。我什至不担心元数据。只是文件本身。

请帮忙!

编辑 2015 年 8 月 5 日:

我发现我错误地使用了管道。这是我创建的解决我的问题的代码:

FlacDecode = subprocess.Popen(["flac","-cds",MyFile,"-"],stdout=subprocess.PIPE)
LameEncode = subprocess.Popen(['lame','-b','320','-'(NewFilePath)],stdin=FlacDecode.stdout,stdout=subprocess.PIPE)
EndLame = LameEncode.communicate()[0]

【问题讨论】:

  • 在脚本中,您将文件作为参数传递,但在 python 代码中,您通过标准输入传递,如果将其作为参数传递会发生什么?
  • 谢谢,是的,通过 FLAC 将文件作为参数传递是更好的选择。

标签: python mp3 command-line-interface file-conversion flac


【解决方案1】:

我遇到了类似的问题,将 flac 文件转换为 mp3,并找到了一个单行 bash 解决方案 here,内容如下:

for f in *.flac; do ffmpeg -i "$f" -aq 1 "${f%flac}mp3"; done

我很欣赏这并不能回答问题,但它是解决您问题的优雅解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2022-08-21
    相关资源
    最近更新 更多