在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
答案 0 :(得分:1)
(对不起,这应该是评论,但我在这里没有足够的声誉。)
我不知道具体是什么问题,但你应该能够通过这样的方式确定Mono如何调用你的shell:
strace -fv -s4096 -e trace=execve /path/to/your/program args-to-your-program
完成此操作后,请使用相关的execve()
行更新您的问题。