diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/Dockerfile b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/Dockerfile
index a958b7bb..15692d2f 100644
--- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/Dockerfile
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/Dockerfile
@@ -3,7 +3,7 @@
# TODO PoC for FFmpeg
# The FFmpeg transformer uses FFmpeg. See license: https://github.com/FFmpeg/FFmpeg/blob/master/LICENSE.md
-FROM alfresco/alfresco-base-java:11.0.7-openjdk-centos-7-9448dd21de19
+FROM alfresco/alfresco-base-java:11.0.10-openjdk-centos-8@sha256:343c8f63cf80c7af51785b93d6972b0c00087a1c0b995098cb8285c4d9db74b5
ARG FFMPEG_VERSION=3.4.8-1
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegControllerTest.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegControllerTest.java
new file mode 100644
index 00000000..016d7856
--- /dev/null
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegControllerTest.java
@@ -0,0 +1,294 @@
+/*
+ * #%L
+ * Alfresco Transform Core
+ * %%
+ * Copyright (C) 2005 - 2021 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * -
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ * -
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * -
+ * Alfresco 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 Lesser General Public License for more details.
+ * -
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.transformer;
+
+import static org.alfresco.transformer.executors.RuntimeExec.ExecutionResult;
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.when;
+import static org.springframework.http.HttpHeaders.ACCEPT;
+import static org.springframework.http.HttpHeaders.CONTENT_DISPOSITION;
+import static org.springframework.http.HttpHeaders.CONTENT_TYPE;
+import static org.springframework.http.HttpStatus.BAD_REQUEST;
+import static org.springframework.http.HttpStatus.CREATED;
+import static org.springframework.http.HttpStatus.OK;
+import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.util.StringUtils.getFilenameExtension;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.alfresco.transform.client.model.TransformReply;
+import org.alfresco.transform.client.model.TransformRequest;
+import org.alfresco.transformer.executors.FFmpegCommandExecutor;
+import org.alfresco.transformer.executors.RuntimeExec;
+import org.alfresco.transformer.model.FileRefEntity;
+import org.alfresco.transformer.model.FileRefResponse;
+import org.alfresco.transformer.util.MimetypeMap;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.stubbing.Answer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.core.io.Resource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.ResponseEntity;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.test.util.ReflectionTestUtils;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * Test the FFmpegController without a server.
+ * Super class includes tests for the AbstractTransformerController.
+ */
+@WebMvcTest(FFmpegController.class)
+public class FFmpegControllerTest extends AbstractTransformerControllerTest
+{
+
+ private static final String ENGINE_CONFIG_NAME = "ffmpeg_engine_config.json";
+
+ @Mock
+ private ExecutionResult mockExecutionResult;
+
+ @Mock
+ protected RuntimeExec mockTransformCommand;
+
+ @Mock
+ protected RuntimeExec mockCheckCommand;
+
+ @Value("${transform.core.ffmpeg.exe}")
+ protected String execPath;
+
+ protected FFmpegCommandExecutor commandExecutor;
+
+ @PostConstruct
+ private void init()
+ {
+ commandExecutor = new FFmpegCommandExecutor(execPath);
+ }
+
+ @Autowired
+ protected AbstractTransformerController controller;
+
+ private static final String EXT_MP4 = "mp4";
+ private static final String EXT_MP3 = "mp3";
+
+ @BeforeEach
+ public void before() throws IOException
+ {
+ setFields();
+
+ mockTransformCommand(EXT_MP4, EXT_MP3, MimetypeMap.MIMETYPE_VIDEO_MP4, true);
+ }
+
+ protected void setFields()
+ {
+ ReflectionTestUtils.setField(commandExecutor, "transformCommand", mockTransformCommand);
+ ReflectionTestUtils.setField(commandExecutor, "checkCommand", mockCheckCommand);
+ ReflectionTestUtils.setField(controller, "commandExecutor", commandExecutor);
+ }
+
+ @Override
+ public String getEngineConfigName()
+ {
+ return ENGINE_CONFIG_NAME;
+ }
+
+ @Override
+ public void mockTransformCommand(String sourceExtension,
+ String targetExtension, String sourceMimetype,
+ boolean readTargetFileBytes) throws IOException
+ {
+ this.sourceExtension = sourceExtension;
+ this.targetExtension = targetExtension;
+ this.sourceMimetype = sourceMimetype;
+ this.targetMimetype = MimetypeMap.MIMETYPE_MP3;
+
+ expectedOptions = null;
+ expectedSourceSuffix = null;
+ expectedSourceFileBytes = readTestFile(sourceExtension);
+ expectedTargetFileBytes = readTargetFileBytes ? readTestFile(targetExtension) : null;
+ sourceFile = new MockMultipartFile("file", "quick." + sourceExtension, sourceMimetype,
+ expectedSourceFileBytes);
+
+ when(mockTransformCommand.execute(any(), anyLong())).thenAnswer(
+ (Answer) invocation -> {
+ Map actualProperties = invocation.getArgument(0);
+ assertEquals(3, actualProperties.size(), "There should be 3 properties");
+
+ String actualOptions = actualProperties.get("options");
+ String actualSource = actualProperties.get("source");
+ String actualTarget = actualProperties.get("target");
+ String actualTargetExtension = getFilenameExtension(actualTarget);
+
+ assertNotNull(actualSource);
+ assertNotNull(actualTarget);
+ if (expectedSourceSuffix != null)
+ {
+ assertTrue(actualSource.endsWith(expectedSourceSuffix),
+ "The source file \"" + actualSource + "\" should have ended in \"" + expectedSourceSuffix + "\"");
+ actualSource = actualSource.substring(0,
+ actualSource.length() - expectedSourceSuffix.length());
+ }
+
+ assertNotNull(actualOptions);
+ if (expectedOptions != null)
+ {
+ assertEquals("expectedOptions", expectedOptions, actualOptions);
+ }
+
+ Long actualTimeout = invocation.getArgument(1);
+ assertNotNull(actualTimeout);
+ if (expectedTimeout != null)
+ {
+ assertEquals(expectedTimeout, actualTimeout, "expectedTimeout");
+ }
+
+ // Copy a test file into the target file location if it exists
+ int i = actualTarget.lastIndexOf('_');
+ if (i >= 0)
+ {
+ String testFilename = actualTarget.substring(i + 1);
+ File testFile = getTestFile(testFilename, false);
+ File targetFile = new File(actualTarget);
+ generateTargetFileFromResourceFile(actualTargetExtension, testFile,
+ targetFile);
+ }
+
+ // Check the supplied source file has not been changed.
+ byte[] actualSourceFileBytes = Files.readAllBytes(new File(actualSource).toPath());
+ assertTrue(Arrays.equals(expectedSourceFileBytes, actualSourceFileBytes), "Source file is not the same");
+
+ return mockExecutionResult;
+ });
+
+ when(mockExecutionResult.getExitValue()).thenReturn(0);
+ when(mockExecutionResult.getStdErr()).thenReturn("STDERROR");
+ when(mockExecutionResult.getStdOut()).thenReturn("STDOUT");
+ }
+
+ @Override
+ protected AbstractTransformerController getController()
+ {
+ return controller;
+ }
+
+ @Override
+ protected void updateTransformRequestWithSpecificOptions(TransformRequest transformRequest)
+ {
+ transformRequest.setSourceExtension(EXT_MP4);
+ transformRequest.setTargetExtension(EXT_MP3);
+ transformRequest.setSourceMediaType(MimetypeMap.MIMETYPE_VIDEO_MP4);
+ transformRequest.setTargetMediaType(MimetypeMap.MIMETYPE_MP3);
+ }
+
+ @Test
+ public void badExitCodeTest() throws Exception
+ {
+ when(mockExecutionResult.getExitValue()).thenReturn(1);
+
+ mockMvc.perform(mockMvcRequest("/transform", sourceFile, "targetExtension", "xxx"))
+ .andExpect(status().is(BAD_REQUEST.value()))
+ .andExpect(status()
+ .reason(containsString("Transformer exit code was not 0: \nSTDERR")));
+ }
+
+ @Test
+ public void testPojoTransform() throws Exception
+ {
+ // Files
+ String sourceFileRef = UUID.randomUUID().toString();
+ File sourceFile = getTestFile("quick." + sourceExtension, true);
+ String targetFileRef = UUID.randomUUID().toString();
+
+ // Transformation Request POJO
+ TransformRequest transformRequest = new TransformRequest();
+ transformRequest.setRequestId("1");
+ transformRequest.setSchema(1);
+ transformRequest.setClientData("Alfresco Digital Business Platform");
+ transformRequest.setTransformRequestOptions(new HashMap<>());
+ transformRequest.setSourceReference(sourceFileRef);
+ transformRequest.setSourceExtension(sourceExtension);
+ transformRequest.setSourceSize(sourceFile.length());
+ transformRequest.setTargetExtension(targetExtension);
+
+ // HTTP Request
+ HttpHeaders headers = new HttpHeaders();
+ headers.set(CONTENT_DISPOSITION, "attachment; filename=quick." + sourceExtension);
+ ResponseEntity response = new ResponseEntity<>(new FileSystemResource(
+ sourceFile), headers, OK);
+
+ when(alfrescoSharedFileStoreClient.retrieveFile(sourceFileRef)).thenReturn(response);
+ when(alfrescoSharedFileStoreClient.saveFile(any()))
+ .thenReturn(new FileRefResponse(new FileRefEntity(targetFileRef)));
+ when(mockExecutionResult.getExitValue()).thenReturn(0);
+
+ // Update the Transformation Request with any specific params before sending it
+ updateTransformRequestWithSpecificOptions(transformRequest);
+
+ // Serialize and call the transformer
+ String tr = objectMapper.writeValueAsString(transformRequest);
+ String transformationReplyAsString = mockMvc
+ .perform(MockMvcRequestBuilders
+ .post("/transform")
+ .header(ACCEPT, APPLICATION_JSON_VALUE)
+ .header(CONTENT_TYPE, APPLICATION_JSON_VALUE)
+ .content(tr))
+ .andExpect(status().is(CREATED.value()))
+ .andReturn().getResponse().getContentAsString();
+
+ TransformReply transformReply = objectMapper.readValue(transformationReplyAsString,
+ TransformReply.class);
+
+ // Assert the reply
+ assertEquals(transformRequest.getRequestId(), transformReply.getRequestId());
+ assertEquals(transformRequest.getClientData(), transformReply.getClientData());
+ assertEquals(transformRequest.getSchema(), transformReply.getSchema());
+ }
+
+ @Test
+ public void testOverridingExecutorPaths()
+ {
+ //System test property value can be modified in the pom.xml
+ assertEquals(execPath, System.getProperty("FFMPEG_EXE"));
+ }
+}
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegHttpRequestTest.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegHttpRequestTest.java
new file mode 100644
index 00000000..0ef59482
--- /dev/null
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegHttpRequestTest.java
@@ -0,0 +1,49 @@
+/*
+ * #%L
+ * Alfresco Transform Core
+ * %%
+ * Copyright (C) 2005 - 2021 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * -
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ * -
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * -
+ * Alfresco 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 Lesser General Public License for more details.
+ * -
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.transformer;
+
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+
+/**
+ * Tests FFmpegController with a server test harness.
+ */
+@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+public class FFmpegHttpRequestTest extends AbstractHttpRequestTest
+{
+ @Override
+ protected String getTransformerName()
+ {
+ return "FFmpeg";
+ }
+
+ @Override
+ protected String getSourceExtension()
+ {
+ return "mp4";
+ }
+}
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegQueueTransformServiceIT.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegQueueTransformServiceIT.java
new file mode 100644
index 00000000..cd29ddcf
--- /dev/null
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegQueueTransformServiceIT.java
@@ -0,0 +1,58 @@
+/*
+ * #%L
+ * Alfresco Transform Core
+ * %%
+ * Copyright (C) 2005 - 2021 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * -
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ * -
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * -
+ * Alfresco 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 Lesser General Public License for more details.
+ * -
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.transformer;
+
+import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_OPENXML_WORDPROCESSING;
+import static org.alfresco.transform.client.model.Mimetype.MIMETYPE_PDF;
+
+import java.util.UUID;
+
+import org.alfresco.transform.client.model.TransformRequest;
+import org.springframework.boot.test.context.SpringBootTest;
+
+/**
+ * @author janv
+ */
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ properties = {"activemq.url=nio://localhost:61616"})
+public class FFmpegQueueTransformServiceIT extends AbstractQueueTransformServiceIT
+{
+ @Override
+ protected TransformRequest buildRequest()
+ {
+ return TransformRequest
+ .builder()
+ .withRequestId(UUID.randomUUID().toString())
+ .withSourceMediaType(MIMETYPE_OPENXML_WORDPROCESSING)
+ .withTargetMediaType(MIMETYPE_PDF)
+ .withTargetExtension("pdf")
+ .withSchema(1)
+ .withClientData("ACS")
+ .withSourceReference(UUID.randomUUID().toString())
+ .withSourceSize(32L).build();
+ }
+}
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_complete.json b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_complete.json
new file mode 100644
index 00000000..9990c57c
--- /dev/null
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_complete.json
@@ -0,0 +1,22 @@
+{
+ "transformOptions": {
+ "engineXOptions": [
+ {"value": {"name": "page"}},
+ {"value": {"name": "width"}},
+ {"group": {"transformOptions": [
+ {"value": {"name": "cropGravity"}}
+ ]}}
+ ]
+ },
+ "transformers": [
+ {
+ "transformerName": "engineX",
+ "supportedSourceAndTargetList": [
+ {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" }
+ ],
+ "transformOptions": [
+ "engineXOptions"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_incomplete.json b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_incomplete.json
new file mode 100644
index 00000000..1f901c24
--- /dev/null
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_incomplete.json
@@ -0,0 +1,10 @@
+{
+ "transformOptions": {},
+ "transformers": [
+ {
+ "supportedSourceAndTargetList": [
+ {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_no_transform_options.json b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_no_transform_options.json
new file mode 100644
index 00000000..f313e630
--- /dev/null
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_no_transform_options.json
@@ -0,0 +1,10 @@
+{
+ "transformers": [
+ {
+ "transformerName": "engineX",
+ "supportedSourceAndTargetList": [
+ {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_with_duplicates.json b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_with_duplicates.json
new file mode 100644
index 00000000..b5da9909
--- /dev/null
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/engine_config_with_duplicates.json
@@ -0,0 +1,26 @@
+{
+ "transformOptions": {
+ "engineXOptions": [
+ {"value": {"name": "page"}},
+ {"value": {"name": "page"}},
+ {"value": {"name": "width"}},
+ {"group": {"transformOptions": [
+ {"value": {"name": "cropGravity"}}
+ ]}}
+ ]
+ },
+ "transformers": [
+ {
+ "transformerName": "engineX",
+ "supportedSourceAndTargetList": [
+ {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" },
+ {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" },
+ {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" }
+ ],
+ "transformOptions": [
+ "engineXOptions",
+ "engineXOptions"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/ffmpeg_engine_config.json b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/ffmpeg_engine_config.json
new file mode 100644
index 00000000..2c0ff4b4
--- /dev/null
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/ffmpeg_engine_config.json
@@ -0,0 +1,18 @@
+{
+ "transformOptions": {
+ "ffmpegOptions": [
+ ]
+ },
+ "transformers": [
+ {
+ "transformerName": "ffmpeg",
+ "supportedSourceAndTargetList": [
+ {"sourceMediaType": "video/mp4", "targetMediaType": "video/avi" },
+ {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" }
+ ],
+ "transformOptions": [
+ "ffmpegOptions"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/quick.mp3 b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/quick.mp3
new file mode 100644
index 00000000..ee24844f
Binary files /dev/null and b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/quick.mp3 differ
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/quick.mp4 b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/quick.mp4
new file mode 100644
index 00000000..bb64aa1a
Binary files /dev/null and b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/quick.mp4 differ
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/executors/FFmpegCommandExecutor.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/executors/FFmpegCommandExecutor.java
index 3dcaffb4..2e24e794 100644
--- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/executors/FFmpegCommandExecutor.java
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/executors/FFmpegCommandExecutor.java
@@ -46,7 +46,7 @@ public class FFmpegCommandExecutor extends AbstractCommandExecutor
private static String ID = "ffmpeg";
// TODO PoC for FFmpeg
- public static final String LICENCE = "TODO: This transformer uses Ffmpeg. See the license at ...";
+ public static final String LICENCE = "TODO: This transformer uses FFmpeg. See the license at ...";
private final String EXE;
@@ -54,7 +54,7 @@ public class FFmpegCommandExecutor extends AbstractCommandExecutor
{
if (exe == null || exe.isEmpty())
{
- throw new IllegalArgumentException("FfmpegCommandExecutor EXE variable cannot be null or empty");
+ throw new IllegalArgumentException("FFmpegCommandExecutor EXE variable cannot be null or empty");
}
this.EXE = exe;
super.transformCommand = createTransformCommand();
diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/resources/ffmpeg_engine_config.json b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/resources/ffmpeg_engine_config.json
index 1d1cec34..2c0ff4b4 100644
--- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/resources/ffmpeg_engine_config.json
+++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/resources/ffmpeg_engine_config.json
@@ -8,7 +8,7 @@
"transformerName": "ffmpeg",
"supportedSourceAndTargetList": [
{"sourceMediaType": "video/mp4", "targetMediaType": "video/avi" },
- {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mp3" }
+ {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" }
],
"transformOptions": [
"ffmpegOptions"
diff --git a/pom.xml b/pom.xml
index b51e93ca..68b2b1e5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -373,6 +373,7 @@
true
/usr/bin/alfresco-pdf-renderer
+ /usr/bin/ffmpeg
8090
${project.build.directory}