哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频

这篇具有很好参考价值的文章主要介绍了哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

window下载安装FFmpeg

  • 打开ffMpeg官网
  • 选择window=>Windows builds from gyan.dev
    哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频,ffmpeg,php,音视频
  • 打开https://www.gyan.dev/ffmpeg/builds/
    哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频,ffmpeg,php,音视频
  • 这里是上面提取的下载链接如果过期不能用自己去官网下

配置FFmpeg环境变量

上面下载的FFmpeg是绿色软件,下载解压到你的常用软件安装目录即可,然后进入bin复制全路径配置下系统环境变量即可

哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频,ffmpeg,php,音视频
哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频,ffmpeg,php,音视频

终端命令处理

哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频,ffmpeg,php,音视频

# 常规命令
ffmpeg -i video.m4s -i audio.m4s -codec copy video.mp4

# 屏蔽输出日志
ffmpeg -loglevel quiet -i video.m4s -i audio.m4s -codec copy video.mp4

哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频,ffmpeg,php,音视频

使用PHP调用FFmpeg

  • https://github.com/PHP-FFMpeg/PHP-FFMpeg/
<?php

// require 'vendor/autoload.php';
// $ffmpeg = FFMpeg\FFMpeg::create();
// $oldAudio = $ffmpeg->open('./assets/32.amr');
// $newAudio = new FFMpeg\Format\Audio\Mp3();
// $newAudio->setAudioKiloBitrate(8); // 设置音频比特
// $oldAudio->save($newAudio, './assets/32.mp3');

// shell_exec("ffmpeg -i 32.amr b.mp3"); // cmd可执行

/* http请求可执行 */
// $file = './src/32.amr';
// $outFile = './src/b.mp3';
// $handle = popen("ffmpeg -i $file $outFile", 'w'); 
// pclose($handle);


// $filePath = './src/32.amr';
// $filePath_mp =  './src/b.mp3';
// echo "ffmpeg -i $filePath $filePath_mp";
// $handle = popen("ffmpeg -i $filePath  $filePath_mp", 'w');
// pclose($handle);



shell_exec("ffmpeg -i video.m4s -i audio.m4s -codec copy video.mp4"); // cmd可执行
  • 批量处理程序
<?php
date_default_timezone_set("PRC");
header("Content-type: text/html; charset=utf-8"); 
set_time_limit(0);

// 遍历获取文件
function getDirFile($path = null, $deep = true) {
    if (empty($path)) {
        return [];
    }
    $files = scandir($path);
    $fileItem = [];
    foreach($files as $v) {
        $newPath = $path .DIRECTORY_SEPARATOR.$v;
        if($deep && is_dir($newPath) && $v != '.' && $v != '..') {
          if (is_numeric($deep)) {
            $deep--;
          }
            $fileItem = array_merge($fileItem, getDirFile($newPath, $deep));
        }else if(is_file($newPath)){
            $fileItem[] = $newPath;
        }
    }
    return $fileItem;
}

// 遍历获取文件夹
function getDir($path = null, $deep = true) {
    if (empty($path)) {
        return [];
    }
    $files = scandir($path);
    $dirList = [];
    foreach($files as $v) {
        $newPath = $path .DIRECTORY_SEPARATOR.$v;
        if (is_dir($newPath) && $v != '.' && $v != '..') {
          $dirList[] = $newPath;
          if ($deep) {
            if (is_numeric($deep)) {
            $deep--;
          }
          $dirList = array_merge($dirList, getDir($newPath, $deep));
          }
        }
    }
    return $dirList;
}

//判断文件夹是否存在,没有则新建。
if (!function_exists('mkdirs')) {
    function mkdirs($dir, $mode = 0777)
    {
        if (is_dir($dir) || @mkdir($dir, $mode)) {
            return true;
        }
        if (!mkdirs(dirname($dir), $mode)) {
            return false;
        }
        return @mkdir($dir, $mode);
    }
}

/**
 * 操作文件夹
 * addtime 2020年7月17日
 * @param [type] $dirname 文件夹路径
 * @param boolean $self  是否删除文件夹本身[true是 false否] 具体看需求
 * @return void
 */
function do_rmdir($dirname, $self = false) 
{
    # 检查文件或目录是否存在
    if (!file_exists($dirname)) {
      return false;
    }
    # 是文件进行删除
    if (is_file($dirname) || is_link($dirname)) {
      return unlink($dirname);
    }
    # 开始读取目录
    $dir = dir($dirname);
    if ($dir) {
      while (false !== $entry = $dir->read()) {
        if ($entry == '.' || $entry == '..') {
          continue;
        }
        # 进行文件删除
        do_rmdir($dirname . '/' . $entry);
      }
    }
    # 关闭目录
    $dir->close();
    # 是否删除本身文件夹
    $self && rmdir($dirname);
    # 成功返回
    return ['code' => 200];
}

$inputParams = getopt('d:s:'); // 接收-d参数
if (empty($inputParams['d']) || !file_exists($inputParams['d'])) {
  die(PHP_EOL.'请输入正确的B站视频文件目录');
}
// $isNo = empty($inputParams['s'])?false: true;
// print_r($inputParams);
// die();
$inputDir = $inputParams['d'];
$outputDir = dirname(__FILE__).DIRECTORY_SEPARATOR. $inputDir.'Mp4';
do_rmdir($outputDir, true);
mkdirs($outputDir);
$isDebug = false;


$list = getDir($inputDir, false);
if (empty($list)) {
  die(PHP_EOL.'空文件夹。。。');
}
$i = 0;
foreach ($list as $key => $item) {
  $entryJson = $item. DIRECTORY_SEPARATOR . 'entry.json';
  $audio = $item. DIRECTORY_SEPARATOR . '80' . DIRECTORY_SEPARATOR . 'audio.m4s';
  $video = $item. DIRECTORY_SEPARATOR . '80' . DIRECTORY_SEPARATOR . 'video.m4s';
  if (file_exists($entryJson) && file_exists($audio) && file_exists($video)) {
    $entryJsonText = file_get_contents($item. DIRECTORY_SEPARATOR . 'entry.json');
    if (!empty($entryJsonText)) {
      $entryJsonText = json_decode($entryJsonText, true);
      $fileName = $entryJsonText['page_data']['part'];
      // $fileName = explode($separator, $fileName, 2);
      // $fileName[0] = str_pad($fileName[0], 3, '0', STR_PAD_LEFT );
      // $fileName = implode('.', $fileName);
      
      // 替换中文括号
      $fileName = str_replace('(', '(', $fileName);
      $fileName = str_replace(')', ')', $fileName);
      // 替换文件名不能含有的符号? \ / : | * "
       
      $fileName = str_replace('\\', '_{_', $fileName);
      $fileName = str_replace('/', '_}_', $fileName);
      $fileName = str_replace(':', ':', $fileName);
      $fileName = str_replace('*', '_ALL_', $fileName);
      $fileName = str_replace('<', '《', $fileName);
      $fileName = str_replace('>', '》', $fileName);
      $fileName = str_replace('|', '_OR_', $fileName);

      // 是否开启编号
      $No = str_pad($entryJsonText['page_data']['page'], 3, '0', STR_PAD_LEFT );

      $cmdFileName = $outputDir . DIRECTORY_SEPARATOR . $No . '.mp4';
      $fileName = $outputDir . DIRECTORY_SEPARATOR . $No. '.' . $fileName . '.mp4';
      $cmd = "ffmpeg ".($isDebug? "": "-loglevel quiet")." -i {$audio} -i {$video} -codec copy {$cmdFileName}";
      shell_exec($cmd); // cmd可执行
      // 重命名
      rename($cmdFileName, $fileName);
      print_r([
        'index' => $i++,
        'path' => $item,
        'fileName' => $fileName,
        'cmd'   => $cmd,
      ]);
    }
  } 
}
echo PHP_EOL;
print_r(array(
  '总计文件' => count($list),
  '完成文件' => $i,
));
  • 运行脚本
php index.php -d 目录名

哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频,ffmpeg,php,音视频文章来源地址https://www.toymoban.com/news/detail-619702.html

参考

  • windows系统下php-ffmpeg类库的使用
  • 使用FFmpeg将m4s文件转为mp4 ——哔哩哔哩缓存转码

到了这里,关于哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • m4s格式转换mp4

    先安装 ffmpeg,具体从官网可以查到,https://ffmpeg.org,按流程走。 转换代码如下,可以任意选择格式导出 注意,b站导出的m4s文件有时候会出现报错, Invalid data found when processing input https://www.bilibili.com/read/cv14802750/ 可以参考这篇文章。 mac多说一句,直接用sublime text读取m4s文件

    2024年02月11日
    浏览(58)
  • 操作无法完成,因为文件已在Windows资源管理器中打开,如何解决?以及如何将哔哩哔哩下载好的视频导出到电脑中播放?— 以vivo手机为例

    想删除流氓软件的时候,提示 操作无法完成,因为文件已在Windows资源管理器中打开 ,但打开任务管理器,似乎又没有符合的正在执行的程序,更别说打开让人看到头疼的资源监视器了,本文将用一招解决如上问题 声明: 本文持续收录病毒软件导致的电脑卡死,资源无法清

    2024年01月25日
    浏览(305)
  • 【小吉测评】哔哩哔哩接入AI?!效果如何?

    最近人工智能特别火,chatgpt,Claude2,文心一言等等大模型层出不穷 最近B站推出了AI助手功能,可以为用户提供智能的信息检索和问题解答服务。这个新功能备受瞩目,广大B站用户都跃跃欲试。那么这个AI助手的效果如何呢?它具有哪些功能?今天我们就来看看笔者亲身体验,为大

    2024年02月10日
    浏览(40)
  • 微信小程序仿哔哩哔哩视频组件

    微信小程序仿照哔哩哔哩(包含源码获取) 效果如下图 项目为简单的小程序代码片段,不包含后端,只通过原生的小程序语言开发,使用官方原生的 video,没有使用任何的第三方的组件库, 需要的小伙伴可以自己获取项目的源代码,引入项目即可使用 视频组件video是在官方

    2024年02月02日
    浏览(41)
  • Python爬虫 | 爬取微博和哔哩哔哩数据

    目录 一、bill_comment.py 二、bili_comment_pic.py 三、bilibili.py 四、bilihot_pic.py 五、bilisearch_pic.py 六、draw_cloud.py 七、weibo.py 八、weibo_comment.py 九、weibo_comment_pic.py 十、weibo_pic.py 十一、weibo_top.py 十二、weibo_top_pic.py 十三、weibo_top_pie.py 十四、pachong.py 十五、代码文件说明 pachong: b站、

    2024年02月12日
    浏览(57)
  • 哔哩哔哩浏览器 AI 助手:bilibili subtitle

    分享一个好用不火的浏览器插件,能够让我们在浏览 B 站视频的时候体验更棒。 B 站视频时间越来越长的今天,在打开视频的时候,如果能够 清晰直观的看到视频字幕 ,当我们点击带有时间轴的字幕就能够 一键跳转 到自己想看的视频“空降坐标”,在观看视频的时候就能够

    2024年01月24日
    浏览(56)
  • 一次哔哩哔哩面试经历,Zookeeper一致性级别分析

    首先介绍一下自己的个人基本情况,某专科学校毕业,计算机技术与应用专业,有过2年的工作经验,毕业以后一直想要进入一线互联网大厂工作,但无奈学历受限,屡屡被挡在门外。后来接触到一个朋友,了解到“霸面”,所以鼓起勇气去尝试了,挑战了一下蚂蚁金服,没想

    2024年03月20日
    浏览(50)
  • Python爬虫--爬取哔哩哔哩(B站)短视频平台视频

    目录 1、开发工具 2、第三方库 3、实现思路 4.单个爬取B站视频 5.批量爬取B站视频 6.查找所需数据 结尾     1、开发工具 Python3.9 pycharm requests 和其他python内置库 2、第三方库 安装第三方库 pip install requests 3、实现思路 1.用requests发送get请求,获得下载链接 2.将下载到B站视频和

    2024年02月22日
    浏览(51)
  • 帝搜软件新增今日头条和B站(哔哩哔哩)seo排名优化功能

    2022-4-24日,帝搜官方平台正式新增了3个业务板块! 【1】今日头条 今日头条包括下拉和排名,业务合并为今日头条栏目,添加方式简单。 头条下拉:收录和更新时间与抖音相似、出词率也极高的! 头条排名:支持前200名内的目标自然提升 【2】 哔哩 哔哩(B站) B站是帝搜第

    2024年02月11日
    浏览(51)
  • 【爬虫+数据清洗+可视化分析】用Python分析哔哩哔哩“狂飙”的评论数据

    目录 一、背景介绍 二、爬虫代码 三、可视化代码 3.1 读取数据 3.2 数据清洗 3.3 可视化 3.3.1 IP属地分析-柱形图 3.3.2 评论时间分析-折线图 3.3.3 点赞数分布-直方图 3.3.4 评论内容-情感分布饼图 3.3.5 评论内容-词云图 四、演示视频 您好,我是@马哥python说,一枚10年程序猿。 202

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包