ftputil maintainer here. :-)
I haven't worked with pytube yet, so I can only answer the ftputil part.
If you really don't or can't save a video file temporarily to your computer, you'd need a way to get a file-like object for the video download from Pytube. (I haven't been able to see how. There's an interface for "streams", but I'm not sure if they're directly usable as file-like objects.)
If you have a file object from Pytube, you can create a file-like object for writing on the FTP server for a path of your choice and copy from file object to file object:
import shutil
import ftputil
import pytube
# Get file-like object for video.
source_file = ...
with ftputil.FTPHost(host, user, password) as ftp_host:
with ftp_host.open('/path/to/target_file', 'wb') as target_file:
shutil.copyfileobj(source_file, target_file)
I'm aware that the Pytube part is missing. Maybe someone else can contribute that, or you can ask on their ticket system. (I didn't find a mailing list or similar.)
All that said and even if it doesn't answer your actual question, you may be able to download each video file locally and upload it to the FTP server, file by file. That way, you'd only need space for the largest video file.
Links for the code example: