1

我在 php 中有一个脚本,它使用 exec() 输出到 ffmpeg - 它从图像和 mp3 创建一个 mp4。

这是我正在执行的命令:

"C:\\Program Files\\ffmpeg\\bin\\ffmpeg.exe" -loop 1 -r 0.1 -i image.jpg -i mp3.mp3 -c:v libx264 -preset ultrafast -crf 18 -tune stillimage -c:a copy -filter:v "[in] scale=-1:720, pad=1280:720:640-iw/2 [out]" -shortest out.mp4 -report

在绝大多数情况下,它工作正常,大约需要 5 秒然后结束。但是,ffmpeg.exe 进程时不时地使用 100% CPU '挂起',并且会一直停留在那里直到手动'杀死'。

ffmpeg.exe 似乎没有做任何事情,它创建的 .mp4 不完整并且没有变大,日志文件没有改变,所有文件的修改时间也没有改变。我不知道为什么它使用 100% CPU。

我可以拍摄相同的图像和 mp3 并再次运行它,它会正常工作。

我打开了-report开关,日志文件中似乎没有任何内容表明它失败且未终止的原因。这是(934 行)日志文件的最后几行,由于某种原因,它似乎在第 10 帧之后停止了:

[libx264 @ 0000000001E37D10] frame=   6 QP=18.00 NAL=2 Slice:P Poc:12  I:0    P:0    SKIP:3600 size=11 bytes
[libx264 @ 0000000001E37D10] frame=   7 QP=18.00 NAL=2 Slice:P Poc:14  I:0    P:0    SKIP:3600 size=11 bytes`
[libx264 @ 0000000001E37D10] frame=   8 QP=18.00 NAL=2 Slice:P Poc:16  I:0    P:0    SKIP:3600 size=11 bytes
[libx264 @ 0000000001E37D10] frame=   9 QP=18.00 NAL=2 Slice:P Poc:18  I:0    P:0    SKIP:3600 size=11 bytes
[libx264 @ 0000000001E37D10] frame=  10 QP=18.00 NAL=2 Slice:P Poc:20  I:0    P:0    SKIP:3600 size=11 bytes`

我尝试使用 Process Explorer 检查挂起的 ffmpeg.exe,但由于它是一个后台进程,我似乎无法找到任何有意义的东西,但也许我在这里遗漏了一些东西 - 有没有办法带来后台进程到前台?

任何想法将不胜感激:-)

4

0 回答 0