主题插件
交易市场

FFMpeg在Ubuntu上的安装与使用

wordpressx阅读(583)评论(0)

在Ubuntu Server上编译FFmpeg
FFmpeg是最流行的开源视频转码工具包,在Ubuntu上可以直接通过apt-get安装,但是默认的编码器不提供x264这些non-free的编码器,所以需要自己编译。

FFmpeg官方给出了详细的编译步骤:

https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

本文和官方指南相比,主要在于改进了以下几处:

编译的bin目录不放到某个用户目录下,而是放到/opt/bin下面;
不使用git/hg下载snapshot的源码版本,而是直接下载稳定版。
以下测试在Ubuntu Server 14.04下通过。

首先,用apt-get update和apt-get upgrade把系统升级到最新版,然后,安装以下软件包:

apt-get install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libvorbis-dev pkg-config texinfo zlib1g-dev unzip cmake yasm libx264-dev libmp3lame-dev libopus-dev 

FFmpeg依赖的几个软件包有个最低版本要求:

yasm >= 1.2.0 libx264-dev >= 0.118 libmp3lame-dev >= 3.98.3 libopus-dev >= 1.1

这几个包在Ubuntu 14.04上都符合FFmpeg的要求,所以可以直接用apt-get安装。如果是其它版本的Linux,就需要自己检查版本。

注意,因为这个FFmpeg是作为服务器使用的,所以不含ffplay的依赖包。如果想要在桌面使用,还需要安装以下软件包:

libsdl1.2-dev libva-dev libvdpau-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev

接下来需要下载并编译的是x265,fdk-aac,vpx和ffmpeg本身。

先创建如下目录结构:

/opt
  +- ffmpeg_sources/
  +- ffmpeg_build/
  +- bin/

然后,把源码包下载到/opt/ffmpeg_sources/目录下。

因为不采用snapshot版本,所以我们可以直接下载某个稳定版源码。下载地址如下:

x265: http://download.videolan.org/videolan/x265/x265_3.2.1.tar.gz

fdk-aac: https://github.com/mstorsjo/fdk-aac/archive/v0.1.4.zip

vpx: http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.5.0.tar.bz2

ffmpeg: http://ffmpeg.org/releases/ffmpeg-3.0.tar.bz2

编译x265
依次执行以下命令:

cd /opt/ffmpeg_sources
tar zxvf x265_3.2.1.tar.gz
cd x265_3.2.1/build/linux
PATH="/opt/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/opt/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make
make install
make distclean

编译fdk-aac

依次执行以下命令:

cd /opt/ffmpeg_sources
mv v0.1.4.zip fdk-aac-v0.1.4.zip
unzip fdk-aac-v0.1.4.zip
cd fdk-aac-0.1.4
autoreconf -fiv
./configure --prefix="/opt/ffmpeg_build" --disable-shared
make
make install
make distclean

编译vp8/vp9

依次执行以下命令:

cd /opt/ffmpeg_sources
tar xjvf libvpx-1.5.0.tar.bz2
cd libvpx-1.5.0
PATH="/opt/bin:$PATH" ./configure --prefix="/opt/ffmpeg_build" --disable-examples --disable-unit-tests
PATH="/opt/bin:$PATH" make
make install
make clean

编译ffmpeg

最后一步就是编译FFmpeg了:

cd /opt/ffmpeg_sources
tar xjvf FFmpeg-release-3.0.zip
cd FFmpeg-release-3.0
PATH="/opt/bin:$PATH" PKG_CONFIG_PATH="/opt/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="/opt/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I/opt/ffmpeg_build/include" \
  --extra-ldflags="-L/opt/ffmpeg_build/lib" \
  --bindir="/opt/bin" \
  --enable-gpl \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libtheora \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree
PATH="/opt/bin:$PATH" make
make install
make distclean
hash -r

编译时间很长很长,一切顺利的话,在/opt/bin目录下会编译出ffmpeg、ffprobe和ffserver三个程序。最后,创建几个软连接,便于任意用户在任意目录下直接调用ffmpeg:

ln -s /opt/bin/ffmpeg /usr/bin/ffmpeg
ln -s /opt/bin/ffprobe /usr/bin/ffprobe
ln -s /opt/bin/ffserver /usr/bin/ffserver

ffmpeg是转码程序,ffprobe可以用来分析视频文件,ffserver可以实现流媒体服务器。

wordpress各种获取路径和URl地址的函数总结

wordpressx阅读(274)评论(0)

wordpress中的路径也不是很负责,有人为了让wordpress运行速度更快,就直接写了绝对地址,其实这样是很不好的,有可能别人修改了wordpress程序的地址,那么这样你编写的这个插件或者是主题就只有你自己能用,别人无法使用,这样做得不偿失,为了避免错误,了解WordPress中与获取路径相关的函数很有必要。

以下均假设WordPress站点安装在http://www.uedsc.com下。

站点路径相关函数

home_url()

返回站点路径,相当于后台设置->常规中的”站点地址(URL)”。

$url = home_url();
echo $url;
//输出: http://www.uedsc.com

$url = home_url(\'/images/\');
echo $url;
//输出:http://www.uedsc.com/images/

site_url()

如果WordPress安装在域名根目录下,则该函数与home_url()相同。

如果WordPress安装在子目录下,例如http://www.uedsc.com/,则site_url()返回WordPress实际安装地址,相当于后台->设置->常规中的“WordPress 地址(URL)”。

$url = site_url();
echo $url;
//假设WordPress安装在http://www.uedsc.com下
//输出:http://www.uedsc.com

admin_url()

返回后台地址,传递参数后也可返回后台menu的地址

$url = admin_url();
echo $url;
//输出:http://www.uedsc.com/wp-admin/

content_url()

返回实际的wp-content目录,如果是默认安装,且装在根目录下,则如下所示

$url = content_url();
echo $url;
//输出:http://www.uedsc.com/wp-content

如果在wp-config.php中改变了wp-content目录的位置,则该函数会返回正确地址,例如wp-config.php中如下定义

define(\'WP_CONTENT_DIR\',\'/home/user/public_html/cdn\');
define(\'WP_CONTENT_URL\',\'http://sola-cdn.me\');

则content_url()的返回值为

http://sola-cdn.me

includes_url()

返回当前WordPress站点存放核心文件的目录wp-includes的地址,可以带一个$path作为参数。

$url = includes_url( \'/js/\');
echo $url;
//输出:http://www.uedsc.com/wp-includes/js/

wp_upload_dir()

返回WordPress上传目录的地址,是一个数组,包含一系列与上传地址相关的信息。

<?php $upload_dir = wp_upload_dir(); ?>

提供如下信息给你

  • ‘path’ – 上传目录的服务器绝对路径,通常以反斜杠(/)开头
  • ‘url’ – 上传目录的完整URL
  • ‘subdir’ – 子目录名称,通常是以年/月形式组织的目录地址,例如/2012/07
  • ‘basedir’ – 上传目录的服务器绝对路径,不包含子目录
  • ‘baseurl’ – 上传目录的完整URL,不包含子目录
  • ‘error’ – 报错信息.

例如

$upload_dir = wp_upload_dir();
echo $upload_dir[\'baseurl\'];
//输出:http://www.uedsc.com/wp-content/uploads

主题路径相关函数

get_theme_root_uri()

获取存放主题的目录URI

echo get_theme_root_uri();
//输出:http://www.uedsc.com/wp-content/themes

get_theme_root()

获取存放主题的目录的服务器绝对路径

echo get_theme_root();
//输出:<tt>/home/user/public_html/wp-content/themes</tt>

get_theme_roots()

获取主题目录的目录名称,如果你的主题目录是/wp-content/themes,则

echo get_theme_roots();
//输出:/themes

get_stylesheet_directory()

获取当前启用的主题目录的服务器绝对路径,例如

/home/user/public_html/wp-content/themes/twentyeleven

可以用来include文件,例如

<?phpinclude( get_stylesheet_directory() . ‘/includes/myfile.php’); ?>

get_stylesheet_directory_uri()

获取当前启用的主题目录的URI,例如

echo get_stylesheet_directory_uri();
//输出:http://www.uedsc.com/wp-content/themes/twentyeleven

可以使用在需要主题目录URI的场合,例如图片

<img src="<?php echo get_stylesheet_directory_uri() ?>/images/aternus.png" alt="" title="" width="" height="" />

get_template_directory_uri()

如果当前启用的主题是一个child theme,该函数返回parent theme的主题目录URI,用法与get_stylesheet_directory_uri()类似。

get_template_directory()

如果当前启用的主题是一个child theme,该函数返回parent theme的主题目录的服务器绝对路径,用法与get_stylesheet_directory()类似。

get_template()

获取当前启用主题的主题目录名称,例如现在启用的主题为twentyeleven,则

echo get_stylesheet();
//输出:twentyeleven

get_stylesheet()

获取当前启用主题的主题目录名称,与get_template()的区别是,如果用了child theme,则返回child theme的目录名称。
插件路径相关函数

plugins_url()

获取当前插件的目录的URI,例如一个插件位于/wp-content/plugins/myplugin下,该目录下放有插件的主文件名为myplugin.php,在myplugin.php中执行下面的代码,结果如下

echo plugins_url();
//输出:http://www.uedsc.com/wp-content/plugins

echo plugins_url(\'\',__FILE__);
//输出:http://www.uedsc.com/wp-content/plugins/myplugin

echo plugins_url(\'js/myscript.js\',__FILE__);
//输出:http://www.uedsc.com/wp-content/plugins/myplugin/js/myscript.js

plugin_dir_url()

返回当前插件的目录URI,例如

echo plugin_dir_url(__FILE__ );
//输出:http://www.uedsc.com/wp-content/plugins/myplugin/

注意结尾有反斜杠。

plugin_dir_path()

返回当前插件目录的服务器绝对路径,例如

echo plugin_dir_path(__FILE__ );
//输出:/home/user/public_html/wp-content/plugins/myplugin/

可以用来引用文件,例如

<?php
define(\'MYPLUGINNAME_PATH\', plugin_dir_path(__FILE__) );
require MYPLUGINNAME_PATH . \'includes/class-metabox.php\';
require MYPLUGINNAME_PATH . \'includes/class-widget.php\';
?>

plugin_basename()

返回调用该函数的插件文件名称(包含插件路径)

例如在插件myplugin下的myplugin.php文件中调用该函数,结果如下

echo plugin_basename(__FILE__);
//输出:myplugin/myplugin.php

如果在myplugin/include/test.php文件中调用(test.php通过include引用到myplugin.php中),结果如下

echo plugin_basename(__FILE__);
//输出:myplugin/include/test.php

路径相关常量

WordPress中还有一组用define定义的常量代表路径。

WP_CONTENT_DIR

wp-content目录的服务器绝对路径,例如

/home/user/public_html/wp-content

WP_CONTENT_URL

wp-content目录的URI地址,例如

http://www.uedsc.com/wp-content

WP_PLUGIN_DIR

插件目录的服务器绝对路径,例如

/home/user/public_html/wp-content/plugins

WP_PLUGIN_URL

插件目录的URI地址,例如

http://www.uedsc.com/wp-content/plugins

TEMPLATEPATH

当前启用主题目录的服务器绝对路径,相当于get_template_directory()例如

/home/user/public_html/wp-content/themes/twentyeleven

STYLESHEETPATH

当前启用主题目录的服务器绝对路径,相当于get_stylesheet_directory(),与TEMPLATEPATH的区别在于如果使用child theme,该常量指向child theme目录。

PHP内置变量如 获取网站根目录绝对路径 和 ../ 之类的演示以及用法

wordpressx阅读(464)评论(0)

$_SERVER[‘DOCUMENT_ROOT’] // 根目录的路径
$_SERVER[‘HTTP_HOST’]  // 域名,比如:localhost
$_SERVER[‘PHP_SELF’] // 从根目录到PHP文件本身的路径
$_SERVER[‘SCRIPT_FILENAME’] // 文件的绝对路径
$_SERVER[‘REQUEST_URI’]  // 从根目录开始所有的URL
$_SERVER[‘REQUEST_METHOD’]  // 请求的方法

代码应用如下

PHP内置代码

当前演示的PHP文件所在目录 C:\wamp64\www\practice\test\test9.php

代码输出如下

PHP代码输出路径

php中’.’和’..’还有’./’和’../’ ,这和linux系统是一样的,

. 表示当前目录
.. 表示当前目录的上一级目录。
./表示当前目录下的某个文件或文件夹,视后面跟着的名字而定
../表示当前目录上一级目录的文件或文件夹,视后面跟着的名字而定。
例如:
文件夹 a
下面有 文件夹b c 和文件 d。
文件夹b下面有e.php 和文件f。
则e中的 . 表示 文件夹b
./f 表示b下面的文件f。
.. 表示a文件夹。
../d 表示a文件夹下的d文件。

linux环境php使用exec函数调用ffmpeg,报错ffmpeg: command not found的解决方法

wordpressx阅读(732)评论(0)

解决exec函数 sh: ffmpeg: command not found 报错

打印具体报错命令
0 => 'sh: ffmpeg: command not found',

具体原因是通过PHP调用这个命令,没有引入对应的环境变量,导致找不到这个命令

解决办法
在PHP-fpm.conf的配置文件里面把下面几行前面的;去掉

#我的PHP配置文件php-fpm.conf 在/usr/local/php/etc/php-fpm.conf
$ vim /usr/local/php/etc/php-fpm.conf
#env[PATH]已有路径后面用:加入ffmpeg的路径,比如我的在/data/bin
env[PATH] = /usr/local/bin:/usr/bin:/bin:/data/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
env[LD_LIBRARY_PATH] = /usr/local/lib
#按ESC退出,输入:wq回车保存
:wq

Linux服务器下php执行exec()函数无反应,返回值为空

wordpressx阅读(860)评论(0)

1.首先必须确保 php.ini 的disable_functions 配置没有禁用 exec ,有请删掉,保存,重启php

#进入网站根目录,新建who.php找出是哪个用户在执行这个文件
$ vim who.php
#粘贴以下php代码
<?php
$result = exec("whoami", $outcome, $status);
var_dump($outcome);
?>
#按ESC退出,输入:wq回车保存
:wq

打开浏览器,访问根目录下who.php
我的是输出为 www 也有可能是 apache 、daemon
也就是说是 www 这个用户在执行

2.给这个用户增加运行命令的权限

#打开这个文件,搜索 ## Allow root
$ vim /etc/sudoers
#在root下面行加入 www ALL=(ALL) NOPASSWD:ALL 如下所示 www 指上述输出的用户名,请根据实际来调整
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
www ALL=(ALL) NOPASSWD:ALL
#按ESC退出,输入:wq!回车强制保存
:wq!

3.执行以下命令使修改的配置生效

#重启Linux服务器,完成!
$ reboot

FFmpeg安装libx265出现ERROR: x265 not found using pkg-config的解决办法

wordpressx阅读(1283)评论(0)

在安装ffmpeg4.4.1 –enable-libx265出现ERROR: x265 not found using pkg-config的错误
解决问题按以下步骤操作

#查看错误日志文件,查明出现错误原因
$ vi ffbuild/config.log
#我这里是找不到x265.pc文件路径

#当前终端执行命令添加环境变量
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
#注:路径是你安装x265的路径,按自己的修改添加即可

如果是线程函数的问题那就在生成的x265.pc文件中Libs.private这一行添加链接库 -lpthread
具体原因按第一步查看错误日志分析,重新进入FFmpeg目录安装不再提示出错就代表没问题了!

Linux下Centos 7安装FFmpeg支持libx264 & libx265 & libmp3lame & libfdk-aac

wordpressx阅读(1471)评论(1)

最初我用的是软件包直接安装,因为比较简单,可以满足视频编码的需求。但是后来在对音频进行编码的时候,需要使用libfdk_aac这个音频编码库,发现直接安装有诸多不便,这种方法就行不通了。为了满足需求,最终采用了源码安装,而遍寻网上的答案发现很零散杂乱不全面,也就诞生了这篇使用Linux命令安装FFmpeg全过程!

当前网络中常见的视频编码格式要数H264最为火热,支持h264的封装格式有很多,如FLV,MP4,HLS(M3U8),MKV,ts等格式,FFmpeg本身并不支持H264的编码器,而是由FFmpeg的第三方模块对其进行支持,例如x264 和OpenH264,二者各有优势,由于OpenH264开源比较晚,所以x264还是当前最常见的编码器。

目前FFmpeg已经能够支持H265编码,我们可以通过configure添加 –enable-gpl –enable-libx265来配置。这就需要我们的系统环境中已经安装了libx265,且其版本≥68。

常见的音频编码格式要数mp3最为广泛,为防格式不支持连libmp3lame也安装好最为稳妥,而mp4格式视频下音频编码格式却要数aac最为普遍,所以最好连libfdk-aac 也一同安装,那就可以确保万无一失。

一、安装依赖
1.安装yasm 依赖

#ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具。
$ yum -y install yasm

2.安装nasm 依赖

$ wget https://www.nasm.us/pub/nasm/releasebuilds/2.14/nasm-2.14.tar.gz
#解压tar.gz命令:
$ tar –zxvf nasm-2.14.tar.gz
#进入目录
$ cd nasm-2.14
$ ./configure
#第一次安装执行如下命令:
$ make & sudo make install
#如果安装过执行如下命令:
$ sudo make clean & make & sudo make install

二、安装FFmpeg依赖库
1. 安装libx264

#下载libx264 源码
$ wget  http://download.videolan.org/x264/snapshots/x264-snapshot-20191217-2245-stable.tar.bz2
#解压tar.bz2命令:
$ tar –xjf x264-snapshot-20191217-2245-stable.tar.bz2
#进入目录
$ cd x264-snapshot-20191217-2245-stable
#./configure –help可以查看帮助信息,一般关注shared和static关键词就可以
$ ./configure --enable-shared --enable-static
#第一次安装执行如下命令:
$ make & sudo make install
#如果安装过执行如下命令:
$ sudo make clean & make & sudo make install

2. 安装libx265

#下载libx265 源码
$ wget http://download.videolan.org/videolan/x265/x265_3.2.1.tar.gz
#解压tar.gz命令:
$ tar -zxvf x265_3.2.1.tar.gz
#libx265 是用cmake 编译的,故先安装cmake
$ yum install cmake –y
#进入目录
$ cd x265_3.2.1/build/linux
#设置编译配置
$ cmake -G "Unix Makefiles" ../../source
#第一次安装执行如下命令:
$ sudo make & sudo make install
#如果安装过执行如下命令:
$ sudo make clean & make & sudo make install

3. 安装libmp3lame

#下载libmp3lame 源码
$ wget https://jaist.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
#解压tar.gz命令:
$ tar –zxvf lame-3.100.tar.gz
#进入目录
$ cd lame-3.100
#./configure --help看看哪些功能是我们需要打开关闭的 ,可以使用默认配置,直接执行:
$ ./configure --enable-shared
#第一次安装执行如下命令:
$ make & sudo make install
#如果安装过执行如下命令:
$ sudo make clean & make & sudo make install

4.安装libfdk-aac
ffmpeg编译的时候报错:Unknown option “–enable-libfaac”
官方给了说明:3.2之后的版本不再支持libfaac了,换成fdk-aac了

$ wget https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.2.tar.gz
$ tar zxvf fdk-aac-2.0.2.tar.gz
$ cd fdk-aac-2.0.2
$ ./configure --disable-static
#第一次安装执行如下命令:
$ make & sudo make install
#如果安装过执行如下命令:
$ sudo make clean & make & sudo make install

5. 安装FFmpeg 主应用

$ wget http://ffmpeg.org/releases/ffmpeg-4.4.1.tar.bz2
$ tar -xjf ffmpeg-4.4.1.tar.bz2 
$ cd ffmpeg-4.4.1
#提示:--enable-(依赖扩展名)自己需要哪些依赖则加哪些依赖 以下是个例子
$ ./configure --prefix=/usr/ffmpeg --enable-openssl --disable-static --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-pic --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libmp3lame --enable-postproc --enable-ffplay --enable-asm --enable-yasm --enable-libfreetype
#第一次安装执行如下命令:
$ make & sudo make install
#如果安装过执行如下命令:
$ sudo make clean & make & sudo make install
#如果执行ffmpeg -version ,可能会看到类似于“libxxx.so找不到”的错误提示,解决办法如下:
$ sudo vi /etc/ld.so.conf
#在尾部新增一行/usr/local/lib 执行如下命令:
$ ldconfig
#再次执行ffmpeg -version,就会看到正确的结果

WordPressX | 主题插件交易市场

发布作品分享经验