使用FFMPEG转换为FLV的视频获得0大小

时间:2011-11-10 05:06:23

标签: php ffmpeg

我正在尝试使用服务器上的FFMPEG将avi文件转换为flv格式,但它给我带来了问题。转换时,文件将转换为flv格式,但没有数据(0 kb大小的文件)。尝试调试代码但不能。 FFMPEG安装在CentOS的路径/ usr / bin / ffmpeg中,我正在使用以下命令进行转换:

$srcFile = "/home/mydomain/public_html/demo/test/sample.avi";
$destFile = "/home/mydomain/public_html/demo/test/sample_again.flv";

$ffmpegPath = "/usr/bin/ffmpeg";
$flvtool2Path = "/usr/local/bin/flvtool2";

$command = $ffmpegPath . " -y -i " . $srcFile .  " -ar 32000 -ab 32000 -f flv -s 320x240 ".
$destFile . " | " . $flvtool2Path . " -U stdin " . $destFile;

exec($command, $output);
print_r($output);

我尝试过:

exec("which ffmpeg");

它给了我路径/ usr / bin / ffmpeg,但在执行代码时出现以下错误:

Array ( 
[0] => ERROR: undefined method `timestamp' for nil:NilClass 
[1] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flv/stream.rb:285:in `lasttimestamp' 
[2] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flv/stream.rb:274:in `duration' 
[3] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2/base.rb:181:in `add_meta_data_tag' 
[4] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2/base.rb:137:in `update' 
[5] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2/base.rb:47:in `send' 
[6] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2/base.rb:47:in `execute!' 
[7] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2/base.rb:46:in `each' 
[8] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2/base.rb:46:in `execute!' 
[9] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2/base.rb:206:in `process_files' 
[10] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2/base.rb:44:in `execute!' 
[11] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2.rb:168:in `execute!' 
[12] => ERROR: /usr/local/cpffmpeg/lib/ruby/site_ruby/1.8/flvtool2.rb:228 
[13] => ERROR: /usr/local/bin/flvtool2:2:in `require' 
[14] => ERROR: /usr/local/bin/flvtool2:2 
) 

可能是什么问题。这是Flvtool2的问题,如果是,那么它是什么。请提出建议

2 个答案:

答案 0 :(得分:0)

你可以var_dump($ command)然后在shell中运行该命令(作为运行apache的用户)?

答案 1 :(得分:0)

看起来没有任何东西真正通过管道。你的ffmpeg命令行指定了一个实际的输出文件而不是-,STDOUT),所以ffmpeg正在将视频写入文件,然后flvtool试图从STDIN读取,这不是没有视频。