Tôi cần đọc kết quả đầu ra từ ffmpeg để thậm chí thử giải pháp my question from yesterday. Đây là một vấn đề riêng biệt từ vấn đề của tôi ở đó, vì vậy tôi đã thực hiện một câu hỏi mới.Ghi lại đầu ra FFMPEG
Làm cách nào để tôi nhận được kết quả từ lệnh ffmpeg -i
trong PHP?
Đây là những gì tôi đã cố gắng:
<?PHP
error_reporting(E_ALL);
$src = "/var/videos/video1.wmv";
$command = "/usr/bin/ffmpeg -i " . $src;
echo "<B>",$command,"</B><br/>";
$command = escapeshellcmd($command);
echo "backtick:<br/><pre>";
`$command`;
echo "</pre><br/>system:<br/><pre>";
echo system($command);
echo "</pre><br/>shell_exec:<br/><pre>";
echo shell_exec($command);
echo "</pre><br/>passthru:<br/><pre>";
passthru($command);
echo "</pre><br/>exec:<br/><pre>";
$output = array();
exec($command,$output,$status);
foreach($output AS $o)
{
echo $o , "<br/>";
}
echo "</pre><br/>popen:<br/><pre>";
$handle = popen($command,'r');
echo fread($handle,1048576);
pclose($handle);
echo "</pre><br/>";
?>
Đây là kết quả của tôi:
<B>/usr/bin/ffmpeg -i /var/videos/video1.wmv</B><br/>
backtick:<br/>
<pre></pre><br/>
system:<br/>
<pre></pre><br/>
shell_exec:<br/>
<pre></pre><br/>
passthru:<br/>
<pre></pre><br/>
exec:<br/>
<pre></pre><br/>
popen:<br/>
<pre></pre><br/>
Tôi không nhận được nó. safe_mode
bị tắt. Không có gì trong số disable_functions
. Thư mục là được sở hữu bởi www-data
(người dùng apache trên hệ thống Ubuntu của tôi). Tôi nhận được một trạng thái hợp lệ trở lại từ exec()
và system()
và chạy cùng một lệnh từ dòng lệnh cho tôi tấn đầu ra. Tôi cảm thấy như tôi phải thiếu một cái gì đó hiển nhiên nhưng tôi không biết nó là gì.
Ahhh ... yeah. Điều đó có ý nghĩa vì trạng thái trả về của tôi là 1 (không phải 0). Tôi muốn điều đó có hiệu quả, nhưng tôi vẫn nhận được kết quả tương tự, chỉ với: "/usr/bin/ffmpeg -i /var/videos/video1.wmv 2> & 1" khi bắt đầu. Tôi sẽ làm một số nghiên cứu để xem Ubuntu có một số khác biệt cho việc chuyển hướng stderr hay không. –
Tôi có thể xác nhận rằng những điều sau đây sẽ hoạt động. Tôi đã sử dụng dòng chính xác này trong một dự án sở thích một lần. exec ('ffmpeg -i'. Escapeshellarg ($ filepath). '2> & 1', $ output); – Werner
Ahha! Tôi đã hiểu rồi. Vấn đề của tôi là hàm escapeshellcmd(). Nó đã thay đổi "2> & 1" thành "2 \> \ & 1". Tôi đã thử mã của bạn và nó hoạt động. Bài học tôi đã học: xuất lệnh * sau * bạn đã thực hiện tất cả các sửa đổi cho nó = p. Cảm ơn. –