IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP 使用FFMpeg压缩处理视频 -> 正文阅读

[PHP知识库]PHP 使用FFMpeg压缩处理视频

作者:recommend-item-box type_blog clearfix

FFMpeg压缩处理视频

<?php

$xd_file = '原视频地址路径和名';
$file = dirname(dirname(dirname(__FILE__))) . '/' . $xd_file;
$file_data = pathinfo($file);

// PHP获取视频的所有信息
$info = shell_exec("ffprobe -v quiet -print_format json -show_format -show_streams " . $file);

//$info = shell_exec("ffmpeg -i " . $file . " 2>&1");echo'<pre>';var_dump($info);die;
//# 获取视频时长、开始时间、码率:
//if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $info, $match)) {
//    $arr_duration = explode(':', $match[1]);
//    $data['seconds'] = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2]; // 转换播放时间为秒数
//    $data['start'] = $match[2]; // 开始时间
//    $data['bitrate'] = $match[3]; // 码率(kb)
//}
//# 获取视频编码、格式、分辨率:
//if (preg_match("/Video: (.*?), (.*?\(.*?\)), (.*?)[, ]/", $info, $match)) {
//    $data['vcodec'] = $match[1]; // 视频编码格式
    $data['vcodec'] = substr($match[1], 0, strrpos($match[1], " (")); // 视频编码格式
//    $data['vformat'] = $match[2]; // 视频格式
//    $data['resolution'] = $match[3]; // 视频分辨率
//    $arr_resolution = explode('x', $match[3]);
//    $data['width'] = $arr_resolution[0];
//    $data['height'] = $arr_resolution[1];
//}
//# 获取视频内音频编码、采样率:
//if (preg_match("/Audio: (.*?), (\d*) Hz/", $info, $match)) {
//    $data['acodec'] = $match[1]; // 音频编码
    $data['acodec'] = substr($match[1], 0, strrpos($match[1], " (")); // 音频编码
//    $data['asamplerate'] = $match[2]; // 音频采样频率
//}
//# 实际播放时间:
//if (isset($data['seconds']) && isset($data['start'])) {
//    $data['play_time'] = $data['seconds'] + $data['start']; // 实际播放时间
//}
//$data['size'] = filesize($file); // 文件大小
//echo '<pre>';
//var_dump($data);
//die;

$video_data = json_decode($info, true);

$data['vcodec'] = $video_data['streams'][0]['codec_name']; // 视频编码格式
$data['width'] = $video_data['streams'][0]['width']; // 视频宽度
$data['height'] = $video_data['streams'][0]['height']; // 视频高度

$data['bit_rate'] = $video_data['streams'][0]['bit_rate']; // 1400000
$data['r_frame_rate'] = $video_data['streams'][0]['r_frame_rate']; // 30

$data['acodec'] = $video_data['streams'][1]['codec_name']; // 音频编码格式

$data['streams_v_tags'] = $video_data['streams'][0]['tags'];
$data['streams_a_tags'] = $video_data['streams'][1]['tags'];
$data['format_tags'] = $video_data['format']['tags'];

$r_frame_rate = 0;
if (strpos($data['r_frame_rate'], '/') !== false) {
    $r_frame_rate = explode("/", $data['r_frame_rate'])[0] / explode("/", $data['r_frame_rate'])[1];
} else {
    $r_frame_rate = $data['r_frame_rate'];
}

if ($data['bit_rate'] > 1400000) {

    $new_file_name = '新视频地址路径和名';

    // 有视频旋转属性 对调分辨率
    if (isset($data['streams_v_tags']['totate']) && !empty($data['streams_v_tags']['totate'])) {
        $aaa = $data['width'];
        $data['width'] = $data['height'];
        $data['height'] = $aaa;
    }

    // 设置视频元数据
    $metadata = '';
    foreach ($data['format_tags'] as $k1 => $v1) {
        if ($k1 != 'major_brand' && $k1 != 'minor_version' && $k1 != 'compatible_brands') {
            $metadata .= " -metadata " . $k1 . "=''";
        }
    }
    $v_metadata = '';
    foreach ($data['streams_v_tags'] as $k2 => $v2) {
        if ($k2 != 'handler_name') {
            $v_metadata .= " -metadata:s:v:0 " . $k2 . "=''";
        }
    }
    $a_metadata = '';
    foreach ($data['streams_a_tags'] as $k3 => $v3) {
        if ($k3 != 'handler_name') {
            $a_metadata .= " -metadata:s:a:0 " . $k3 . "=''";
        }
    }

    $exec = "ffmpeg -i " . $file;

    if (!empty($metadata)) {
        $exec .= $metadata;
    }
    if (!empty($v_metadata)) {
        $exec .= $v_metadata;
    }
    if (!empty($a_metadata)) {
        $exec .= $a_metadata;
    }

    // 帧率 > 30 改为30 帧率
    if ($r_frame_rate > 30) {
        $exec .= " -r 30";
    }

    // 宽 > 高 横屏
    if ($data['width'] > $data['height']) {
        if ($data['height'] > 720) {
            $exec .= " -s 1280x720 -b:v 1300k ";
        } else {
            $exec .= " -b:v 1300k ";
        }
    } else { // 高 > 宽 竖屏
        if ($data['width'] > 720) {
            $exec .= " -s 720x1280 -b:v 1300k ";
        } else {
            $exec .= " -b:v 1300k ";
        }
    }

    // 音频编码是 aac
    if ($data['acodec'] == 'aac') {
        $exec .= "-strict -2 ";
    }

    // 视频编码不是 h264
    if ($data['vcodec'] != 'h264') {
        $exec .= "-vcodec h264 ";
    }

    // 音频编码是 aac
    if ($data['acodec'] == 'aac') {
        $exec .= "-strict -2 ";
    }

    $exec .= $new_file_name;

    shell_exec($exec);

    // 删除原文件
    if (unlink(dirname(dirname(dirname(__FILE__))) . '/' . $xd_file)) {
        // 重命名新文件名为原文件名
        rename($new_file_name, $file_data['dirname'] . '/' . $file_data['filename'] . '.' . $file_data['extension']);
    }
} else {
    return $xd_file;
}

Linux 宝塔面板安装FFMpeg和编码库

yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
yum install http://rpmfind.net/linux/epel/7/x86_64/Packages/s/SDL2-2.0.14-2.el7.x86_64.rpm
yum install ffmpeg
yum -y install ffmpeg-devel

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 12:35:45  更:2021-12-13 12:36:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/13 14:33:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码