【发布时间】:2018-08-20 00:20:18
【问题描述】:
我创建了一个简单的方法,可以像在终端中一样执行命令
from subprocess import PIPE, run
class Command_Line():
@staticmethod
def execute(command):
result = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True)
print(result)
return result.stdout
我对上面代码的问题是它不会等到任务/过程完成。假设我使用 ffmpeg 通过以下代码更改视频的帧速率
import Command_Line as cmd
cmd.execute('ffmpeg -i "000000004.avi" -c copy -y -r 30 "000000004.avi"')
问题在于输出视频,因为它没有完成该过程。我已经搜索了如何等待 Is there a way to check if a subprocess is still running? 但无法将其与我的代码合并。你能分享一下你的经验吗。
谢谢
【问题讨论】:
-
我使用
ffmpeg -i movie.avi movie.mp4在 Windows 和 Linux 上测试了您的脚本(以增加处理时间)。在我的机器上,subprocess.run一直等到ffmpeg进程按照docs 的要求终止。引用:"Wait for command to complete, then return a CompletedProcess instance." -
“问题在于输出视频,因为它没有完成该过程。”究竟是什么意思?运行脚本时输出的视频是完全没有写入还是太小?是否有任何错误消息?
-
当我执行我的代码时,视频被破坏了,如果我删除我的代码的那部分视频是好的。有了我的代码,视频的视频长度变为零。所以然后我尝试手动执行上面的命令(通过终端),但它的工作,所以我认为该过程中途终止导致视频被破坏
-
我再次使用与您使用的 ffmpeg 命令完全相同的命令进行了测试,我认为问题在于您覆盖了输入文件stackoverflow.com/questions/28877049/… 如果我直接在终端中运行此命令,视频也会变得无效。你可以尝试更改输出文件名吗?
-
@Marius 你应该把那个作为答案,这样我就可以给你赏金;)这就是问题所在,我只需要在更改其帧速率之前更改文件名。非常感谢
标签: python-3.x ffmpeg subprocess