微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以在不先写入文件的情况下结合来自 ffmpeg-python 的音频和视频?

如何解决是否可以在不先写入文件的情况下结合来自 ffmpeg-python 的音频和视频?

我正在使用 ffmpeg-python 库。

我使用示例代码https://github.com/kkroening/ffmpeg-python/tree/master/examples 异步读入和处理音频和视频流。处理是自定义的,而不是内置的 ffmpeg 命令可以实现的(想象一下像音频和视频上的 tensorflow deep dreaming 之类的东西)。然后我想重新组合我创建的音频和视频流。目前,我能看到的唯一方法是将两个流都写到单独的文件中(就像在这个答案中所做的那样:How to combine The video and audio files in ffmpeg-python),然后使用 ffmpeg 将它们组合起来。这具有无法流式传输结果的主要缺点,即在开始播放组合的音频/视频之前,必须完全完成音频和视频的处理。有没有什么方法可以将它们组合起来,而无需将文件作为中间步骤?

从技术上讲,流最初是从 ffmpeg 读入的这一事实是无关紧要的。您不妨假设我处于以下情况:

def audio_stream():
    for i in range(10):
        yield bytes(44100 * 2 * 4) # one second of audio 44.1k sample rate,2 channel,s32le format

def video_stream():
    for i in range(10):
        yield bytes(60 * 1080 * 1920 * 3) # one second of video 60 fps 1920x1080 rgb24 format

# how to write both streams of bytes to file without writing each one separately to a file first?

我想使用 ffmpeg.concat,但这需要 ffmpeg.inputs,它只接受文件名作为输入。有没有其他办法?以下是文档:https://kkroening.github.io/ffmpeg-python/

解决方法

看来您必须使用管道。查看“使用 numpy 逐帧处理视频”示例。如果传递给输入'pipe:' 而不是文件名,则可以使用 stdin.write 来推送原始数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。