C# 如何将NReco ffmpeg转换媒体与过滤器结合使用

C# 如何将NReco ffmpeg转换媒体与过滤器结合使用,c#,ffmpeg,C#,Ffmpeg,我目前正在将mov视频转换为mp4视频,并应用一个过滤器\u复合体,它正在工作: var ffMpeg = new NReco.VideoConverter.FFMpegConverter(); ffMpeg.Invoke("-y -i \"" + input/ + "\" -filter_complex \"[0] yadif=0:-1:0,scale=iw*sar:ih,scale='if(gt(a,16/9),1280,-2)':'if(gt(a,16/9),-2,720)

我目前正在将mov视频转换为mp4视频,并应用一个过滤器\u复合体,它正在工作:

    var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
    ffMpeg.Invoke("-y -i \"" + input/ + "\" -filter_complex \"[0] yadif=0:-1:0,scale=iw*sar:ih,scale='if(gt(a,16/9),1280,-2)':'if(gt(a,16/9),-2,720)'[scaled];[scaled] pad=1280:720:(ow-iw)/2:(oh-ih)/2:black \" -c:v libx264 -c:a mp3 -ab 128k " + output + ".mp4");
但是,我想做同样的事情,但是使用类FFMpegConverter的ConvertMedia方法,来使用可用的ConvertProgressEventArgs,如所述

我的第一个赌注是使用ConvertSettings参数在CustomOutputArgs中添加filter_复合体。我正在尝试以下操作,但无法正确转换视频(无法播放)

你对如何实现这一目标有什么想法吗?或者您知道在使用Invoke方法时是否可以使用ConvertProgress吗

谢谢大家!

以下调用与ffmpeg.Invoke相同:

ffMpeg.ConvertMedia(this.Video /*+ ".mov"*/, 
    null, // autodetect by input file extension 
    outPutVideo1 + ".mp4", 
    null, // autodetect by output file extension 
    new NReco.VideoConverter.ConvertSettings() {
        CustomOutputArgs = " -filter_complex \"[0] yadif=0:-1:0,scale=iw*sar:ih,scale='if(gt(a,16/9),1280,-2)':'if(gt(a,16/9),-2,720)'[scaled];[scaled] pad=1280:720:(ow-iw)/2:(oh-ih)/2:black \" -c:v libx264 -c:a mp3 -ab 128k "
    }
);
如果输入视频的像素格式不同于yuv420p,则某些编解码器(例如Windows Media Player)可能无法播放生成的mp4文件。这可以通过附加的ffmpeg输出选项轻松处理:

-pix_fmt yuv420p

谢谢你,我尝试了以下方法,效果也很好:ffMpeg.ConvertMedia(this.Video,null,videoSalida1+“.mp4”,null,new NReco.VideoConverter.ConvertSettings(){AudioCodec=“mp3-ab 128k”,VideoCodec=“libx264”,CustomInputArgs=“-filter\u complex\”[0]yadif=0:-1:0,scale=iw*sar:ih,scale='if(gt(a,16/9),1280,--2):'if(gt(a,16/9),-2720)“[scaled];[scaled]pad=1280:720:(ow iw)/2:(oh ih)/2:black\”);还有我剩下的问题,您知道在使用Invoke方法时是否可以使用ConvertProgress吗?ConvertProgress事件仅针对ConvertMedia/ConcatMedia/ConvertLiveMedia引发。但几乎所有调用都可以重写为ConvertMedia调用。
-pix_fmt yuv420p