php - 你如何在ffmpeg中进行两次转换?

标签 php ffmpeg

我尝试了以下方法:

$ffmpeg = "/path/to/ffmpeg";
$source = "/path/to/video/source.mp4";
$dest = "/path/to/video/dest.mp4";
$format = "%s > %s 2>&1 & echo $! >> %s";
$a_rate = "44100";
$a_bitrate = "96k";
$v_bitrate = "3000k";
$resolution = "1280x720";
$outputfile = "/path/to/output.txt";
$pidfile = "/path/to/pid.txt";

exec(sprintf($format, $ffmpeg . " -i " . $source . " -vcodec libx264 -s " . $resolution . " -b " . $v_bitrate . " -pass 1 /dev/null && \ " . $ffmpeg . " -i " . $source . " -acodec libfaac -ar " . $a_rate . " -ab " . $a_bitrate . " -vcodec libx264 -s " . $resolution . " -b " . $v_bitrate . " -pass 2 " . $dest, $outputfile, $pidfile));

如果我做一次传球,一切都会完美,但尝试做两次这样的传球是行不通的。正确的方法是什么?

更新:
exec(sprintf($format, $ffmpeg . " -i " . $source . " -pass 1 -vcodec libx264 -s " . $resolution . " -b " . $v_bitrate . " -passlogfile " . $pass . " -f rawvideo -y /dev/null", $outputfile, $pidfile));
exec(sprintf($format, $ffmpeg . " -y -i " . $source . " -pass 2 -acodec libfaac -ar " . $a_rate . " -ab " . $a_bitrate . " -vcodec libx264 -s " . $resolution . " -b " . $v_bitrate . " -passlogfile " . $pass . " " . $dest, $outputfile, $pidfile));

最佳答案

问题是使用 $format = "%s > %s 2>&1 & echo $! >> %s"; 将 ffmpeg 命令置于后台。导致它们同时运行,并且当时没有完成第二遍使用的日志文件。后台处理可以很好地使用单次传递,因为它没有依赖项,但我认为需要更复杂的解决方案来后台处理两次传递转换。我打算使用排队系统。

关于php - 你如何在ffmpeg中进行两次转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11715123/

相关文章:

php - 如何获取当月的时间戳,一个月的第一天,零时

php - 如何在服务 symfony 中添加配置?

macos - FFMPEG & MistServer : RTMP Input/Output error

ffmpeg如何允许文件扩展名

FFmpeg - 与音频文件持续时间相同的垂直滚动图像叠加

php - Doctrine2 是否应用过滤器来删除语句

php - 使用 html 元素和 css 样式自定义 php RSS 提要

php - SQLSTATE[HY000] : General error in Yii2 , 创建命令

video - ffplay : Show timestamp (When paused)

ffmpeg:色度键(绿屏过滤器)短视频连续循环到实时视频