当在.net-core中执行docker化的新进程时,在linux上没有指定输出文件的Ffmpeg错误

一段时间以来,我创build了一个完整的.net框架的小程序,可以翻录MP3,然后添加元信息和缩略图。 为了创新,我开始将应用程序移植到.net内核。 之后,我认为这将是在Linux上的Docker中运行这个很酷。 这花了一些时间,但我得到了它的工作。 现在我遇到了这个问题,我可以从video文件撕裂MP3,但是当我尝试结合元信息,缩略图和MP3 ffmpeg告诉我“至less有一个输出文件必须指定”

我添加了一些检查,以便程序可以在Linux和Windows上运行(切换path等)

我试过了:

  • 在Windows上运行相同的参数结构(作品)
  • 手动启动在Linux上的编码(工程)
  • 简化命令中使用的名称,path和标题
  • replace额外的空格和特殊字符,只允许“ – ”和单个空格

下面我有一个命令的例子,当我手动执行它的时候工作,但是当我的程序执行的时候产生了前面提到的错误。 另外请记住,从video中翻录mp3会导致所需的输出文件。

ffmpeg -i "temp/vid-id.mp3" -i "temp/vid-id.jpg" -map 0:0 -map 1:0 -c copy -y -id3v2_version 3 -metadata title="title" -metadata artist="artist" -metadata album="album" "completed/file - name.mp3" 

从.net-core上下文开始,我使用下面的代码片段:

 using (var ffmpegProcess = new Process()) { ffmpegProcess.EnableRaisingEvents = false; ffmpegProcess.StartInfo.CreateNoWindow = true; ffmpegProcess.StartInfo.UseShellExecute = false; ffmpegProcess.StartInfo.FileName = ffmpegPath(); (returns "/bin/bash") string command = "ffmpeg " + arguments; ffmpegProcess.StartInfo.Arguments = "-c \" " + command + " \""; ffmpegProcess.Start(); ffmpegProcess.WaitForExit(); ffmpegProcess.Dispose(); } 

参数:

 String.Format("-i \"{0}\" -i \"{1}.jpg\" -map 0:0 -map 1:0 -c copy -y -id3v2_version 3 -metadata title=\"{2}\" -metadata artist=\"{3}\" -metadata album=\"{4}\" \"{5}\"",inputFile, albumArtFile, outputTitle, artist, outputAlbum, outputFile); 

从video文件翻录MP3我用上面提到的相同的方法与以下参数:

 -i "temp/vid-id.mp4" -vn -ab 320k -y -threads 2 "temp/vid-id.mp3" 

这按预期工作。 参数:

 String.Format("-i \"{0}\" -vn -ab 320k -y -threads 2 \"{1}\"", inputFile, outputFile); 

Vid-id不包含空格,下面是它的外观和示例:

abcd12ef-gh34i

由于最初的翻录工作,我不知道为什么Ffmpeg抱怨第二个操作。 这两个操作之间唯一真正的区别在于第二个输出文件名可以包含空格。 但即使如此,手动运行相同的命令也会工作,并在完成的目录中生成所需的文件。

更新更多的疑难解答后,我已经缩小到元数据参数的使用问题。 仍然无法弄清楚为什么

更新问题是在我select的命名空间。 在Linux上,空格被解释为文件名的结尾。 任何指针,我仍然可以使用命名空间?