51 lines
1.4 KiB
Python
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}"
|