diff --git a/modules/gui/qt/Makefile.am b/modules/gui/qt/Makefile.am
index 643d918df9ffe7384023f35943f03126d3e4a01e..c27dbcfbe2cb9363a5b25a29b80e83f7395e5b65 100644
--- a/modules/gui/qt/Makefile.am
+++ b/modules/gui/qt/Makefile.am
@@ -820,6 +820,7 @@ libqt_plugin_la_QML = \
 	gui/qt/player/qml/TopBar.qml \
 	gui/qt/player/qml/TrackInfo.qml \
 	gui/qt/player/qml/TracksPage.qml \
+	gui/qt/player/qml/TracksPageAudio.qml \
 	gui/qt/player/qml/TracksPageSpeed.qml \
 	gui/qt/player/qml/TracksPageSubtitle.qml \
 	gui/qt/player/qml/ControlLayout.qml \
diff --git a/modules/gui/qt/player/qml/TracksPageAudio.qml b/modules/gui/qt/player/qml/TracksPageAudio.qml
new file mode 100644
index 0000000000000000000000000000000000000000..25302e5dca920a554076c7b498fe58c0387760ee
--- /dev/null
+++ b/modules/gui/qt/player/qml/TracksPageAudio.qml
@@ -0,0 +1,127 @@
+/*****************************************************************************
+ * Copyright (C) 2022 VLC authors and VideoLAN
+ *
+ * Authors: Benjamin Arnaud <bunjee@omega.gg>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+import QtQuick 2.11
+import QtQuick.Layouts 1.11
+
+import org.videolan.vlc 0.1
+
+import "qrc:///style/"
+import "qrc:///widgets/" as Widgets
+
+TracksPage {
+    id: root
+
+    // Functions
+
+    function textFromValue(value, locale) {
+        return I18n.qtr("%1 ms").arg(Number(value).toLocaleString(locale, 'f', 0))
+    }
+
+    function valueFromText(text, locale) {
+        return Number.fromLocaleString(locale, text.substring(0, text.length - 3))
+    }
+
+    // Children
+
+    ColumnLayout {
+        anchors.left: parent.left
+        anchors.right: parent.right
+
+        spacing: VLCStyle.margin_xxsmall
+
+        Widgets.SubtitleLabel {
+            Layout.fillWidth: true
+
+            text: I18n.qtr("Audio track synchronization")
+
+            color: "white"
+        }
+
+        RowLayout {
+            Layout.fillWidth: true
+            Layout.topMargin: VLCStyle.margin_large
+
+            spacing: VLCStyle.margin_xsmall
+
+            Widgets.MenuCaption {
+                Layout.fillWidth: true
+                Layout.alignment: Qt.AlignHCenter
+
+                text: I18n.qtr("Audio track delay")
+
+                color: "white"
+            }
+
+            Widgets.TransparentSpinBox {
+                id: spinBox
+
+                property bool update: false
+
+                Layout.preferredWidth: VLCStyle.dp(128, VLCStyle.scale)
+
+                stepSize: 50
+                from: -10000
+
+                textFromValue: root.textFromValue
+                valueFromText: root.valueFromText
+
+                Navigation.parentItem: root
+                Navigation.rightItem: reset
+
+                Component.onCompleted: {
+                    value = Player.audioDelayMS
+
+                    update = true
+                }
+
+                onValueChanged: {
+                    if (update === false)
+                        return
+
+                    Player.audioDelayMS = value
+                }
+
+                Connections {
+                    target: Player
+
+                    onAudioDelayChanged: {
+                        spinBox.update = false
+
+                        spinBox.value = Player.audioDelayMS
+
+                        spinBox.update = true
+                    }
+                }
+            }
+
+            Widgets.ActionButtonOverlay {
+                id: reset
+
+                text: I18n.qtr("Reset")
+
+                onClicked: spinBox.value = 0
+
+                Navigation.parentItem: root
+                Navigation.leftItem: spinBox
+            }
+        }
+    }
+}
diff --git a/modules/gui/qt/vlc.qrc b/modules/gui/qt/vlc.qrc
index 1c2d26557eff2eaa3b4a176c1671d026e614b5e6..654833fca338515592751d44e443d69c1f34387d 100644
--- a/modules/gui/qt/vlc.qrc
+++ b/modules/gui/qt/vlc.qrc
@@ -348,6 +348,7 @@
         <file alias="TrackInfo.qml">player/qml/TrackInfo.qml</file>
         <file alias="TracksPage.qml">player/qml/TracksPage.qml</file>
         <file alias="TracksPageSpeed.qml">player/qml/TracksPageSpeed.qml</file>
+        <file alias="TracksPageAudio.qml">player/qml/TracksPageAudio.qml</file>
         <file alias="TracksPageSubtitle.qml">player/qml/TracksPageSubtitle.qml</file>
         <file alias="ControlbarControls.qml">player/qml/ControlbarControls.qml</file>
         <file alias="MiniPlayer.qml">player/qml/MiniPlayer.qml</file>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 21f94ee7ab6953b1fe5132e6fbc1c14a1a9a9581..9dc15c38b8c4a4a3044c32aa89e39b36a73f6abc 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -873,6 +873,7 @@ modules/gui/qt/player/qml/LanguageMenu.qml
 modules/gui/qt/player/qml/Player.qml
 modules/gui/qt/player/qml/ResumeDialog.qml
 modules/gui/qt/player/qml/TopBar.qml
+modules/gui/qt/player/qml/TracksPageAudio.qml
 modules/gui/qt/player/qml/TracksPageSubtitle.qml
 modules/gui/qt/player/qml/controlbarcontrols/TeletextWidget.qml
 modules/gui/qt/player/qml/controlbarcontrols/VolumeWidget.qml