Problem ffmpegBester Weg, um Rohr Audio- und Videostücke aus Python
Ich erhalte Audio- und Videostücke von einem Drittanbieter-Server, und ich mag diese Brocken Rohr ffmpeg eine erstellen WebM Live-Stream nach dieser Anleitung:
http://wiki.webmproject.org/adaptive-streaming/instructions-to-do-webm-live-streaming-via-dash
Hier sind sie Eingang verwenden von Webcam und Mikrofon, aber ich brauche die Datenblöcke zu verwenden, so dass der ffmpeg Befehl wie dies irgendwie aussehen würde:
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"
]
Wie Sie sehen können, verwende ich eine "video.fifo" und "audio.fifo" -Datei, weil ich dachte, es wäre eine gute Idee, die Stücke über eine Named Pipe zu pumpen, aber ich kann t es zur Arbeit bringen. Hier ist, was ich tue:
p = subprocess.Popen(cmd)
fa = os.open("video.fifo", os.O_WRONLY)
fv = os.open("audio.fifo", os.O_WRONLY)
Also zuerst die subprocess Ich fange an, so dass es die Fifo-Dateien zum Lesen geöffnet. Danach sollte ich in der Lage sein, sie zum Schreiben zu öffnen, aber ich bin es nicht. Genauer gesagt, ich kann den ersten öffnen, aber nicht den zweiten. Vielleicht hat das etwas damit zu tun, wie ffmpeg seine Eingaben verarbeitet, wenn es mehrere gibt, aber ich weiß es einfach nicht.
Frage
Wie ich entweder das Problem der nicht zu öffnenden Named Pipes lösen können oder wie kann ich erreichen, was ich ohne Named Pipes erreichen wollte.