在 ubuntu 13.04 中有一个针对某些事件启动的 node.js 服务器,脚本如下:
#! /bin/bash
...
...
avconv -i "$dir$video" -ss "$ss.000" -t $tt -threads 0 "$folder/$dif.webm"
y_uid=$(/app/youtube-uploader "$folder/$dif.webm" "$label" "$desc" | grep 'watch' | sed 's/v=/ /g' | awk '{print$2}')
echo "$y_uid" >> ~/log/yt.log
...
...
如果 avconv (ffmpeg) 处理一个小文件(少于 30 分钟的编码),脚本工作正常,但如果 avconv 运行几个小时,下一个命令“...youtube-uploader...”(这是一个基于 python应用程序)不起作用(但如果我尝试手动启动它,它会没事的)。
我还尝试在循环中启动下一个命令以检查变量“$y_uid”是否为空,因此它会尝试重复 youtube-uploader 直到找到正确的值,但它会继续留在后台并将永远尝试..(这很奇怪,因为如果我尝试手动启动命令,它可以正常工作..)。
总结一下,如果 avconv 运行几个小时,avconv 进程将生成一个无法识别或锁定的文件,或者为同一脚本生成一个 ghost 文件(但如果该命令在脚本之外启动,则可以识别),如果它是小编码,它会工作正常。
不幸的是调试或测试很困难,因为我每次都要等待几个小时,请帮忙!
更新
我认为问题与 node.js 的缓冲区大小或存储 ffmpeg 标准输出的其他一些缓冲区有关。刚刚正确
avconv -i "$dir$video" -ss "$ss.000" -t $tt -threads 0 "$folder/$dif.webm"
在
avconv -i "$dir$video" -ss "$ss.000" -t $tt -threads 0 "$folder/$dif.webm" &> /dev/null
所以所有的ffmpeg输出都没有填满缓冲内存,一切顺利