[英]Using pydub on AWS lambda
好的,所以我和這里有同樣的問題: 使用 pydub 和 AWS Lambda但我認為在這里重新詢問會更干凈,因為我已經取得了一些進展(我認為?)。
我按照這里的說明進行操作: https://medium.com/faun/how-to-use-aws-lambda-layers-f4fe6624aff1像這樣:
from python.pydub import AudioSegment
print('Loading function')
def lambda_handler(event, context):
print(event)
sound = AudioSegment.from_mp3("https://s3-eu-west-1.amazonaws.com/audio.mp3")
etc...
使用 docker,我使用以下腳本創建了依賴項:
#!/bin/bash
export PKG_DIR="python"
rm -rf ${PKG_DIR} && mkdir -p ${PKG_DIR}
docker run --rm -v $(pwd):/foo -w /foo lambci/lambda:build-python3.6 \
pip install -r requirements.txt --no-deps -t ${PKG_DIR}
和 requirements.txt 文件:
pydub
ffmpeg
Docker 下載了4個文件夾:
ffmpeg
ffmpeg-1.4.dist-info
pydub
pydub-0.24.1.dist-info
我將整個項目作為 zip 文件上傳到 lambda。
當我運行代碼時,我得到一個錯誤:
/var/task/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
我猜我需要一個 ffmpeg 二進制文件上傳到 Lambda 但我不確定,如果我這樣做,不知道該怎么做。
我錯過了哪些步驟?
更新:
所以我修改了我的代碼並使用 pycharm 運行了代碼。 盡管 ffmpeg 和 ffprobe 已上傳到我的 lambda function,並且我已經以編程方式確認它們存在,但它們無法運行。
我的代碼現在是這樣的:
def lambda_handler(event, context):
l = logging.getLogger("pydub.converter")
l.setLevel(logging.DEBUG)
l.addHandler(logging.StreamHandler())
AudioSegment.converter='/var/task/ffmpeg'
print(event)
print("00000")
print (os.getcwd())
print("00000")
print ("1111")
path = "/var/task"
dir_list = os.listdir(path)
print (dir_list)
print ("1111")
print ("11111111111111111")
out = check_output(['/var/task/ffprobe', 'test.mp3'])
print (out)
print ("11111111111111111")
這是 cloudwatch 錯誤日志:
00000
/var/task
00000
1111
['.DS_Store', 'ffmpeg', 'get_layer_packages.sh', 'lambda_function.py', 'lambda_function.py.orig.py', 'python', 'requirements.txt', 'test.mp3']
1111
11111111111111111
[Errno 8] Exec format error: '/var/task/ffmpeg': OSError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 32, in lambda_handler
out = check_output(['/var/task/ffmpeg', 'test.mp3'])
File "/var/lang/lib/python3.6/subprocess.py", line 356, in check_output
**kwargs).stdout
File "/var/lang/lib/python3.6/subprocess.py", line 423, in run
with Popen(*popenargs, **kwargs) as process:
File "/var/lang/lib/python3.6/subprocess.py", line 729, in __init__
restore_signals, start_new_session)
File "/var/lang/lib/python3.6/subprocess.py", line 1364, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: '/var/task/ffmpeg'
有任何想法嗎? 我使用 chmod +x 使 ffmpeg 和 ffprobe 可執行
這可能是 lambda 權限問題嗎?
要使用pydub
庫和許多其他聲音播放庫,您必須將ffmpeg.exe
安裝到同一目錄。 您可以從此處下載該可執行文件https://ffmpeg.org/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.