Files
rose-ash/artdag/nodes/encoding.py
giles cc2dcbddd4 Squashed 'core/' content from commit 4957443
git-subtree-dir: core
git-subtree-split: 4957443184ae0eb6323635a90a19acffb3e01d07
2026-02-24 23:09:39 +00:00

51 lines
1.4 KiB
Python

# artdag/nodes/encoding.py
"""
Web-optimized video encoding settings.
Provides common FFmpeg arguments for producing videos that:
- Stream efficiently (faststart)
- Play on all browsers (H.264 High profile)
- Support seeking (regular keyframes)
"""
from typing import List
# Standard web-optimized video encoding arguments
WEB_VIDEO_ARGS: List[str] = [
"-c:v", "libx264",
"-preset", "fast",
"-crf", "18",
"-profile:v", "high",
"-level", "4.1",
"-pix_fmt", "yuv420p", # Ensure broad compatibility
"-movflags", "+faststart", # Enable streaming before full download
"-g", "48", # Keyframe every ~2 seconds at 24fps (for seeking)
]
# Standard audio encoding arguments
WEB_AUDIO_ARGS: List[str] = [
"-c:a", "aac",
"-b:a", "192k",
]
def get_web_encoding_args() -> List[str]:
"""Get FFmpeg args for web-optimized video+audio encoding."""
return WEB_VIDEO_ARGS + WEB_AUDIO_ARGS
def get_web_video_args() -> List[str]:
"""Get FFmpeg args for web-optimized video encoding only."""
return WEB_VIDEO_ARGS.copy()
def get_web_audio_args() -> List[str]:
"""Get FFmpeg args for web-optimized audio encoding only."""
return WEB_AUDIO_ARGS.copy()
# For shell commands (string format)
WEB_VIDEO_ARGS_STR = " ".join(WEB_VIDEO_ARGS)
WEB_AUDIO_ARGS_STR = " ".join(WEB_AUDIO_ARGS)
WEB_ENCODING_ARGS_STR = f"{WEB_VIDEO_ARGS_STR} {WEB_AUDIO_ARGS_STR}"