ПроблемыЛучшего способ трубных кусков аудио и видео внутри питона для FFmpeg
Я получаю аудио и видео ломти от стороннего сервера, и я хотел бы направить эти куски в 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"
]
Как вы можете видеть, я использую файл «video.fifo» и «audio.fifo», потому что я подумал, что было бы неплохо протрубить куски через именованный канал, но я могу " t заставить его работать. Вот что я делаю:
p = subprocess.Popen(cmd)
fa = os.open("video.fifo", os.O_WRONLY)
fv = os.open("audio.fifo", os.O_WRONLY)
Так я первый запуск подпроцесс, так что он открывает ФИФО файлы для чтения. После этого я должен был бы открыть их для написания, но это не так. В частности, я могу открыть первый, но не второй. Возможно, это связано с тем, как ffmpeg обрабатывает свои входы, если их несколько, но я просто не знаю.
Вопрос
Как я могу либо решить проблему, не являющихся открывающихся именованных каналов или как я могу добиться того, чего я хотел достичь без именованных каналов.