python-3.x - 在 Python 3 脚本的 for 循环中调用 ffmpeg
问题描述
我尝试在 for 循环中的 Python 3 脚本中使用 ffmpeg 将每个 .m4v 文件转换为 .wav 文件(保持相同的名称),然后删除 .m4v 文件。我可以使用以下代码在源目录中执行此操作,它可以工作。
import os
dst="Path\\sourcefolder"
os.chdir(dst)
os.system("ffmpeg -i test.m4v test.wav")
os.remove("test.m4v")
但是,我希望能够对源中具有不同路径的所有 m4v 文件执行此操作,即递归目录。我期待类似以下的内容;
for i in range(0,len(m4v_Paths))
infile=m4v_Paths[i] # example i th file "Path\\source\\folder\\movie.m4v"
outfile=os.path.join(os.path.splitext(m4v_Path[i])[0]+'.wav') # remove '.m4v' extension add ' .wav'
os.system("ffmpeg -i infile outfile")
os.remove(infile)
我已经阅读了类似标题的问题,但它们没有帮助。我试图将每个路径作为参数传递给命令行,但什么也没发生。
解决方案
最后,我找到了一种方法。它比我喜欢的要慢,但它完全符合我的要求。我相信这个任务有更有效的代码,但把我的代码放在这里以防万一有人遇到类似的问题。
import os
#first create a path list for all the files in the recursive source
src='Path\\sourcefolder'
fpathlist=[]
for path, subdirs, files in os.walk(src):
for fpath in files:
fpathlist.append(os.path.join(path, fpath))
length=len(fpathlist)
mycwd = os.getcwd()
for fpath in range(0,length):
if (fpath.endswith(".m4v")):
filename=os.path.basename(fpath)
dst=os.path.dirname(fpath)
mycwd = os.getcwd()
os.chdir(dst)
os.system("ffmpeg -i {0} temp_name.wav".format(filename))
org_name=os.path.join(dst, filename)
no_ext=os.path.splitext(org_name)[0]
temp_name=os.path.join(dst, "temp_name.wav")
new_name = os.path.join(no_ext+'.wav')
os.rename(temp_name,new_name)
os.remove(org_name)
os.chdir(mycwd)
推荐阅读
- mysql - 什么时候在 MySql-workbench 中添加连接?
- validation - .netcore 客户端验证不同的 onPost 处理程序(多个事件)
- spring-boot - SOAP 1.2 中带有 SOAPFaultException 的 Spring WebService、Spring Boot、SoapFault 未显示详细信息、角色等属性
- elixir - 为什么调用 Elixir Kernel.apply/2 而不是调用匿名函数?
- r - 语法有什么区别:| / 对于由于秩不足而具有交互和嵌套的 lmer 模型?
- grid - 3d 中的 Ue4 TiledMap 生成
- python - 读取本地状态/检查点值 Pulumi
- python - python dataframe drop().index 混淆
- openflow - 使用 openflow 拒绝(而不是!只是丢弃)数据包
- angular - Angular 中带有 CustomWeback 的 ImageminPlugin 在生产环境中不起作用