You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MoviePy在Amazon ECS Docker容器中运行时出现音频读取错误

MoviePy在ECS环境生成视频失败,本地Docker正常的问题排查

问题背景

开发了一个基于MoviePy的视频生成脚本,打包在Docker容器中。本地Docker环境运行正常,但部署到Amazon ECS后,出现音频文件读取失败的错误。

错误信息

/tmp/334.mp31boi_q7b: Invalid data found when processing input
Here are the file infos returned by ffmpeg: 
ffmpeg version 4.2.2-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)

libpostproc 55. 5.100 / 55. 5.100
libswresample 3. 5.100 / 3. 5.100
libswscale 5. 5.100 / 5. 5.100
libavfilter 7. 57.100 / 7. 57.100
libavdevice 58. 8.100 / 58. 8.100
libavformat 58. 29.100 / 58. 29.100
libavcodec 58. 54.100 / 58. 54.100
libavutil 56. 31.100 / 56. 31.100

configuration: 
--enable-gpl 
--enable-version3 
--enable-static 
--disable-debug 
--disable-ffplay 
--disable-indev=sndio 
--disable-outdev=sndio 
--cc=gcc 
--enable-fontconfig 
--enable-frei0r 
--enable-gnutls 
--enable-gmp 
--enable-libgme 
--enable-gray 
--enable-libaom 
--enable-libfribidi 
--enable-libass 
--enable-libvmaf 
--enable-libfreetype 
--enable-libmp3lame 
--enable-libopencore-amrnb 
--enable-libopencore-amrwb 
--enable-libopenjpeg 
--enable-librubberband 
--enable-libsoxr 
--enable-libspeex 
--enable-libsrt 
--enable-libvorbis 
--enable-libopus 
--enable-libtheora 
--enable-libvidstab 
--enable-libvo-amrwbenc 
--enable-libvpx 
--enable-libwebp 
--enable-libx264 
--enable-libx265 
--enable-libxml2 
--enable-libdav1d 
--enable-libxvid 
--enable-libzvbi 
--enable-libzimg

OSError: MoviePy error: failed to read the duration of file /tmp/334.mp31boi_q7b.

关键代码片段

音频拼接代码:

audio_concat = concatenate_audioclips(audio_clips)

视频生成代码:

with tempfile.NamedTemporaryFile(prefix=video_path, suffix='', delete=False) as data:
    video.write_videofile(data.name, fps=24, codec="libx264", ffmpeg_params=['-f', 'mp4'], threads=multiprocessing.cpu_count())

Dockerfile

FROM ubuntu:latest
ENV DEBIAN_FRONTEND noninteractive

WORKDIR /video_composer

COPY requirements.txt /video_composer/requirements.txt

RUN apt-get update && apt-get install -y software-properties-common gcc && \
    add-apt-repository -y ppa:deadsnakes/ppa

RUN apt-get update && apt-get install -y python3.11 python3-distutils python3-pip python3-apt
RUN apt-get -y update
RUN apt-get install -y ffmpeg

RUN pip install -r /video_composer/requirements.txt

RUN python3 -m certifi

COPY . /video_composer/

EXPOSE 8003

CMD ["uvicorn", "video_composer:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "8003"]

已尝试的无效方案

  • 排查MoviePy读取文件时长的常见问题(如文件路径、权限、格式)
  • 参考MoviePy官方仓库相关issue的解决方案

可能的原因及解决建议

1. 临时文件命名异常

错误中的临时文件名/tmp/334.mp31boi_q7b后缀混乱,ECS上的ffmpeg对文件名格式更敏感,无法识别非标准后缀的音频文件。
解决:给tempfile.NamedTemporaryFile指定正确的suffix参数,比如音频文件用.mp3,视频用.mp4:

# 视频生成代码修改
with tempfile.NamedTemporaryFile(prefix=video_path, suffix='.mp4', delete=False) as data:
    video.write_videofile(data.name, fps=24, codec="libx264", ffmpeg_params=['-f', 'mp4'], threads=multiprocessing.cpu_count())

2. ECS临时目录权限问题

ECS容器的/tmp目录权限可能比本地严格,导致ffmpeg无法读写临时文件。
解决:在Dockerfile中显式设置/tmp目录权限:

RUN chmod 777 /tmp

或者通过环境变量指定MoviePy使用自定义临时目录:

ENV MOVIEPY_TEMP_DIR /video_composer/temp
RUN mkdir -p /video_composer/temp && chmod 777 /video_composer/temp

3. ffmpeg版本差异

本地Docker安装的ffmpeg与ECS上的4.2.2-static版本存在兼容性差异,新版本对异常文件的容错性更好。
解决:统一Docker镜像中的ffmpeg版本,比如使用与ECS相同的静态编译版本:

# 替换原apt安装ffmpeg的步骤
RUN wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz && \
    tar xvf ffmpeg-release-amd64-static.tar.xz && \
    mv ffmpeg-*-amd64-static/ffmpeg /usr/local/bin/ && \
    mv ffmpeg-*-amd64-static/ffprobe /usr/local/bin/ && \
    rm -rf ffmpeg-*-amd64-static ffmpeg-release-amd64-static.tar.xz

4. ECS任务资源不足

ECS任务配置的内存或磁盘空间不足,导致临时文件写入不完整,ffmpeg读取时发现数据损坏。
解决:调整ECS任务的资源配额,增加内存和磁盘空间分配。

5. 临时文件写入未完成

在ffmpeg读取临时文件前,文件可能未完全写入磁盘,导致数据不完整。
解决:确保文件句柄关闭后再进行处理,或手动刷新写入缓存:

import os

with tempfile.NamedTemporaryFile(prefix=audio_path, suffix='.mp3', delete=False) as f:
    f.write(audio_data)
    f.flush()
    os.fsync(f.fileno())  # 强制写入磁盘

内容的提问来源于stack exchange,提问作者Giba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:10:02