我目前正在将 mov 视频转换为 mp4 视频并应用 filter_complex,它正在运行:
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,如所述 here .
我的第一个赌注是使用 ConvertSettings 参数在 CustomOutputArgs 中添加 filter_complex。我正在尝试以下操作,但无法正确转换视频(无法播放)。
ffMpeg.ConvertMedia(this.Video /*+ ".mov"*/, NReco.VideoConverter.Format.mov , outPutVideo1 + ".mp4", NReco.VideoConverter.Format.mp4, 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 " + outPutVideo1 + ".mp4"
});
您对如何实现这一目标有任何想法吗?或者您知道在使用 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,则生成的 mp4 文件可能无法通过某些编解码器(例如 Windows Media Player)播放。这可以通过额外的 ffmpeg 输出选项轻松处理:
-pix_fmt yuv420p
关于c# - 如何使用 NReco ffmpeg ConvertMedia 和 filter_complex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34234263/