Как запустить команду ffmpeg в Powershell и передать ей переменные? - PullRequest
0 голосов
/ 05 мая 2020

Я хотел бы запустить следующую команду в Powershell: ffmpeg -i "VIDEO.mp4" -i "AUDIO.m4a" -c copy -map 0:v:0 -map 1:a:0 "OUTPUT VIDEO.mp4"

Но я хотел бы просмотреть файлы. Я пробовал это:

Add-Type -AssemblyName System.Windows.Forms 

$VideoBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ 
    InitialDirectory = $PSCommandPath
    Filter = 'Video file (*.mp4)|*.mp4|All files (*.*)|*.*'
    Title = 'Choose video file'
}
$null = $VideoBrowser.ShowDialog()
if (!($VideoBrowser.FileName))
{
    return
}

$AudioBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ 
    Filter = 'Video file (*.m4a)|*.m4a|All files (*.*)|*.*'
    Title = 'Choose audio file'
    RestoreDirectory = $true
}
$null = $AudioBrowser.ShowDialog()
if (!($AudioBrowser.FileName))
{
    return
}

$NewVideoBrowser = New-Object System.Windows.Forms.SaveFileDialog -Property @{ 
    Filter = 'Video file (*.mp4)|*.mp4|All files (*.*)|*.*'
    Title = 'Save new video file as'
    RestoreDirectory = $true
}
$null = $NewVideoBrowser.ShowDialog()
if (!($NewVideoBrowser.FileName))
{
    return
}

И все эти способы запустить команду, но все не работают:

$ArgumentList = '"{0}" -i "{1}" -c copy -map 0:v:0 -map 1:a:0 "{2}"' -f $VideoBrowser.FileName, $AudioBrowser.FileName, $NewVideoBrowser.FileName;
Start-Process -FilePath ffmpeg.exe -ArgumentList $ArgumentList -Wait -NoNewWindow

ИЛИ

$ArgumentList = '"' + $VideoBrowser.FileName + '" -i "' + $AudioBrowser.FileName + '" -c copy -map 0:v:0 -map 1:a:0 "' + $NewVideoBrowser.FileName + '"'
Start-Process -FilePath ffmpeg.exe -ArgumentList $ArgumentList -Wait -NoNewWindow

ИЛИ ffmpeg.exe $VideoBrowser.FileName -i $AudioBrowser.FileName -c copy -map 0:v:0 -map 1:a:0 $NewVideoBrowser.FileName

Что попробовать? Спасибо!

1 Ответ

0 голосов
/ 06 мая 2020

Я забыл -i в начале аргументов!

Это работает: ffmpeg -loglevel debug -i $VideoBrowser.FileName -i $AudioBrowser.FileName -c copy -map 0:v:0 -map 1:a:0 $NewVideoBrowser.FileName

...