diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index 9df3843..ffade27 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -200,17 +200,19 @@
   }
 
   rtc_executable("psnr_ssim_analyzer") {
+    testonly = true
     sources = [
       "psnr_ssim_analyzer/psnr_ssim_analyzer.cc",
     ]
 
     deps = [
-      ":command_line_parser",
       ":video_file_reader",
       ":video_quality_analysis",
       "../api:scoped_refptr",
       "../api/video:video_frame",
       "../api/video:video_rtp_headers",
+      "//third_party/abseil-cpp/absl/flags:flag",
+      "//third_party/abseil-cpp/absl/flags:parse",
     ]
   }
 
diff --git a/rtc_tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc b/rtc_tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc
index ca97161..05180c2 100644
--- a/rtc_tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc
+++ b/rtc_tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc
@@ -13,12 +13,26 @@
 #include <algorithm>
 #include <string>
 
+#include "absl/flags/flag.h"
+#include "absl/flags/parse.h"
 #include "api/scoped_refptr.h"
 #include "api/video/video_frame_buffer.h"
 #include "rtc_tools/frame_analyzer/video_quality_analysis.h"
-#include "rtc_tools/simple_command_line_parser.h"
 #include "rtc_tools/video_file_reader.h"
 
+ABSL_FLAG(std::string,
+          results_file,
+          "results.txt",
+          "The full name of the file where the results will be written");
+ABSL_FLAG(std::string,
+          reference_file,
+          "ref.yuv",
+          "The reference YUV file to compare against");
+ABSL_FLAG(std::string,
+          test_file,
+          "test.yuv",
+          "The test YUV file to run the analysis for");
+
 void CompareFiles(
     const rtc::scoped_refptr<webrtc::test::Video>& reference_video,
     const rtc::scoped_refptr<webrtc::test::Video>& test_video,
@@ -59,45 +73,27 @@
  * --results_file=<name_of_file>
  */
 int main(int argc, char* argv[]) {
-  std::string program_name = argv[0];
-  std::string usage =
-      "Runs PSNR and SSIM on two I420 videos and write the"
-      "results in a file.\n"
-      "Example usage:\n" +
-      program_name +
-      " --reference_file=ref.yuv "
-      "--test_file=test.yuv --results_file=results.txt\n"
-      "Command line flags:\n"
-      "  - reference_file(string): The reference YUV file to compare against."
-      " Default: ref.yuv\n"
-      "  - test_file(string): The test YUV file to run the analysis for."
-      " Default: test_file.yuv\n"
-      "  - results_file(string): The full name of the file where the results "
-      "will be written. Default: results.txt\n";
-
-  webrtc::test::CommandLineParser parser;
-
-  // Init the parser and set the usage message
-  parser.Init(argc, argv);
-  parser.SetUsageMessage(usage);
-
-  parser.SetFlag("results_file", "results.txt");
-  parser.SetFlag("reference_file", "ref.yuv");
-  parser.SetFlag("test_file", "test.yuv");
-  parser.SetFlag("results_file", "results.txt");
-  parser.SetFlag("help", "false");
-
-  parser.ProcessFlags();
-  if (parser.GetFlag("help") == "true") {
-    parser.PrintUsageMessage();
-    exit(EXIT_SUCCESS);
-  }
-  parser.PrintEnteredFlags();
+  absl::ParseCommandLine(argc, argv);
+  // TODO(bugs.webrtc.org/10616): Add program usage message when Abseil
+  // flags supports it.
+  // std::string usage =
+  //     "Runs PSNR and SSIM on two I420 videos and write the"
+  //     "results in a file.\n"
+  //     "Example usage:\n" +
+  //     program_name +
+  //     " --reference_file=ref.yuv "
+  //     "--test_file=test.yuv --results_file=results.txt\n"
+  //     "Command line flags:\n"
+  //     "  - reference_file(string): The reference YUV file to compare
+  //     against." " Default: ref.yuv\n" "  - test_file(string): The test YUV
+  //     file to run the analysis for." " Default: test_file.yuv\n" "  -
+  //     results_file(string): The full name of the file where the results "
+  //     "will be written. Default: results.txt\n";
 
   rtc::scoped_refptr<webrtc::test::Video> reference_video =
-      webrtc::test::OpenY4mFile(parser.GetFlag("reference_file"));
+      webrtc::test::OpenY4mFile(absl::GetFlag(FLAGS_reference_file));
   rtc::scoped_refptr<webrtc::test::Video> test_video =
-      webrtc::test::OpenY4mFile(parser.GetFlag("test_file"));
+      webrtc::test::OpenY4mFile(absl::GetFlag(FLAGS_test_file));
 
   if (!reference_video || !test_video) {
     fprintf(stderr, "Error opening video files\n");
@@ -114,6 +110,6 @@
   }
 
   CompareFiles(reference_video, test_video,
-               parser.GetFlag("results_file").c_str());
+               absl::GetFlag(FLAGS_results_file).c_str());
   return 0;
 }
