我一直在网上搜索,试图找到 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 文件。为什么没有错误?这让我怀疑原始 channel 根本没有用于第二遍。其次,如何以编程方式删除 pass1 的日志?是否有我可以键入的命名约定?最终,该应用程序将在同一台/其他机器上的多个线程上运行。所以我不能完全从 ffmpeg 文件夹中删除 *.log 。有没有办法在创建文件时命名文件?
最后,我似乎无法使用上述参数在 C# 中启动新进程。如果我省略了 ffmpeg(因为进程正在启动 ffmpeg 本身),我会在 && 上得到一个错误。我不认为它喜欢尝试做两次传球。如果我一次只通过一次,我什至不会尝试在第二次通过时使用日志文件。
任何信息都会令人惊叹。提前感谢您的时间!
最佳答案
首先,如果您要询问 ffmpeg
的正确 cmdline 开关。 ,那么这对于 StackOverflow 来说可能不是一个合适的问题,它属于 SuperUser。
其次,是的,在第二次传递期间使用了日志。日志的作用是保持每个帧中的比特率要求,因此如果您指定目标比特率(您使用 -b:v 所做的),则可以更好地利用总带宽;作为旁注,如果您使用的是恒定量化器(也称为“恒定质量”),则不会使用它,但使用恒定量化器则不需要多遍编码。
您应该可以将此命令行作为两个进程启动,一个接一个,创建日志文件应该没有区别。如果是,请确保您的进程的当前目录设置正确。
关于c# - FFMPeg 2 通过 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22720622/