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

Python使用Imageio转换视频格式时音频丢失无法合并的问题咨询

问题原因

imageio 原生的视频读写逻辑默认仅处理画面帧数据,不会自动读取、写入原视频的音频流,因此你当前的代码输出的文件仅包含视频轨道,没有音频。

解决方案

你可以借助 imageio-ffmpeg 扩展包实现音视频同步转换,无需额外调用其他工具。

首先安装依赖:

pip install imageio-ffmpeg

修改后的转换函数如下:

import imageio
import os

def convertor(inputpath, targetformat):
    try:
        outputpath = os.path.splitext(inputpath)[0] + '_converted' + targetformat
        print(f'Converting {inputpath} to {outputpath}')
        # 读取原视频,同时获取音视频元信息
        reader = imageio.get_reader(inputpath)
        meta_data = reader.get_meta_data()
        fps = meta_data['fps']
        # 读取原音频流
        audio_data = meta_data.get('audio', None)
        # 初始化写入器时传入音频参数
        writer = imageio.get_writer(
            outputpath, 
            fps=fps,
            audio=audio_data if audio_data is not None else False,
            audio_codec=meta_data.get('audio_codec', 'aac')
        )

        for idx, frame in enumerate(reader):
            writer.append_data(frame)
            print(f'Processed frame {idx}')
        print("Work done")
    except Exception as e:
        print(f"Error occurred: {e}")
    finally:
        # 确保资源正常释放
        reader.close()
        if 'writer' in locals():
            writer.close()
补充说明
  • 原代码存在几处可优化点:import Imageio 首字母大写错误、try 块缺少对应的异常捕获逻辑、writer.close() 没有放在异常安全的执行位置,上述修改后的代码已经修复了这些问题。
  • 原代码中打印帧数组的操作实际输出冗余信息,修改为打印帧索引更便于观察转换进度。
  • 如果目标格式对音频编码有特殊要求,可以手动调整 audio_codec 参数的取值:比如输出MP4格式时推荐用aac编码,输出WebM格式时可以用opus编码。
  • 如果你已经单独生成了无音频的视频文件,也可以直接调用FFmpeg命令合并音视频,命令参考:
ffmpeg -i 无音频的输出视频.mp4 -i 原视频.mp4 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 最终带音频的输出.mp4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:30:00