我目前正在将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?
谢谢!
答案 0 :(得分:3)
以下调用与您的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