2016-11-02 8 views
1
def cut_file(file, start_time, end_time): 
    """ Cut the mp3 file with start and end time. """ 
    output = file[:-4] + "_cut.mp3" 
    try: 
     os.remove(output) 
    except Exception: 
     pass 
    p=Popen(["ffmpeg", "-i", file, "-c:a copy -ss", start_time, "-to", end_time, output], stdout=PIPE) 
    p.communicate() 
    os.remove(file) 
    os.rename(output,file) 
    return file 

この機能を使用してmp3ファイルをカットすると、ffmpegからエラーが発生します。エラーは次のとおりです。pythonでmp3をカットするためにffmpegを使用する - コーデックコピーエラー

不明エンコーダのPythonを使用しているとき「0時07分」

なぜコピーコマンドを認識しffmpegのではないでしょうか?シェルでコマンドを実行してもエラーは発生しません。

私は引数の順序を変更しようとしましたが、これは私に同じ種類のエラーを与えます。

I got the code out of the official documentation.

答えて

2

あなたは(良い習慣です)すべての引数リストスタイルを渡しているので、あなたは宇宙ワイズすべて引数を分割する必要があり、そうでない場合Popenがquote-保護するスペースを含むものをあなたが通過したことを尊重する。

この引数"-c:a copy -ss"は1つの引数として解釈されます。これは、ffmpegがエンコーダとして開始時刻を読み取る理由を説明します。実際にシステムコールに発行されているもの

は次のとおりです。

ffmpeg -i file "-c:a copy -ss" start_time -to end_time output 

は、代わりにその操作を行います:

p=Popen(["ffmpeg", "-i", file, "-c:a","copy","-ss", start_time, "-to", end_time, output], stdout=PIPE) 
関連する問題