嘿,我有这个脚本,它可以把目录中的所有flv视频文件转换成mp4格式。在
我让它的工作只是把所有的文件放在一个目录,但现在需要修改它,使它进入该目录中的文件夹,并转换它遇到的每个文件夹中的文件。在
这是我的密码
sourcedirectory="/home/dubit/Desktop/test/"
class ConvertToMP4:
def __init__(self):
self.flvfiles = []
def fetch_flv_files(self, directory_name):
print("Scanning directory: " + directory_name)
for (dirpath, dirnames, filenames) in os.walk(directory_name):
for files in filenames:
if files.endswith('.flv'):
print('convert file: ' + files)
self.flvfiles.append(files)
def convert_flv_file_to_mp4_file(self):
# check to see if the list is empty, if not proceed
num_of_dir = len(list(os.walk(sourcedirectory)))
if len(self.flvfiles) <= 0:
print("No files to convert!")
return
for x in range(num_of_dir):
for (dirpath, dirnames, filenames) in os.walk(sourcedirectory):
for z in dirpath:
os.chdir(z)
for flvfiles in filenames:
mp4_file = flvfiles.replace('.flv','.mp4')
cmd_string = 'ffmpeg -i "' + flvfiles + '" -vcodec libx264 -crf 23 -acodec aac -strict experimental "' + mp4_file + '"'
print('converting ' + flvfiles + ' to ' + mp4_file)
os.system(cmd_string)
def main():
usage = "usage: %prog -d <source directory for flv files>"
parser = OptionParser(usage=usage)
parser.add_option("-d","--sourcedirectory",action="store",
type="string", dest="sourcedirectory", default="./",
help="source directory where all the flv files are stored")
(options, args) = parser.parse_args()
flv_to_mp4 = ConvertToMP4()
flv_to_mp4.fetch_flv_files(sourcedirectory)
flv_to_mp4.convert_flv_file_to_mp4_file()
return 0
main()
这是我收到的错误
^{pr2}$我是python脚本的新手,所以还没有真正掌握解决这个问题的知识,所以任何帮助都将不胜感激。如果让我猜一猜,它只是从dirpath变量中取第一个字符。在
您得到的错误是由于}是{}的内容。在
dirpath
实际上是一个字符串,而不是字符串列表。os.walk()
返回一个元组,其中dirpath
是当前正在遍历的目录,dirnames
和{由于字符串在Python中是iterable的,所以不会出现任何解释器错误,而是循环使用
dirpath
字符串中的每个字符。就像,for i, c in enumerate("abcd"): print('index: {i}, char: {c}'.format(i=i, c=c))
将输出index: 0, char: a index: 1, char: b index: 2, char: c index: 3, char: d
所以,您应该
chdir()
到dirpath
,而不是循环它。文件系统的循环由os.walk()
在内部完成。在dirpath
是一个单个字符串。当您使用for
循环(for z in dirpath
)对其进行迭代时,您将迭代字符串'/home/dubit/Desktop/test/'
中的每个单独字符!首先z
被设置为'/'
,然后'h'
。。。这就是chdir
失败的地方,因为根目录中没有名为h
的目录。在就换一个
与
^{pr2}$并相应地调整缩进量,这样就可以工作了。在
相关问题 更多 >
编程相关推荐