将音频和视频块从python中传输到ffmpeg的最佳方法

2024-05-07 23:35:13 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

我正在从第三方服务器获取音频和视频块,我希望将这些块通过管道传输到ffmpeg,以根据以下说明创建WebM实时流:

http://wiki.webmproject.org/adaptive-streaming/instructions-to-do-webm-live-streaming-via-dash

这里他们使用的是来自网络摄像头和麦克风的输入,但我需要使用数据块,所以ffmpeg命令看起来像这样:

    cmd = [
        "ffmpeg",
        "-f", "flv", "-i", "video.fifo",
        "-f", "s16le", "-ar", "16000", "-ac", "1", "-i", "audio.fifo",
        "-map", "0:0",
        "-pix_fmt", "yuv420p",
        "-c:v", "libvpx-vp9",
        "-s", "640x480", "-keyint_min", "40", "-g", "40", "-speed", "6",
        "-tile-columns", "4", "-frame-parallel", "1", "-threads", "8",
        "-static-thresh", "0", "-max-intra-rate", "300",
        "-deadline", "realtime", "-lag-in-frames", "0",
        "-error-resilient", "1",
        "-b:v", "3000k",
        "-f", "webm_chunk",
        "-header", self.video_header,
        "-chunk_start_index", "1",
        "video_360_%d.chk",
        "-map", "1:0",
        "-c:a", "libvorbis",
        "-b:a", "16k", "-ar", "16000",
        "-f", "webm_chunk",
        "-audio_chunk_duration", "2000",
        "-header", self.audio_header,
        "-chunk_start_index", "1",
        "audio_171_%d.chk"
    ]

如你所见,我正在使用一个“视频.fifo“和”音频.fifo“文件,因为我认为通过一个命名管道将块导入是一个好主意,但我无法使其工作。我要做的是:

^{pr2}$

所以我先启动子进程,这样它就可以打开fifo文件进行读取。在那之后,我应该可以打开它们进行写作,但我没有。更具体地说,我可以打开第一个,但不能打开第二个。所以也许这和ffmpeg如何处理输入有关,如果输入不止一个,但我不知道。在

问题

如何解决不可打开的命名管道的问题,或者如何在没有命名管道的情况下实现我想要实现的目标。在


Tags: selfmap视频管道video音频audio命名
1条回答
网友
1楼 · 发布于 2024-05-07 23:35:13

链接中的说明建议在后台运行ffmpeg。从ffmpeg手册页:

-stdin

Enable interaction on standard input. On by default unless standard input is used as an input. To explicitly disable interaction you need to specify "-nostdin".

Disabling interaction on standard input is useful, for example, if ffmpeg is in the background process group. Roughly the same result can be achieved with "ffmpeg ... < /dev/null" but it requires a shell.

不久前我也遇到过类似的问题。当处理多个输入时,ffmpeg第一次将按预期工作,然后每次都开始抛出错误。将-nostdin添加到全局参数或</dev/null中应该可以更正此问题。除去所有的铃铛和哨声,下面的任何一个都可以。在

ffmpeg [in-args][input][out-args][output] & </dev/null

ffmpeg [-nostdin in-args][input][out-args][output] &

希望这有帮助。在

相关问题 更多 >