如果使用ffmpeg对视频进行编码,我需要使用PHP检查特定代码。我只需要一个简单的真/假检查。如果编码完成则为True,如果未完成则为false。语言也是PHP,我确实安装了ffmpeg-php。
更多信息:我在Linux上。
代码低于
convertToFlv( $input, $output );
function convertToFlv( $input, $output ) {
echo "Converting $input to $output";
$command = "ffmpeg -y -i $input -acodec libfaac -ar 44100 -ab 96k -vcodec libx264 -level 41 -crf 20 -bufsize 20000k -maxrate 25000k -g 250 -r 20 -s 640x480 -coder 1 -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -flags2 +brdo+dct8x8+bpyramid -me umh -subq 7 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -rc_eq 'blurCplx^(1-qComp)' -bf 16 -b_strategy 1 -bidir_refine 1 -refs 6 -deblockalpha 0 -deblockbeta 0 $output";
shell_exec( $command );
}
答案 0 :(得分:3)
您可以在php exec()中的ffmpeg之后添加另一行代码,以在命令行中运行php页面。
用“;”结束你的ffmpeg行并键入“php”,然后键入要运行的php脚本的绝对位置。您可以添加一个get变量,其中包含您要等待转换的视频的ID:
$cmd = "ffmpeg -i[SOURCE FILE] [OUTPUT FILE]; php /public_html/etc/ffmpegComplete.php?videoID=101";
exec( $cmd );
答案 1 :(得分:1)
也许你可以告诉我们你是如何开始编码的?你正在运行什么操作系统?
假设您在Unix / POSIX / Linux系统上以正确的方式进行操作 - 即您在单独的进程组中创建了一个新进程并且无法直接读取返回值,那么为什么不呢?只需将ffmpeg二进制文件包装在一个简单的sh脚本中,例如:
#!/bin/bash
OUTDIR=/var/www/html/video
/usr/local/bin/ffmpeg -s sqcif -i $1 ${OUTDIR}/${2}.mpeg`
RETURNED=$?
echo ${RETURNED} >${OUTDIR}/${2}.completion
...然后你可以看到脚本何时完成,以及它是否成功运行。
答案 2 :(得分:1)
简单的答案是检查进程是否仍在运行,这意味着要么过滤ps
的输出,要么跟踪ffmpeg进程的PID并通过pcntl_waitpid
进行检查。