-
-
Save ix4/7da72574336c690b6afa5a7286023289 to your computer and use it in GitHub Desktop.
Encoding a file as a Youtube video - https://www.youtube.com/watch?v=hyqLv2_zBdA
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
# Encode inputfile.tar.gz as a series of video frames | |
# Frames are written to frames/frameNNNN.png | |
from PIL import Image | |
with open('inputfile.tar.gz', 'rb') as f: | |
data = f.read() | |
WIDTH = 120 | |
HEIGHT = 90 | |
CHUNK_SIZE = int((WIDTH * HEIGHT) / 8) | |
chunks = [] | |
offset = 0 | |
while offset < len(data): | |
chunks.append(data[offset:offset+CHUNK_SIZE]) | |
offset += CHUNK_SIZE | |
for frame_num, chunk in enumerate(chunks): | |
padded_chunk = chunk + (b'\0' * (CHUNK_SIZE - len(chunk))) | |
img = Image.frombytes('1', (WIDTH, HEIGHT), padded_chunk) | |
img.save('frames/frame%04d.png' % (frame_num + 1)) | |
# Encode as video with: | |
# ffmpeg -i frames/frame%04d.png -vf scale=1440:1080 -sws_flags neighbor -vcodec ffv1 output.mkv | |
# Decode the resulting downloaded video with: | |
# ffmpeg -i downloaded.mkv -vf scale=120:-1,eq=contrast=10 -sws_flags neighbor -pix_fmt monob -f rawvideo result.tar.gz |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment