大多数情况下,我使用java代码运行FFMPEG bash命令,为视频上的徽标加水印。我使用以下FFmpeg命令在视频上叠加图像。我观察到,有时一些随机视频,即使在分配给它的时间限制到期后,该过程仍继续运行。有时它超过一天或几天直到没有使用kill -9 pid
直接杀死:
ffmpeg -timelimit 900 -y -i input_video -i logoImage -filter_complex" [0:v] scale = trunc(iw / 2)* 2:trunc(ih / 2)* 2 [even]; [1:v] [even] scale2ref = iw * 0.25 :(IW * 0.25)*(0.46446702)[第二] [参考文献] [参考文献] [第二]覆盖=(main_w-overlay_w):( main_h-overlay_h)" -c:v libx264 -b:v 300K -crf 28 -preset slow outputVideo
但即使对某些视频有时使用 -timelimit
标志,此命令也永远不会完成。
我观察过这样的进程从ps aux|grep ffmpeg
生成输出,如:
ubuntu 16620 0.6 6.7 1595044 515392? Sl Dec20 12:05 ffmpeg -timelimit 900 -y -i input_video -i logoImage -filter_complex" [0:v] scale = trunc(iw / 2)* 2:trunc(ih / 2)* 2 [even]; [1:v] [even] scale2ref = iw * 0.25 :(IW * 0.25)*(0.46446702)[第二] [参考文献] [参考文献] [第二]覆盖=(main_w-overlay_w):( main_h-overlay_h)" -c:v libx264 -b:v 300K -crf 28 -preset slow outputVideo
它表示此过程处于可中断的睡眠状态,即等待事件完成。在使用sudo strace -p 16620
跟踪哪个系统调用挂起时,它会导致类似:
进程16620附加写入(2,"帧= 4121 fps = 10 q = 33.0大小=" ..., 99
即。它写了一个文件卡住了。
这个问题可能是什么原因? 还有其他方法可以杀死超过所需时限的FFMPEG进程吗?