add high quality video export and wrapper script

- replace diffusers export_to_video with direct imageio writer
- add --crf option for quality control (default 18, visually lossless)
- use libx264 with slow preset for better compression
- add ltx2 wrapper script for easier cli usage

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Norbert Schmidt
2026-01-11 12:10:54 +01:00
parent 707f2447cf
commit bbe43a4e7d
2 changed files with 28 additions and 2 deletions

View File

@@ -8,9 +8,10 @@ usage: python generate.py "your prompt" -o output.mp4
import argparse
import sys
import imageio
import numpy as np
import torch
from diffusers import LTX2Pipeline
from diffusers.utils import export_to_video
def main():
@@ -25,6 +26,7 @@ def main():
parser.add_argument("--frames", type=int, default=25, help="frame count")
parser.add_argument("--fps", type=int, default=24, help="output fps")
parser.add_argument("--seed", type=int, default=None, help="random seed")
parser.add_argument("--crf", type=int, default=18, help="video quality (0-51, lower=better, 18=visually lossless)")
args = parser.parse_args()
@@ -79,7 +81,25 @@ def main():
)
video_frames = result.frames[0]
export_to_video(video_frames, args.output, fps=args.fps)
# convert to uint8 numpy arrays
frames = []
for frame in video_frames:
frame = np.array(frame, dtype=np.uint8)
frames.append(frame)
# export with high quality h264
writer = imageio.get_writer(
args.output,
fps=args.fps,
codec='libx264',
quality=None,
pixelformat='yuv420p',
output_params=['-crf', str(args.crf), '-preset', 'slow']
)
for frame in frames:
writer.append_data(frame)
writer.close()
print(f"\nsaved to: {args.output}")
print(f"seed: {args.seed}")