Last active
April 9, 2024 19:06
-
-
Save ritiek/c98452d8dcf062a63a70fe4631099419 to your computer and use it in GitHub Desktop.
Using FFmpeg to read input via stdin in Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# pip install pytube3 | |
import pytube | |
import urllib.request | |
import subprocess | |
content = pytube.YouTube("https://www.youtube.com/watch?v=YQHsXMglC9A") | |
streams = content.streams.filter(only_audio=True).order_by("abr").desc() | |
response = urllib.request.urlopen(streams[0].url) | |
def download_and_convert_sequentially(): | |
with open("input.opus", "wb") as fout: | |
fout.write(response.read()) | |
command = ("ffmpeg", "-y", "-i", "input.opus", "output.wav") | |
process = subprocess.Popen(command) | |
process.wait() | |
def download_and_convert_parallely(): | |
command = ("ffmpeg", "-y", "-i", "-", "output.wav") | |
process = subprocess.Popen(command, stdin=subprocess.PIPE) | |
while True: | |
chunk = response.read(16 * 1024) | |
if not chunk: | |
break | |
process.stdin.write(chunk) | |
process.stdin.close() | |
process.wait() | |
# download_and_convert_sequentially() | |
download_and_convert_parallely() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I've been looking for
download_and_convert_parallely()
all day, thank you!I was originally using the ffmpeg-python library's run_async() function, trying to do a similar
process.stdin.write(chunk)
but the pipe closed after the first call to stdin.write, I think their implementation is specific to "pipe:" input.