我目前正在尝试使用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
所以我有几个问题:
为什么FLAC采取这种方式?在测试脚本时,我设置了一个真正的FLAC文件的路径。为什么这么说?
我怎样才能做到这一点?!
真的,任何使用简单命令的方法。喜欢ffmpeg的程序不是很容易理解(如何将LAME q值设置为0?不知道。)而其他python脚本对我来说是反向工程的长期(如flac2all)。
在审核中,我们会接受任何帮助。只要它遵循我的规范:1。仅使用Linux的裸FLAC和LAME工具(没有sox或ffmpeg),2。脚本不会太长。 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]
答案 0 :(得分:0)
我遇到了类似的问题,将flac文件转换为mp3,发现了一个单行bash解决方案here,内容为:
for f in *.flac; do ffmpeg -i "$f" -aq 1 "${f%flac}mp3"; done
我很高兴这不能回答问题,但这是解决您问题的绝妙方法。