首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用FLAC译码器和LAME编码器用Python转换FLAC文件

用FLAC译码器和LAME编码器用Python转换FLAC文件
EN

Stack Overflow用户
提问于 2015-08-01 02:57:37
回答 1查看 1.8K关注 0票数 1

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

上面的系统运行良好,但我遇到了另一个问题。我喜欢我的个人电脑的FLAC文件,但是对于移动的使用,我需要MP3文件。我偶然看到了一个著名的巴什剧本:

代码语言:javascript
复制
for f in *.flac; do flac -cd "$f" | lame -b 320 - "${f%.*}".mp3; done

我看到了这个很棒的脚本,我知道一定有办法在python中复制这个脚本。因此,我开始编写一个脚本,将FLAC转换为MP3,并使用它们各自的CLI接口所使用的基本参数。我决定最好一次从一个文件开始,以up.After的方式学习一下python中的子进程模块和管道,我编写了以下代码:

代码语言:javascript
复制
#!/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)

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

代码语言:javascript
复制
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年5月8日编辑:

我发现我用的管道不对。下面是我创建的解决问题的代码:

代码语言:javascript
复制
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]
EN

回答 1

Stack Overflow用户

发布于 2020-12-07 23:45:21

我遇到了类似的问题,将flac文件转换为mp3,并找到了一行bash解决方案here,它读取:

代码语言:javascript
复制
for f in *.flac; do ffmpeg -i "$f" -aq 1 "${f%flac}mp3"; done

我很感激这没有回答问题,但它是一个优雅的解决方案,您的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31757747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档