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 argparse
import sys import sys
import imageio
import numpy as np
import torch import torch
from diffusers import LTX2Pipeline from diffusers import LTX2Pipeline
from diffusers.utils import export_to_video
def main(): def main():
@@ -25,6 +26,7 @@ def main():
parser.add_argument("--frames", type=int, default=25, help="frame count") 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("--fps", type=int, default=24, help="output fps")
parser.add_argument("--seed", type=int, default=None, help="random seed") 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() args = parser.parse_args()
@@ -79,7 +81,25 @@ def main():
) )
video_frames = result.frames[0] 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"\nsaved to: {args.output}")
print(f"seed: {args.seed}") print(f"seed: {args.seed}")

6
ltx2 Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
# quick wrapper for ltx-2 generation
source ~/ltx-venv/bin/activate
cd "$(dirname "$0")"
python generate.py "$@"