2014-02-18 6 views
0

Я использую python для создания макромодуля внутри среды MevisLab. Я хотел использовать ffmpeg в командной строке внутри Python. Проблема заключается в том, что командная строка закрывается слишком быстро, что я не мог прочитать во время выполнения ffmpeg.командной строки слишком быстро закрывается внутри python, используя ffmpeg

Мой код

t = 'ffmpeg -r'+str(ctx.field("FrameRate").value)+'-f image2 -pix_fmt yuv44p -s 1920x1080 -i'+path+'%0d.png -vodec libx264 -crf 15'+path+'.mp4' 

os.system(t) 
+0

Что вам нужно? Чтобы увидеть вывод текста из 'ffmpeg'? –

+0

Я хотел создать H264 видео из изображений, которые я храню в файле, который я установил с помощью среды MevisLab. Я хотел выполнить командную строку FFMPEG внутри сценария Python. Но проблема в том, что командная строка закрывается слишком быстро, прежде чем я смогу прочитать ошибку. Я получаю параметры от пользователя и сохраняю его как строку и вызываю командную строку с заданными пользователем параметрами – user3652437

+0

** ctx.field («FrameRate»). Значение ** - это частота кадров, заданная пользователем, которую я преобразовал в str для использования в среде командной строки внутри python. Точно так же я получил входы для имени файла и других параметров 'path = os.path.basename (ctx.field (" FileName "). Value)' – user3652437

ответ

1

Вы можете попытаться перенаправить стандартный вывод/STDERR в файл и читать его позже:

t = 'ffmpeg -r'+str(ctx.field("FrameRate").value)+'-f image2 -pix_fmt yuv420p -s 1920x1080 -i'+path+'%0d.png -vcodec libx264 -crf 15'+path+'.mp4' 
log_path = r'C:\log.txt' 
os.system(t + ' >> ' + log_path + ' 2>&1') 

Вероятно, причиной такой проблемы является отсутствие пробелов между параметрами FFmpeg (такие как -f/-i).

+0

Да - может стоить быстрая строка 'print t', чтобы проверить, какая команда на самом деле будет выполнена. – elParaguayo

+0

Большое вам спасибо !!! Это сработало !!! – user3652437

0

Вы можете сделать вывод и распечатать его с самого Python. Скажи:

from subprocess import check_output, STDOUT 

try: 
    output = check_output(t, shell=True, stderr=STDOUT) 
except CalledProcessError, e: 
    output = e.output 

check_output сгенерирует исключение, если команда возвращает с кодом состояния = 0. Я захватывая вывод ошибок там тоже, на всякий случай!.

+0

Тогда вы можете просто 'print (output)', например. –

Смежные вопросы