diff --git a/FFMpegCore/FFMpeg/Arguments/AudibleEncryptionKeyArgument.cs b/FFMpegCore/FFMpeg/Arguments/AudibleEncryptionKeyArgument.cs
new file mode 100644
index 0000000..9f1a325
--- /dev/null
+++ b/FFMpegCore/FFMpeg/Arguments/AudibleEncryptionKeyArgument.cs
@@ -0,0 +1,16 @@
+namespace FFMpegCore.Arguments
+{
+ public class AudibleEncryptionKeyArgument : IArgument
+ {
+ private readonly string _key;
+ private readonly string _iv;
+
+ public AudibleEncryptionKeyArgument(string key, string iv)
+ {
+ _key = key;
+ _iv = iv;
+ }
+
+ public string Text => $"-audible_key {_key} -audible_iv {_iv}";
+ }
+}
diff --git a/FFMpegCore/FFMpeg/Arguments/ID3V2VersionArgument.cs b/FFMpegCore/FFMpeg/Arguments/ID3V2VersionArgument.cs
new file mode 100644
index 0000000..e18d93b
--- /dev/null
+++ b/FFMpegCore/FFMpeg/Arguments/ID3V2VersionArgument.cs
@@ -0,0 +1,14 @@
+namespace FFMpegCore.Arguments
+{
+ public class ID3V2VersionArgument : IArgument
+ {
+ private readonly int _version;
+
+ public ID3V2VersionArgument(int version)
+ {
+ _version = version;
+ }
+
+ public string Text => $"-id3v2_version {_version}";
+ }
+}
diff --git a/FFMpegCore/FFMpeg/Arguments/MapMetadataArgument.cs b/FFMpegCore/FFMpeg/Arguments/MapMetadataArgument.cs
new file mode 100644
index 0000000..01b661c
--- /dev/null
+++ b/FFMpegCore/FFMpeg/Arguments/MapMetadataArgument.cs
@@ -0,0 +1,44 @@
+using FFMpegCore.Extend;
+
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace FFMpegCore.Arguments
+{
+ public class MapMetadataArgument : IInputArgument, IDynamicArgument
+ {
+ private readonly int? _inputIndex;
+
+ ///
+ /// Null means it takes the last input used befroe this argument
+ ///
+ ///
+ public MapMetadataArgument(int? inputIndex = null)
+ {
+ _inputIndex = inputIndex;
+ }
+
+ public string Text => GetText(null);
+
+ public string GetText(StringBuilder context)
+ {
+ var index = _inputIndex ?? context?.ToString().CountOccurrences("-i") -1 ?? 0;
+ return $"-map_metadata {index}";
+ }
+
+
+ public Task During(CancellationToken cancellationToken = default)
+ {
+ return Task.CompletedTask;
+ }
+
+ public void Post()
+ {
+ }
+
+ public void Pre()
+ {
+ }
+ }
+}
diff --git a/FFMpegCore/FFMpeg/FFMpegArgumentOptions.cs b/FFMpegCore/FFMpeg/FFMpegArgumentOptions.cs
index ca6628a..b4f5111 100644
--- a/FFMpegCore/FFMpeg/FFMpegArgumentOptions.cs
+++ b/FFMpegCore/FFMpeg/FFMpegArgumentOptions.cs
@@ -1,5 +1,6 @@
using System;
using System.Drawing;
+
using FFMpegCore.Arguments;
using FFMpegCore.Enums;
@@ -66,6 +67,10 @@ public FFMpegArgumentOptions WithAudioFilters(Action audioFi
public FFMpegArgumentOptions ForcePixelFormat(string pixelFormat) => WithArgument(new ForcePixelFormat(pixelFormat));
public FFMpegArgumentOptions ForcePixelFormat(PixelFormat pixelFormat) => WithArgument(new ForcePixelFormat(pixelFormat));
+ public FFMpegArgumentOptions WithAudibleEncryptionKeys(string key, string iv) => WithArgument(new AudibleEncryptionKeyArgument(key, iv));
+ public FFMpegArgumentOptions WithTagVersion(int id3v2Version = 3) => WithArgument(new ID3V2VersionArgument(id3v2Version));
+
+
public FFMpegArgumentOptions WithArgument(IArgument argument)
{
Arguments.Add(argument);
diff --git a/FFMpegCore/FFMpeg/FFMpegArguments.cs b/FFMpegCore/FFMpeg/FFMpegArguments.cs
index edc2606..a628867 100644
--- a/FFMpegCore/FFMpeg/FFMpegArguments.cs
+++ b/FFMpegCore/FFMpeg/FFMpegArguments.cs
@@ -60,6 +60,13 @@ public FFMpegArguments WithGlobalOptions(Action configure
public FFMpegArguments AddMetaData(string content, Action? addArguments = null) => WithInput(new MetaDataArgument(content), addArguments);
public FFMpegArguments AddMetaData(IReadOnlyMetaData metaData, Action? addArguments = null) => WithInput(new MetaDataArgument(MetaDataSerializer.Instance.Serialize(metaData)), addArguments);
+
+ ///
+ /// Maps the metadata of the given stream
+ ///
+ /// null means, the previous input will be used
+ public FFMpegArguments MapMetaData(int? inputIndex = null, Action? addArguments = null) => WithInput(new MapMetadataArgument(inputIndex), addArguments);
+
private FFMpegArguments WithInput(IInputArgument inputArgument, Action? addArguments)
{
var arguments = new FFMpegArgumentOptions();