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:
24
generate.py
24
generate.py
@@ -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}")
|
||||||
|
|||||||
Reference in New Issue
Block a user