diff --git a/apps/avifenc.c b/apps/avifenc.c
index 848bad9..d834d5a 100644
--- a/apps/avifenc.c
+++ b/apps/avifenc.c
@@ -446,10 +446,10 @@
 
     int returnCode = 0;
     int jobs = 1;
-    int minQuantizer = 24;
-    int maxQuantizer = 26;
-    int minQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
-    int maxQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
+    int minQuantizer = -1;
+    int maxQuantizer = -1;
+    int minQuantizerAlpha = -1;
+    int maxQuantizerAlpha = -1;
     int tileRowsLog2 = -1;
     int tileColsLog2 = -1;
     avifBool autoTiling = AVIF_FALSE;
@@ -786,19 +786,6 @@
             }
         } else if (!strcmp(arg, "-l") || !strcmp(arg, "--lossless")) {
             lossless = AVIF_TRUE;
-
-            // Set defaults, and warn later on if anything looks incorrect
-            input.requestedFormat = AVIF_PIXEL_FORMAT_YUV444; // don't subsample when using AVIF_MATRIX_COEFFICIENTS_IDENTITY
-            minQuantizer = AVIF_QUANTIZER_LOSSLESS;           // lossless
-            maxQuantizer = AVIF_QUANTIZER_LOSSLESS;           // lossless
-            minQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;      // lossless
-            maxQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;      // lossless
-            codecChoice = AVIF_CODEC_CHOICE_AOM;              // rav1e doesn't support lossless transform yet:
-                                                              // https://github.com/xiph/rav1e/issues/151
-                                                              // SVT-AV1 doesn't support lossless encoding yet:
-                                                              // https://gitlab.com/AOMediaCodec/SVT-AV1/-/issues/1636
-            requestedRange = AVIF_RANGE_FULL;                 // avoid limited range
-            matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_IDENTITY; // this is key for lossless
         } else if (!strcmp(arg, "-p") || !strcmp(arg, "--premultiply")) {
             premultiplyAlpha = AVIF_TRUE;
         } else if (!strcmp(arg, "--sharpyuv")) {
@@ -818,6 +805,62 @@
         ++argIndex;
     }
 
+    // Check lossy/lossless parameters and set to default if needed.
+    if (lossless) {
+        // Pixel format.
+        if (input.requestedFormat != AVIF_PIXEL_FORMAT_NONE && input.requestedFormat != AVIF_PIXEL_FORMAT_YUV444) {
+            fprintf(stderr,
+                    "When set, the pixel format can only be 444 in lossless "
+                    "mode.\n");
+            returnCode = 1;
+        }
+        // Don't subsample when using AVIF_MATRIX_COEFFICIENTS_IDENTITY.
+        input.requestedFormat = AVIF_PIXEL_FORMAT_YUV444;
+        // Quantizers.
+        if (minQuantizer > 0 || maxQuantizer > 0 || minQuantizerAlpha > 0 || maxQuantizerAlpha > 0) {
+            fprintf(stderr, "Quantizers cannot be set in lossless mode, except to 0.\n");
+            returnCode = 1;
+        }
+        minQuantizer = maxQuantizer = minQuantizerAlpha = maxQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
+        // Codec.
+        if (codecChoice != AVIF_CODEC_CHOICE_AUTO && codecChoice != AVIF_CODEC_CHOICE_AOM) {
+            fprintf(stderr, "Codec can only be AOM in lossless mode.\n");
+            returnCode = 1;
+        }
+        // rav1e doesn't support lossless transform yet:
+        // https://github.com/xiph/rav1e/issues/151
+        // SVT-AV1 doesn't support lossless encoding yet:
+        // https://gitlab.com/AOMediaCodec/SVT-AV1/-/issues/1636
+        codecChoice = AVIF_CODEC_CHOICE_AOM;
+        // Range.
+        if (requestedRange != AVIF_RANGE_FULL) {
+            fprintf(stderr, "Range has to be full in lossless mode.\n");
+            returnCode = 1;
+        }
+        // Matrix coefficients.
+        if (cicpExplicitlySet && matrixCoefficients != AVIF_MATRIX_COEFFICIENTS_IDENTITY) {
+            fprintf(stderr, "Matrix coefficients have to be identity in lossless mode.\n");
+            returnCode = 1;
+        }
+        matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_IDENTITY;
+        if (returnCode == 1)
+            goto cleanup;
+    } else {
+        // Set lossy defaults.
+        if (minQuantizer == -1) {
+            minQuantizer = 24;
+        }
+        if (maxQuantizer == -1) {
+            maxQuantizer = 26;
+        }
+        if (minQuantizerAlpha == -1) {
+            minQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
+        }
+        if (maxQuantizerAlpha == -1) {
+            maxQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS;
+        }
+    }
+
     stdinFile.filename = "(stdin)";
     stdinFile.duration = outputTiming.duration;
 
diff --git a/tests/test_cmd_lossless.sh b/tests/test_cmd_lossless.sh
index bf0aa5d..a4bfd92 100755
--- a/tests/test_cmd_lossless.sh
+++ b/tests/test_cmd_lossless.sh
@@ -61,6 +61,16 @@
   "${AVIFENC}" -s 8 "${INPUT_PNG}" -o "${ENCODED_FILE}"
   "${AVIFDEC}" "${ENCODED_FILE}" "${DECODED_FILE}"
 
+  # Combining some arguments with lossless should fail.
+  for option in "-y 400" "--min 1" "-r limited" "--cicp 2/2/8"; do
+    "${AVIFENC}" $option -s 10 -l "${DECODED_FILE}" -o "${ENCODED_FILE}" && exit 1
+  done
+
+  # Combining some arguments with lossless should work.
+  for option in "-y 444" "--min 0" "-r full"; do
+    "${AVIFENC}" $option -s 10 -l "${DECODED_FILE}" -o "${ENCODED_FILE}"
+  done
+
   # Lossless test. The decoded pixels should be the same as the original image.
   echo "Testing basic lossless"
   # TODO(yguyon): Make this test pass with INPUT_PNG instead of DECODED_FILE.
