1

たくさんのビデオを iPad で再生できるように変換しようとしています。私が理解していることから、スクリプトとは別のプロセスでバイナリを起動する subprocess モジュールを使用しています。2 番目のプロセスが開始する前に最初のプロセスを終了する必要がある 2 パス エンコーディングの処理方法がわかりません。

これが私のコードです:

def convert(filename):
  extension = filename[-3:]

  destination_filename_720 = filename[-4:] + '-a720p' + '.mp4'
  destination_filename_1080 = filename[-4:] + '-a1080p' + '.mp4'

  p = subprocess.Popen(['ffmpeg','-i', str(filename) ,
                        '-acodec' , 'aac' ,
                        '-ab' , '160k' ,
                        '-ac' , '2' ,
                        '-vcodec' , 'libx264' ,
                        '-strict' , '-2' ,
                        '-vpre' , 'ipod640' ,
                        '-threads' , '8' ,
                        '-s' , '1280x720' ,
                        '-b:v' , '2000k' ,
                        '-pass' , '1' ,
                        '-y' ,
                        destination_filename_720])

  p = subprocess.Popen(['ffmpeg','-i', str(filename) ,
                        '-acodec' , 'aac' ,
                        '-ab' , '160k' ,
                        '-ac' , '2' ,
                        '-vcodec' , 'libx264' ,
                        '-strict' , '-2' ,
                        '-vpre' , 'ipod640' ,
                        '-threads' , '8' ,
                        '-s' , '1280x720' ,
                        '-b:v' , '2000k' ,
                        '-pass' , '2' ,
                        '-y' ,
                        destination_filename_720])

convert() 関数が呼び出されるとすぐに、両方のプロセスがすぐに生成されます。

最初のプロセスがまだ完了していないため、2 番目のプロセスは失敗します。

どうすればこれを修正できますか? または、より良い方法はありますか?

4

3 に答える 3

6

p.wait() を supprocess に追加するだけで、最初のパスで完了するまで続行されません。

p = subprocess.Popen(['ffmpeg','-i' ...etc])
p.wait()

読みやすくするために、端末で行うようにコマンドを記述し、split() を使用して文字列配列に取り込む方が簡単な場合があります。例:

p = subprocess.Popen(
   'ffmpeg -i blah.mov -s 128x72 blah.jpg'.split())
p.wait()
于 2012-08-31T22:59:53.300 に答える
0

(「コメント」リンクが見つからないので、「回答」:)

最後の行は 720 ではなく 1080 にする必要がありますか?

于 2012-08-31T21:02:00.963 に答える
0

通常、ffmpeg は出力をフラッシュしないため、pexpect を使用することをお勧めします。

于 2012-11-22T22:30:39.263 に答える