Files
photoprism/internal/ffmpeg/encode/default.go
2025-09-30 22:51:10 +02:00

40 lines
1.1 KiB
Go

package encode
import (
"os"
"strings"
"github.com/photoprism/photoprism/pkg/fs"
"github.com/photoprism/photoprism/pkg/txt"
)
// defaultAvcEncoder is the default FFmpeg AVC encoder if it has already been determined.
var defaultAvcEncoder = Encoder("")
// DefaultAvcEncoder determines and returns the default FFmpeg AVC encoder type:
func DefaultAvcEncoder() Encoder {
if defaultAvcEncoder != "" {
return defaultAvcEncoder
}
// See: https://docs.photoprism.app/getting-started/config-options/#docker-image
init := os.Getenv("PHOTOPRISM_INIT")
// See: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/docker-specialized.html
dCap := os.Getenv("NVIDIA_DRIVER_CAPABILITIES")
vDev := os.Getenv("NVIDIA_VISIBLE_DEVICES")
// Check if a GPU is shared through the NVIDIA Container Toolkit.
switch {
case fs.DeviceExists("/dev/nvidia0") && !strings.Contains(init, "ffmpeg") &&
(dCap == "video" || dCap == "all") && (txt.IsUInt(vDev) || vDev == "all"):
// Enable Nvidia AVC encoder.
defaultAvcEncoder = NvidiaAvc
default:
// Use AVC software encoder.
defaultAvcEncoder = SoftwareAvc
}
return defaultAvcEncoder
}