我正在尝试使用服务器上的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的问题,如果是,那么它是什么。请提出建议
答案 0 :(得分:0)
你可以var_dump($ command)然后在shell中运行该命令(作为运行apache的用户)?
答案 1 :(得分:0)
看起来没有任何东西真正通过管道。你的ffmpeg命令行指定了一个实际的输出文件而不是-
(即,STDOUT),所以ffmpeg正在将视频写入文件,然后flvtool试图从STDIN读取,这不是没有视频。