ffmpeg:在php中使用返回的数据
我已经开始使用ffmpeg:在php中使用返回的数据,php,ssh,ffmpeg,backticks,Php,Ssh,Ffmpeg,Backticks,我已经开始使用ffmpeg,我对它很陌生,所以请耐心听我说 我已经在我的服务器上安装了ffmpeg,效果很好;通过ssh登录时,我可以运行某些命令并获取输出数据 例如,我可以跑步 ffmpeg -i Sleep\ Away.mp3 返回以下内容: ffmpeg version 0.8.5, Copyright (c) 2000-2011 the FFmpeg developers built on Aug 20 2012 09:28:43 with clang 3.1 (tags/App
ffmpeg
,我对它很陌生,所以请耐心听我说
我已经在我的服务器上安装了ffmpeg
,效果很好;通过ssh登录时,我可以运行某些命令并获取输出数据
例如,我可以跑步
ffmpeg -i Sleep\ Away.mp3
返回以下内容:
ffmpeg version 0.8.5, Copyright (c) 2000-2011 the FFmpeg developers
built on Aug 20 2012 09:28:43 with clang 3.1 (tags/Apple/clang-318.0.61)
configuration: --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libfaac --enable-libxvid --enable-libx264 --enable-libvpx --enable-hardcoded-tables --enable-shared --enable-pthreads --disable-indevs --cc=clang
libavutil 51. 9. 1 / 51. 9. 1
libavcodec 53. 7. 0 / 53. 7. 0
libavformat 53. 4. 0 / 53. 4. 0
libavdevice 53. 1. 1 / 53. 1. 1
libavfilter 2. 23. 0 / 2. 23. 0
libswscale 2. 0. 0 / 2. 0. 0
libpostproc 51. 2. 0 / 51. 2. 0
[mp3 @ 0x7f9694011a00] Header missing
Last message repeated 13 times
[mp3 @ 0x7f9694007c00] max_analyze_duration 5000000 reached at 5007020
[mp3 @ 0x7f9694007c00] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'Sleep Away.mp3':
Metadata:
track : 3
album : Bob Acri
artist : Bob Acri
title : Sleep Away
genre : Jazz
album_artist : Bob Acri
composer : Robert R. Acri
date : 2004
Duration: 00:03:21.77, start: 0.000000, bitrate: 192 kb/s
Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 192 kb/s
At least one output file must be specified
我要问的问题是,如何使用上面的输出数据?我正在开发一个音乐网站;假设我想循环浏览所有MP3文件,并将有关它们的信息保存到数据库中,这样上述操作将导致:
Sleep Away.mp3 mp3 3:21 Jazz 2004 Bob Acri ...
显然是在桌子上
我尝试使用php backtick操作符,但迄今为止没有成功。我只是想在这里提出一个问题,从做过类似事情的人那里得到一些建议
谢谢
更新:我尝试了以下方法
<?php $output = `ffmpeg -i Sleep\ Away.mp3`; echo "<pre>$output</pre>"; ?>
<?php $output = shell_exec('ffmpeg -i Sleep\ Away.mp3'); echo "<pre>$output</pre>"; ?>
两者似乎都不会返回任何内容。所以您希望从php执行一个shell命令(在您的例子中是ffmpeg),并捕获其输出,对吗 Backtick运算符或函数是这方面的良好开端 请注意,这些仅在禁用安全模式和未禁用shell_exec功能(通过禁用功能设置)时才起作用。如果脚本在共享主机上运行,您可能无法访问这些配置,但至少应该能够通过phpinfo()检查它们
如何指定在命令中引用的任何文件的路径也是至关重要的——您的php脚本可能无法与您希望它运行的工作文件夹一起运行;所以最好通过绝对路径引用所有文件。所以您希望从php执行一个shell命令(在您的例子中是ffmpeg),并捕获其输出,对吗 Backtick运算符或函数是这方面的良好开端 请注意,这些仅在禁用安全模式和未禁用shell_exec功能(通过禁用功能设置)时才起作用。如果脚本在共享主机上运行,您可能无法访问这些配置,但至少应该能够通过phpinfo()检查它们
如何指定在命令中引用的任何文件的路径也是至关重要的——您的php脚本可能无法与您希望它运行的工作文件夹一起运行;因此,最好通过绝对路径引用所有文件。
ffmpeg
将该信息发送到标准错误上,而不是发送到标准输出,而标准输出正是shell_exec()
捕获的
您需要在命令末尾添加:2>&1
:
ffmpeg
将标准错误上的信息发送到标准输出,而不是shell_exec()
捕获的标准输出
您需要在命令末尾添加:2>&1
:
改用:
FFmpeg用于处理视频,FFprobe是获取视频信息的附带工具。它以各种易于解析的格式输出数据,而不需要解析FFmpeg在导入视频时附带发出的诊断消息。使用:
FFmpeg用于处理视频,FFprobe是获取视频信息的附带工具。它以各种易于解析的格式输出数据,而不需要解析FFmpeg在导入视频时附带发出的诊断消息。尝试使用backtick操作符时有什么问题?你能提供你使用的代码和结果吗?嗨,谢谢你的回答,我尝试了shell_exec,下面请更新问题,而不是在两条评论中写同样的问题;不管怎样,你给我写了两封信;)尝试使用backtick操作符时出现了什么问题?你能提供你使用的代码和结果吗?嗨,谢谢你的回答,我尝试了shell_exec,下面请更新问题,而不是在两条评论中写同样的问题;不管怎样,你给我写了两封信;)您好,谢谢您的回复,我尝试了shell_exec的以下配置选项,我提到的配置选项如何?他们打算干什么?关于文件路径(相对与绝对,请参阅更新的答案)如何?刚刚检查了我的php.ini文件,安全模式设置为“关闭允许”\u call\u time\u pass\u reference=On;安全模式;safe_mode=off您是从命令行还是通过浏览器运行php?您是否尝试过引用具有完整绝对路径的“Sleep\Away.mp3”?您好,感谢您的回复,我尝试了shell_exec的以下配置选项,我提到的配置选项如何?他们打算干什么?关于文件路径(相对与绝对,请参阅更新的答案)如何?刚刚检查了我的php.ini文件,安全模式设置为“关闭允许”\u call\u time\u pass\u reference=On;安全模式;safe_mode=off您是从命令行还是通过浏览器运行php?您是否尝试过使用完整的绝对路径引用“Sleep\Away.mp3”?很好,这将是我的下一个建议。我应该尝试更具分析性的方法,而不是排除程序;)先生,你是一位传奇人物,谢谢这对我很有用,谢谢,但是请注意尼亚拉托普的回答(我支持它)——在一般情况下,这对追踪壳牌执行问题更有帮助。很好,这是我的下一个建议。我应该尝试更具分析性的方法,而不是排除程序;)先生,你是一位传奇人物,谢谢这对我很有用,谢谢,但是请注意尼亚拉托普的回答(我支持它)——在一般情况下,这对追踪壳牌执行问题更有帮助。
$out = shell_exec('/path/to/ffmpeg -i Sleep\ Away.mp3 2>&1');
ffprobe -loglevel error -show_format -show_streams input.mp3