FFMPeg 2传递c#

时间:2014-03-28 18:31:50

标签: c# encoding ffmpeg

我一直在浏览网页,试图找到FFMPeg及其细微差别的良好演练。

我目前正在进行工作设置。这是一个两遍编码。如果我使用cmd窗口并使用以下args:

  

ffmpeg -i c:\ temp \ 175663.lbl.mp4.mps -vcodec mpeg4 -b:v 1300k -s   640x360 -apect 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 -apect 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本身),我在&&上出现错误。我不认为它喜欢尝试两次传球。如果我一次只传一次,我就不会得到一个日志文件甚至尝试在第二次传递时使用。

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

1 个答案:

答案 0 :(得分:0)

首先,如果您要询问ffmpeg的正确cmdline切换,那么这可能不是StackOverflow的正确问题,它属于SuperUser。

其次,是的,在第二次传递期间使用了日志。日志的作用是保持每帧中的比特率要求,因此如果指定目标比特率(使用-b:v),则可以更好地利用总带宽;作为旁注,如果您使用恒定量化器(也称为"恒定质量")那么它将不会被使用但是使用恒定量化器您不会需要多次传递编码

您应该能够将这个cmdline作为两个进程一个接一个地启动,创建日志文件应该没有区别。如果是,请确保正确设置了进程的当前目录。