Python oggenc 脚本
我想写一个Python脚本(没错,不是Bash),这个脚本会使用flac格式的音频文件,然后用oggenc进行编码,编码成功后再删除flac文件。
到目前为止,我有这个:
import os, sys
import fnmatch
command = 'oggenc -q7 *.flac'
def main():
for root, dirs, files in os.walk('/home/wagnerf/test'):
for name in files:
if fnmatch.fnmatch(name, '*.flac'):
我本来想在if语句后面用
os.system("bash -c %s" % command)
但是这样不行,出现了
错误:没有指定输入文件。使用-h获取帮助。
我想我得在命令中使用文件名,对吧?
编辑一下
我的文件结构大概是这样的:
-- test
-- test1
-- test1.flac
-- test2.flac
-- test2
-- test3.flac
-- test1.flac
我希望这些flac文件能在同一个目录下转换成ogg格式,基本上我想自动化这个过程,
cd /somedir/
oggenc -q7 *.flac
cd ..
cd /someotherdir/
oggenc -q7 *.flac
这样我就不需要每次都进入子目录了!
回答:
@larsmanns 非常感谢,我只需要做一些调整:
from fnmatch import fnmatch
import os, sys
import subprocess
def main():
for root, dirs, files in os.walk('/home/wagnerf/test'):
flacs = [f for f in files if fnmatch(f, '*.flac')]
if flacs:
for file in flacs:
cmd = 'oggenc', '-q7', '%s' % file
subprocess.check_call(cmd, cwd=root)
flacs返回一个列表,我们需要对每个文件使用oggenc,所以对于每个元组都要这样做……
总之再次感谢,剩下的就简单了!
顺便说一下
我完成了这个脚本,你可以在这里找到它:musico
1 个回答
1
使用 subprocess
模块可以调用外部命令,这样你可以更详细地控制这些命令的执行:
from fnmatch import fnmatch
import os
import subprocess
def main():
for root, dirs, files in os.walk('/home/wagnerf/test'):
flacs = [f for f in files if fnmatch(f, '*.flac')]
for f in flacs:
cmd = ['oggenc', '-q7', f]
subprocess.check_call(cmd, cwd=root)
这里的 cwd
参数可以让你在执行命令之前切换到指定的目录。文件名的匹配(也就是根据模式找文件)已经通过 fnmatch
完成,所以不需要中间再调用一个命令行。
你可以用 os.remove
来删除文件;不过我在这个例子里还没有加上这个部分。此外,上面的代码片段还没有经过测试。