环境
centos 7
hybbs 2.3.2
FFmpeg 是一个很强大的音视频处理工具,官网介绍 FFmpeg 是:一个完整的、跨平台的解决方案,可以记录、转换和传输音频和视频。FFmpeg既可以播放视频,也提供命令行工具来处理视频,另外还有强大的视频处理库用于开发,下面是以 Linux 为例介绍 FFmpeg 的安装流程的简单的命令行对视频进行转码操作,是 FFmpeg 中最最简单的入门内容
FFmpeg 官网地址:http://ffmpeg.org/
cd /usr/local/src
wget https://ffmpeg.org/releases/ffmpeg-4.2.3.tar.gz
tar -zxvf ffmpeg-4.2.3.tar.gz
cd ffmpeg-4.2.3
./configure --enable-shared --prefix=/usr/local/ffmpeg
make make install
--enable-shared 参数据说是允许其编译产生动态库,在以后的编程中要用到这个几个动态库
--prefix 用于设置 FFmpeg 的安装目录,目前使用过来如果设置后再进行 ffmpeg-php 安装时会出现需要 --enable-shared
安装时异常:提示因为缺少 yasm 或者该包旧了,执行以下命令安装 yasm
yum -y install yasm
安装之后运行
配置库目录到系统中
然后进入 bin 目录,执行 ./ffmpeg -version 查看当前版本的详细信息,默认情况下一般会报:
原因是 lib 目录未加载到链接到系统库中,系统库配置文件 /etc/ld.so.conf ,打开后你会发现里面引用了 /etc/ld.so.conf.d/ 下面所有的 *.conf 文件,所以我们只需执行以下命令:
然后添加一行内容:
/usr/local/ffmpeg/lib
之后保存并退出,然后执行 ldconfig 使配置生效,现在再次执行 ./ffmpeg -version 显示就正常了。
ldconfig 是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享
ldconfig 的主要用途:默认搜寻/lilb和/usr/lib,以及配置文件/etc/ld.so.conf内所列的目录下的库文件
配置执行文件到系统中
然后我们可以将这个 bin 目录添加至环境变量中以保证任何时候在任何目录中都能使用 ffmpeg 命令,操作步骤如下:
找到Action/Post.php视频上传函数将以下代码:
//{hook a_post_uploadvideo_33}
$File = S('File');
$File->insert(array(
'uid' => NOW_UID,
'filename' => filter_html(isset($info['video'])?$info['video']['name']:'未命名.'.$info['video']['ext']),
'md5name' => $upload->saveName.'.'.$info['video']['ext'],
'md5' => $upload->saveName,
'filesize' => $info['video']['size'],
'file_type' => 3,//视频
'atime' => NOW_TIME
));
替换为:
//保存截图 $ffmpeg_cmd ="ffmpeg -i " . INDEX_PATH . $UserTmpUploadPath . $info['video']['savename'] . " -y -c:v copy -c:a copy " . INDEX_PATH . $UserTmpUploadPath . $upload->saveName . ".mp4"; exec($ffmpeg_cmd); $thumb_file =INDEX_PATH . $UserTmpUploadPath . $upload->saveName . '.jpg'; $cmd ="ffmpeg -i " . INDEX_PATH . $UserTmpUploadPath . $info['video']['savename'] . " -y -f mjpeg -ss 1 -t 0.005 -vf \"thumbnail,scale=iw:ih\" -vframes 1 " . $thumb_file; exec($cmd); $ffmpeg_i = "ffmpeg -i " . INDEX_PATH . $UserTmpUploadPath . $info['video']['savename'] . " 2>1 | grep Duration"; exec($ffmpeg_i, $output); $duration = ''; if (!empty($output)) { $duration_line = explode(',', $output[0]); if (!empty($duration_line)) { $duration = trim(str_replace('Duration:', '', $duration_line[0])); $duration = substr($duration, 0, 8); // 只保留时分秒部分 } } $File = S('File'); $File->insert(array( 'uid' => NOW_UID, 'filename' => filter_html(isset($info['video'])?$info['video']['name']:'未命名.'.$info['video']['ext']), 'md5name' => $upload->saveName.'.'.$info['video']['ext'], 'md5' => $upload->saveName, 'filesize' => $info['video']['size'], 'file_type' => 3,//视频 'atime' => NOW_TIME, 'time' => $duration )); $json['duration'] = $duration; $json['file_path'] = WWW . $UserTmpUploadPath .$info['video']['savename']; $json['file_path']=WWW . $UserTmpUploadPath .$upload->saveName . '.mp4'; // 转换后的视频 $json['thumb_path']=WWW . $UserTmpUploadPath . $upload->saveName . '.jpg'; // 视频缩略图
教程来源于网络
admin
发表于 2023-8-22
咳咳
评论列表
加载数据中...
admin
发表于 2023-8-22
kk
评论列表
加载数据中...
admin
发表于 2023-8-22
xf
评论列表
加载数据中...
admin
发表于 2023-8-22
dd
评论列表
加载数据中...
admin
发表于 2023-8-22
kk
评论列表
加载数据中...
admin
发表于 2023-8-22
kk
评论列表
加载数据中...
admin
发表于 2023-8-22
?
评论列表
加载数据中...
admin
发表于 2023-8-22
康康
评论列表
加载数据中...
admin
发表于 2023-8-22
康康
评论列表
加载数据中...
admin
发表于 2023-8-22
咳咳
评论列表
加载数据中...