【问题标题】:Is it possible to combine audio and video from ffmpeg-python without writing to files first?是否可以在不先写入文件的情况下合并来自 ffmpeg-python 的音频和视频?
【发布时间】:2021-01-22 07:22:31
【问题描述】:

我正在使用 ffmpeg-python 库。

我使用了示例代码:https://github.com/kkroening/ffmpeg-python/tree/master/examples 来异步读入和处理音频和视频流。处理是自定义的,不是内置 ffmpeg 命令可以实现的(想象一下像 tensorflow 在音频和视频上的深度梦想)。然后我想重新组合我创建的音频和视频流。目前,我能看到的唯一方法是将两个流写入单独的文件(如在此答案中所做的那样: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/

【问题讨论】:

    标签: python python-3.x video ffmpeg


    【解决方案1】:

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

    【讨论】:

    • 如果输入不是pipe: 将只允许我推送音频或视频,而不是两者?
    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 2020-11-21
    • 2021-08-05
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多