6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS Lambda(Python)上でのFFmpeg呼び出しの注意

Last updated at Posted at 2018-11-14

AWS Lambda 上で FFmpeg でエンコードしようとしてはまりました。
Lambda上で不可解な動きが起きると、調査が非常に困難ですね。

環境

  • AWS Lambda (Python3.6)
  • FFmpeg4.1

問題と調査、対策

Windows環境、Linux環境、どちらでも正常に動作するエンコードスクリプトなのですが、Lambdaで実行するとAACのデコードで失敗してしまいます。
コーデックかFFmpegのバージョンの問題かといろいろ探ったのですが、バージョンを3系にしても、AACのコーデックを変えても問題が出てしまいました。

いろいろ試した結果、Pythonからsubprocessを使ってLambda上でFFmpegを実行するときは、標準入力をDEVNULLでつぶさないと、親プロセスのハンドルを引き継いでしまい、問題が起こるということの様です。

対策としては、こんな感じでsubprocess.run実行時のstdinに設定するだけです。

import subprocess
cmd = ['ffmpeg', '-i', 'input.mp4', '-t', '30', '-b:a', '128k', 'output.mp4']
subprocess.run(cmd, stdin=subprocess.DEVNULL)

類似ケースがありました

Stack Overflow の投稿にまさに今回のケースがありました。
この投稿にも紹介されている動画、[AWS re:Invent 2017: Building a Serverless Pipeline to Transcode a Two-Hour Video in (SRV314)]
(https://www.youtube.com/watch?v=lleCVR2Mupw)の16分くらいのところで説明されていました。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?