2016-11-25 1 views
0

Я привязываю, чтобы объединить все файлы mpeg вместе в одном новом файле в Windows 7, я скорректировал переменные окружения и запустил код из оболочки python, но он дает неверный синтаксис. Любая помощь, поскольку я новичок в библиотеке Python и ffmpeg?Недопустимый синтаксис во время файлов concat mpeg на окнах PYTHON

Мой код:

ffmpeg -f concat -i <(for f in glob.glob("*.mpeg"); do echo "file '$PWD/$f'"; done) -c copy output.mpeg 

Благодаря

+2

это не код Python, так почему вы запускаете его в Python Shell? Это код Bash, поэтому запустите его в консоли/терминале Bash. – furas

+0

@furas Спасибо за ваш ответ. Я нашел аналогичный код в библиотеке ffmpeg, где я его запустил, не могли бы вы мне помочь? – SMH

+0

Используете ли вы Linux (или Mac)? Вы знаете, что такое Баш? – furas

ответ

2

Ваш пример кода смешивать или Python код и Bash код, чтобы он не может работать в Python Shell ни в Bash Shell :)

На Linux, и работает в Bash в виде двух команд:
(Windows, вероятно, не имеет printf команда)

printf "file '%s'\n" *.wav > input.txt 

ffmpeg -f concat -i input.txt -c copy output.mpeg 

Python версия, которая не нуждается в Bash:

#!/usr/bin/env python3 

import os 
import sys 
import glob 
import subprocess 

# get Current Working Directory (CWD) 
pwd = os.getcwd() 

# get list of files 
if len(sys.argv) > 1: 
    #filenames = sys.argv[1:] # Linux 
    filenames = glob.glob(sys.argv[1]) # Windows 
else: 
    filenames = glob.glob("*.mpg") 

#print(filenames) 

# generate "input.txt" file 
with open("input.txt", "w") as f: 
    for name in filenames: 
     f.write("file '{}/{}'\n".format(pwd, name)) 
     #f.write("file '{}'\n".format(name)) 

# run ffmpeg 
subprocess.run('ffmpeg -f concat -i input.txt -c copy output.mpeg', shell=True) 

И вы можете запустить его с или без аргумента, т.е.. "*.wav"

python script.py *.wav 

(тестировался только на Linux)


printf (и другие Bash команды) для Windows: GnuWin32

Подробнее о GnuWin32

+0

Большое спасибо за ваш ответ. Но это показывает ошибку: Traceback (последний последний вызов): Файл «C: \ Users \ SMH \ Desktop \ files \ myscript.py», строка 37, в подпроцесс.run ('ffmpeg -f concat -i input.txt -c copy output.mpeg', shell = True) AttributeError: объект 'module' не имеет атрибута 'run' Любая помощь? – SMH

+0

какая версия python вы используете? Python 2? – furas

+0

Попробуйте 'call' вместо' run' - больше https://docs.python.org/3/library/subprocess.html#call-function-trio – furas