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