【问题标题】:FFMPeg 2 pass c#FFMPeg 2 通过 c#
【发布时间】:2025-12-23 06:15:11
【问题描述】:

我一直在网上搜索,试图找到一个很好的 FFMPeg 演练,它的细微差别。

我目前有一个工作设置。这是一个两遍编码。如果我使用 cmd 窗口并使用以下参数:

ffmpeg -i c:\temp\175663.lbl.mp4.mps -vcodec mpeg4 -b:v 1300k -s 640x360 -aspect 16:9 -pass 1 -r 29.970 -an -f rawvideo -y NUL && ffmpeg -i c:\temp\175663.lbl.mp4.mps -vcodec mpeg4 -b:v 1300k -s 640x360 -aspect 16:9 -pass 2 -r 29.970 -acodec libmp3lame -ab 128k -ar 48000 c:\temp\encoded\175663.NTP.mp4

我在ffmpeg.exe 目录中获得了一个日志文件。我认为这是一个有效的好日志。我还得到了一个有效的好 mp4 文件。但是,我不知道日志文件是否实际用于 pass2。如果我只在 cmd 窗口中单独运行第二遍(&& 之后的所有内容)。我得到一个有效的 mp4 文件。为什么没有错误?这让我怀疑原始通道根本没有用于第二遍。

其次,如何以编程方式删除 pass1 的日志?是否有我可以键入的命名约定?最终,此应用程序将在同一台/其他机器上的多个线程上运行。所以我不能完全从 ffmpeg 文件夹中删除 *.log 。有没有办法在创建文件时为其命名?

最后,我似乎无法使用上述参数在 C# 中启动新进程。如果我省略了 ffmpeg(因为进程正在启动 ffmpeg 本身),我会在 && 上得到一个错误。我不认为它喜欢尝试做两次传球。如果我一次只通过一次,我什至无法在第二次通过时尝试使用日志文件。

任何信息都会令人惊叹。提前感谢您的宝贵时间!

【问题讨论】:

    标签: c# encoding ffmpeg


    【解决方案1】:

    首先,如果您要询问 ffmpeg 的正确 cmdline 开关,那么这对于 * 来说可能不是一个正确的问题,它属于 SuperUser。

    第二,是的,日志在第二遍中使用。日志的作用是保持每一帧的比特率要求,因此如果您指定目标比特率(您使用 -b:v 所做的),则可以更好地利用总带宽;附带说明一下,如果您使用的是恒定量化器(也称为“恒定质量”),则不会使用它,但使用恒定量化器则不需要多遍编码。

    您应该可以将此命令行作为两个进程启动,一个接一个,创建日志文件应该没有区别。如果是,请确保您的进程的当前目录设置正确。

    【讨论】:

    • 感谢您的帮助。我只是想确保在第 2 阶段使用日志。我没有任何验证方法。我有很多文件要编码,并且不想再次浏览它们。再次感谢!