2

これは私を夢中にさせています。ファブリックを使用して、SSH 経由でリモート サーバー上でいくつかのビデオ処理タスクを実行しています。

この関数に入る前に、リモート マシンで ffprobe を呼び出して、そのサーバーに送信されたビデオに関する情報を取得します。ffprobe の出力から Duration: に関するビットを解析しようとしているので、ビデオの長さを秒単位で取得できます。これは、文字列を整数に変換できないように見える関数の厄介な部分です。

with cd("~/videos"):
   command = "ffprobe  "
   command += videoNameOnly
   output = run(command)
   durationIndex = output.find("Duration:")
   durationIndex = durationIndex + 10
   duration = output[durationIndex:]
   durationFrags = duration.split(":")
   print "====================================="
   print durationFrags[0].strip()
   print durationFrags[1].strip()
   print durationFrags[2].strip()
   hours = int(durationFrags[0].strip())

これからの出力は次のとおりです

00
00
52.90, start
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/fabric/main.py", line 712, in main
    *args, **kwargs
  File "/usr/local/lib/python2.7/dist-packages/fabric/tasks.py", line 298, in execute
    multiprocessing
  File "/usr/local/lib/python2.7/dist-packages/fabric/tasks.py", line 197, in _execute
    return task.run(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/fabric/tasks.py", line 112, in run
    return self.wrapped(*args, **kwargs)
  File "/home/amyface/fabfile.py", line 26, in main
    encode();
  File "/home/amyface/fabfile.py", line 34, in encode
    runJobs(jobs,cursor)
  File "/home/amyface/fabfile.py", line 60, in runJobs
    getMiddleFrame(sourceVideo,videoNameOnly,cursor)
  File "/home/amyface/fabfile.py", line 96, in getMiddleFrame
    hours = int(durationFrags[0].strip())
ValueError: invalid literal for int() with base 10: '\x1b[0m\x1b[0;39m\x1b[0m\x1b[0;39m\x1b[0m\x1b[0;39m00'
Disconnecting from [I have removed the server name from here]

「00」を整数に変換できないのはなぜですか? また、「with base 10:」の後のエラーの奇妙な値は何ですか?

4

3 に答える 3

1

重要なのはこれです:

ValueError: invalid literal for int() with base 10:  '\x1b[0m\x1b[0;39m\x1b[0m\x1b[0;39m\x1b[0m\x1b[0;39m00'

ここに示されているように、これらはANSI端末コードです。文字列の中に\x1bESC文字があります

上記のリンクの回答に示されている正規表現を使用して、不要なコードを削除し、最後の「00」を抽出できます。

于 2012-06-22T20:54:14.900 に答える
1

私は生地について何も知りませんが、 によると、ValueErrordurationFrags[0].strip()'\x1b[0m\x1b[0;39m\x1b[0m\x1b[0;39m\x1b[0m\x1b[0;39m00'ありません'00'。これにより、端末に送信するように設計された出力が生成されますか? 私には ANSI エスケープ コードのように見えます。

于 2012-06-22T19:40:30.197 に答える