2016-11-25 2 views
0

すべてのmpegファイルをWindows 7の新しいファイルにまとめて連結したいのですが、環境変数を調整してPythonシェルからコードを実行しています。私はPythonとffmpegライブラリに慣れているどんな助け? LinuxのWindowsで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シェルでそれを実行しますか?これはBashコードなので、Bashコンソール/ターミナルで実行します。あなたの返信のために@furasありがとう。 – furas

+0

私はffmpegライブラリで同様のコードを見つけました。どこで実行すればいいのですか? – SMH

+0

Linux(またはMac)を使用していますか?あなたはバッシュが何であるか知っていますか? – furas

答えて

2

それはPython ShellでもBash Shellで実行することはできませんので、あなたのコード例は、ミックスやPythonコードとBashコードです:)

それは:

私のコードBashで2つのコマンドとして機能します。
WindowsにはおそらくがありませんコマンドBash必要はありません

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

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

Pythonバージョン:

#!/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" Windows用

python script.py *.wav 

(唯一のLinux上でテスト)


printf(および他のBashコマンド):GnuWin32GnuWin32

+0

あなたの返信にはありがとうございます。 しかし、それはエラーを示しています:トレースバック(最近の最後の呼び出し): ファイル "C:¥Users¥SMH¥Desktop¥files¥myscript.py"、行37、 サブプロセス。AttributeError: 'モジュール'オブジェクトに '実行'属性がありません 助けが必要ですか?いいえ、ありがとうございます。 – SMH

+0

どのようなpythonバージョンを使用しますか? Python 2? – furas

+0

'run'の代わりに' call'を試してください - more https://docs.python.org/3/library/subprocess.html#call-function-trio – furas

関連する問題