C#在linux中使用管道命令启动进程

本文关键字:管道 命令 启动 进程 linux | 更新日期: 2023-09-27 18:20:11

在windows中,通过cmd.exe发送管道非常容易,我只需编写

.FileName = "cmd.exe";

.Arguments = "d:'ifme'addons'ffmpeg'ffmpeg -i d:'Videos'sata.mp4 -pix_fmt yuv420p -f yuv4mpegpipe - 2> nul | d:'ifme'addons'x265'x265lo -p medium --crf 28 -f 523 -o d:'ifme'temp'video.hevc --dither --y4m -";

但在Linux(Ubuntu 14.04.1)中,我写道:

.FileName = "/bin/bash";

.Arguments = "-c /home/anime4000/Desktop/ifme/addons/ffmpeg/ffmpeg -i /home/anime4000/Videos/sata.mp4 -pix_fmt yuv420p -f yuv4mpegpipe - 2> /dev/null | /home/anime4000/Desktop/ifme/addons/x265/x265lo -p medium --crf 28 -f 523 -o /home/anime4000/Desktop/ifme/temp/video.hevc --dither --y4m -";

我得到了FFmpeg错误,这是没有指定命令。。。

我使用创建文件的方法:

System.IO.File.WriteAllText("cmd.sh", "/home/anime4000/Desktop/ifme/addons/ffmpeg/ffmpeg -i /home/anime4000/Videos/sata.mp4 -pix_fmt yuv420p -f yuv4mpegpipe - 2> /dev/null | /home/anime4000/Desktop/ifme/addons/x265/x265lo -p medium --crf 28 -f 523 -o /home/anime4000/Desktop/ifme/temp/video.hevc --dither --y4m -");

.FileName = "sh";

.Arguments = "cmd.sh";

我得到一个错误,即x265lo文件不存在,但文件在那里,具有执行权限

那么,如何使用C#Mono获得正确的管道命令呢?

注意:x265lo是一个8位BPP构建,x265hi是一个16位BPP建立,因为包含两个具有不同BPP 的x265

C#在linux中使用管道命令启动进程

(抱歉,这应该是一条评论,但我在这里没有足够的声誉。)

我不知道具体出了什么问题,但你应该能够通过这样做来确定Mono是如何调用你的shell的:

strace -fv -s4096 -e trace=execve /path/to/your/program args-to-your-program

完成此操作后,请使用相关的execve()行更新您的问题。