使用FLAC解码器和LAME编码器使用Python转换FLAC文件



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

上述系统工作良好,但我遇到了另一个问题。我喜欢在我的电脑上使用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),我无法进行反向工程。

回顾一下,我们接受任何帮助。只要它符合我的要求:仅使用linux的裸FLAC和LAME工具(没有sox或ffmpeg);剧本不要太长。3.不创建临时WAV文件。4. 可以编码任何Flac文件到MP3。我甚至不担心元数据。只有文件本身。

请帮忙!

编辑08/05/2015:

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

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]

我有一个类似的问题,将flac文件转换为mp3,并在这里找到了一行bash解决方案,如下:

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

我明白这并不能回答问题,但它是一个优雅的解决你的问题的方法。

最新更新