@ -8,7 +8,7 @@ import {
} from '../../../../FlowHelpers/1.0.0/interfaces/interfaces' ;
} from '../../../../FlowHelpers/1.0.0/interfaces/interfaces' ;
/* eslint-disable no-param-reassign */
/* eslint-disable no-param-reassign */
const details = ( ) : IpluginDetails = > ( {
const details = ( ) : IpluginDetails = > ( {
name : 'Set Container' ,
name : 'Set Container' ,
description : 'Set the container of the output file' ,
description : 'Set the container of the output file' ,
style : {
style : {
@ -34,6 +34,23 @@ const details = ():IpluginDetails => ({
} ,
} ,
tooltip : 'Specify the container to use' ,
tooltip : 'Specify the container to use' ,
} ,
} ,
{
name : 'forceConform' ,
type : 'boolean' ,
defaultValue : 'false' ,
inputUI : {
type : 'dropdown' ,
options : [
'false' ,
'true' ,
] ,
} ,
tooltip : `
Specify if you want to force conform the file to the new container ,
This is useful if not all streams are supported by the new container .
For example mkv does not support data streams .
` ,
} ,
] ,
] ,
outputs : [
outputs : [
{
{
@ -44,16 +61,55 @@ const details = ():IpluginDetails => ({
} ) ;
} ) ;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const plugin = ( args :IpluginInputArgs ) : IpluginOutputArgs = > {
const plugin = ( args : IpluginInputArgs ) : IpluginOutputArgs = > {
const lib = require ( '../../../../../methods/lib' ) ( ) ;
const lib = require ( '../../../../../methods/lib' ) ( ) ;
// eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign
// eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign
args . inputs = lib . loadDefaultValues ( args . inputs , details ) ;
args . inputs = lib . loadDefaultValues ( args . inputs , details ) ;
const newContainer = String ( args . inputs . container ) ;
const newContainer = String ( args . inputs . container ) ;
const { forceConform } = args . inputs ;
if ( getContainer ( args . inputFileObj . _id ) !== args . inputs . container ) {
if ( getContainer ( args . inputFileObj . _id ) !== args . inputs . container ) {
args . variables . ffmpegCommand . container = newContainer ;
args . variables . ffmpegCommand . container = newContainer ;
args . variables . ffmpegCommand . shouldProcess = true ;
args . variables . ffmpegCommand . shouldProcess = true ;
if ( forceConform === true ) {
for ( let i = 0 ; i < args . variables . ffmpegCommand . streams . length ; i += 1 ) {
const stream = args . variables . ffmpegCommand . streams [ i ] ;
try {
const codecType = stream . codec_type . toLowerCase ( ) ;
const codecName = stream . codec_name . toLowerCase ( ) ;
if ( newContainer === 'mkv' ) {
if (
codecType === 'data'
|| [
'mov_text' ,
'eia_608' ,
'timed_id3' ,
] . includes ( codecName )
) {
stream . removed = true ;
}
}
if ( newContainer === 'mp4' ) {
if (
[
'hdmv_pgs_subtitle' ,
'eia_608' ,
'timed_id3' ,
'subrip' ,
] . includes ( codecName )
) {
stream . removed = true ;
}
}
} catch ( err ) {
// Error
}
}
}
}
}
return {
return {