c# - FFMPeg 2 通过 c#

标签 c# encoding ffmpeg

我一直在网上搜索,试图找到 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/

相关文章:

ffmpeg - 从视频中每秒获取 1 帧

ubuntu - 如何组合两个 ffmpeg 命令 - 添加模糊条和添加 Logo 和字幕?

c# - 无法获得 S.M.A.R.T.外部驱动器的信息

c# - XML数据和C#,读入,操作,输出

http - 分块编码和内容长度 header

git clone 采用 utf8 而不是 us-ascii

animation - GIFEncoder.Class.php 和一个无循环 GIF 动画

nginx - FFmpeg -> JSMpeg Websocket 反复关闭

c# - 使用/p :PublishSingleFile=true Flag 发布时出错

c# - 使用 SendKeys.sendwait() 发送 "spacebar key"