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

如何使用ffmpeg-python合并内存中bytes格式的音视频?

合并内存中Bytes格式的视频与音频(Python + ffmpeg-python)

你遇到的错误是因为ffmpeg.concat只接受FilterableStream类型的输入,不能直接传入原始Bytes对象。要处理内存中的视频/音频Bytes,需要先把Bytes转换成ffmpeg能识别的输入流,以下是两种可行方案:

方案一:通过标准输入(Pipe)直接传递Bytes流

这种方式全程在内存中操作,无需写入磁盘,效率最高。核心思路是利用ffmpeg支持从pipe:读取输入的特性,分别为视频和音频创建独立的Pipe输入流,再将Bytes数据喂入对应的流中。

示例代码:

import ffmpeg

# 假设你已经有内存中的视频和音频Bytes
video_bytes = b"..."  # 你的视频Bytes数据
audio_bytes = b"..."  # 你的音频Bytes数据

# 创建视频输入流:指定视频的格式(比如mp4、avi,根据实际情况调整)
video_stream = ffmpeg.input("pipe:", format="mp4")
# 创建音频输入流:指定音频的格式(比如mp3、aac,根据实际情况调整)
audio_stream = ffmpeg.input("pipe:", format="mp3")

# 合并流并输出到Pipe(也可以指定输出文件路径)
# 使用vcodec='copy'和acodec='copy'直接复制流,避免重新编码(更快且无质量损失)
process = ffmpeg.output(
    video_stream,
    audio_stream,
    "pipe:",
    format="mp4",
    vcodec="copy",
    acodec="copy"
)

# 运行并传入Bytes数据:input字典的key对应Pipe的索引(0对应第一个pipe:, 1对应第二个)
merged_bytes, _ = process.run(input={0: video_bytes, 1: audio_bytes})

# merged_bytes 就是合并后的视频Bytes,可以直接写入文件或进一步处理

注意事项:

  • 必须指定正确的format参数:ffmpeg无法自动识别Pipe中的流格式,需要你明确传入视频/音频的原始格式(比如视频是mp4,音频是aac)。
  • 如果视频和音频的编码格式不兼容目标输出格式,需要去掉vcodec='copy'和acodec='copy',并指定合适的编码器(比如vcodec='libx264'、acodec='aac')。

方案二:使用临时文件(备选方案)

如果Pipe方式出现兼容性问题,可以用临时文件中转:将Bytes写入临时文件,让ffmpeg读取文件路径进行合并,最后清理临时文件。

示例代码:

import ffmpeg
import tempfile
import os

video_bytes = b"..."
audio_bytes = b"..."

# 创建视频临时文件
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as vid_temp:
    vid_temp.write(video_bytes)
    vid_path = vid_temp.name

# 创建音频临时文件
with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as aud_temp:
    aud_temp.write(audio_bytes)
    aud_path = aud_temp.name

# 使用concat合并(这里的concat接受文件路径生成的Stream)
merged_bytes, _ = (
    ffmpeg.concat(ffmpeg.input(vid_path), ffmpeg.input(aud_path), v=1, a=1)
    .output("pipe:", format="mp4")
    .run()
)

# 清理临时文件
os.unlink(vid_path)
os.unlink(aud_path)

优缺点:

  • 优点:逻辑更直观,调试时可以直接查看临时文件内容。
  • 缺点:涉及磁盘IO,速度比Pipe方案慢,且需要处理临时文件的清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:20:33