使用python的subprocess.Popen使用ffmpeg连接文件

时间:2014-12-01 14:26:18

标签: python ffmpeg subprocess

我试图连接生成以下命令的视频:

ffmpeg -i /srv/proj/chunks/phrases/lq/ti.mp4 -y -c copy -bsf:v h264_mp4toannexb -f mpegts /tmp/ti.mp4 & ffmpeg -i /srv/proj/chunks/phrases/lq/luchshii.mp4 -y -c copy -bsf:v h264_mp4toannexb -f mpegts /tmp/luchshii.mp4 & ffmpeg -i /srv/proj/chunks/phrases/lq/novii.mp4 -y -c copy -bsf:v h264_mp4toannexb -f mpegts /tmp/novii.mp4 & ffmpeg -i /srv/proj/chunks/phrases/lq/drug.mp4 -y -c copy -bsf:v h264_mp4toannexb -f mpegts /tmp/drug.mp4 & ffmpeg -f mpegts -i "concat:/tmp/ti.mp4|/tmp/luchshii.mp4|/tmp/novii.mp4|/tmp/drug.mp4" -y -c copy -bsf:a aac_adtstoasc /srv/proj/concats/ty-luchshii-novyi-drug.lq.mp4

当我在终端中使用它时,此命令工作正常,但当我使用subprocess.Popen时,它会挂起最后处理的块,如this

有什么不对?

P.S :这就是我执行命令的方式:

def _execute(command_str, **kwargs):
    import subprocess
    import shlex

    command = shlex.split(command_str)

    try:
        pipe = subprocess.Popen(command, **kwargs)
        pipe.wait()
        stdout, stderr = pipe.communicate()
    except Exception:
        raise ConcatError('cannot concat files')

    return stdout

P.P.S os.system()代替subprocess.Popen()做了诀窍,但子进程的问题仍然存在。

1 个答案:

答案 0 :(得分:0)

删除pipe.wait(),只留下.communicate()电话。也可以检查pipe.returncode是否= = 0,没有错误。