c# - 如何使用 NReco ffmpeg ConvertMedia 和 filter_complex

标签 c# ffmpeg

我目前正在将 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/

相关文章:

c# - 如何初始化 ReadOnlyDictionary?

c# - 获取已删除的 DataGridView 行的单元格值

Android NDK : Getting java. lang.UnsatisfiedLinkError: dlopen failed: 找不到 "signal"引用的符号 "libffmpeg.so"

ubuntu - 使用 Ubuntu 将所有视频编码为 MP4 并降低分辨率

FFMPEG:Youtube 流媒体质量和速度问题

c# - 在 C# 中记录 Soap 消息

c# - 如何在 Windows Xp 欢迎屏幕中添加指向网站的链接

python-3.x - python给视频opencv添加音频

java - Humble-Video 中的内存消耗一直在增加

c# - 无法让 BHO 在 64 位中工作