在 FFmpeg 中使用 concat 时的第二遍

在 FFmpeg 中使用 concat 时的第二遍

我正在使用 FFmpeg 将图像列表转换为 Webm 视频。

当前命令是这个(我从我的 C# 应用程序中调用它):

-vsync 2 -safe 0 -f concat -i ".\concat.txt" -c:v libvpx-vp9 -b:v 2M 
-pix_fmt yuv420p -vf "pad=width=1686:height=842:x=0:y=0:color=black" -y ".\Video.webm"

(我在我的应用程序中使用完整路径,作为示例,我在这里使用相对路径)

我正在尝试通过添加支持来改进该命令-pass 2,如下所示:

//First pass:
-vsync 2 -safe 0 -f concat -i ".\concat.txt" -c:v libvpx-vp9 -b:v 2M -pix_fmt yuv420p 
-g 150 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 
-vf "pad=width=1686:height=842:x=0:y=0:color=black" -pass 1 -y ".\Video.webm"

//Second pass:
-vsync 2 -safe 0 -f concat -i ".\concat.txt" -c:v libvpx-vp9 -b:v 2M -pix_fmt yuv420p 
-g 150 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 
-vf "pad=width=1686:height=842:x=0:y=0:color=black" -pass 2 -y ".\Video.webm"

我不确定我做的是否正确。第一次传递后,Video.webm会创建一个约 625 字节的文件,第二次传递后,会创建完整的视频并正常播放。

我应该传递concat两次参数吗?
我是否应该将输出设置为第一次传递,并使用与第二次传递相同的名称?


编辑:

我也尝试使用 mp4 和 libx264 运行 2-pass,但没有成功:

[libx264 @ 0000024d719b4080] failed to rename "ffmpeg2pass-0.log.temp" to "ffmpeg2pass-0.log"

//First pass:
-vsync 2 -safe 0 -f concat -i ".\concat.txt" -c:v libx264 -crf 30 -g 150 -pix_fmt yuv420p 
-vf "pad=width=1686:height=842:x=0:y=0:color=black" -pass 1 -y ".\Video.mp4"

//Second pass:
-vsync 2 -safe 0 -f concat -i ".\concat.txt" -c:v libx264 -crf 30 -g 150 -pix_fmt yuv420p 
-vf "pad=width=1686:height=842:x=0:y=0:color=black" -pass 2 -y ".\Video.mp4"

因此,我尝试-passlogfile使用与输出文件相同的完整路径进行添加,并在输出文件夹中创建了*.log*.log.mbtree文件,但 2 遍失败了。我还尝试将 just 设置-passlogfile为第一遍,但没有成功。

编辑2:

2-pass 不接受-crf,因此我用 替换了-b:v 2M

现在我只需要知道 FFmpeg 中是否有任何开关可以在转换后删除日志文件。A*.log*.log.mbtree被留下了。

编辑3

我必须手动删除日志。

相关内容