C:\Windows\System32> ffmpeg -i D:\devaraj\KPIX_test.ts -vf "blackframe" -an -f n
ull - 2>&1|find "Parsed" > D:\devaraj\info.txt
这工作正常,写入文件info.txt
subprocess.call('ffmpeg' ,'-i', 'D:\devaraj\KPIX_test.ts' ,'-vf', '"blackframe"', 'D:\devaraj\KPIX_textfinal.mp3', '- 2>&1>','|','find', '"Parsed"', '>' ,'D:\devaraj\info.txt', 'shell=True')
给出错误缓冲区大小必须是整数
是的
subprocess.call('ffmpeg -i D:\devaraj\KPIX_test.ts -vf "blackframe" -an -f n
ull - 2>&1|find "Parsed" > D:\devaraj\info.txt', shell=True)
给出错误
'find'不被识别为内部或外部命令,可操作程序或批处理文件。
任何帮助都会从内心深处感激
你应该使用本机python方法来获得过滤的ffmpeg
输出:
ffmpeg -i D:\devaraj\KPIX_test.ts -vf "blackframe" -an -f null - 2>&1|find "Parsed"
要做到这一点,你通常需要check_output
,但这个特殊的例子已知提供所需的信息,但退出时返回非零代码(使用Python 3.5中的run
会起作用)
所以我会改用Popen
。它变为(作为列表,没有所有重定向和过滤器),然后从过程标准输出中读取所有输出:
p = subprocess.Popen(["ffmpeg","-i",r"D:\devaraj\KPIX_test.ts",
"-vf","blackframe","-an","-f","null"],stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = p.stdout.read()
您不需要shell=True
,它会在output
变量中合并错误和输出流。
现在output
包含ffmpeg命令的输出。让我们解码它(获取一个字符串)并拆分行,检查字符串是否在行中:
for line in output.decode().splitlines(): # python 2: output.splitlines()
if "Parsed" in line:
print(line.rstrip()) # or store it in a file, string, whatever
对于输出更多文本的进程,最好迭代p.stdout
而不是读取全部内容(更少的内存饥饿,允许实时回显到控制台)