当前位置: 首页 > 编程笔记 >

PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件

隆兴修
2023-03-14
本文向大家介绍PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件,包括了PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件的使用技巧和注意事项,需要的朋友参考一下

配置php.ini文件


file_uploads = on ;//是否允许通过HTTP上传文件的开关。默认为ON即是开

upload_tmp_dir ;//文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹

upload_max_filesize = 1024m ;//望文生意,即允许上传文件大小的最大值。默认为2M,我们设置为1G

post_max_size = 1024m ;//指通过表单POST给PHP的所能接收的最大值,我们也设置为1G

max_execution_time = 3600 ;//每个PHP页面运行的最大时间值(秒),默认30秒,设置为一小时,因为后面转码时间很久。 max_input_time = 36000 ;//每个PHP页面接收数据所需的最大时间,默认60秒 memory_limit = 8m ;//每个PHP页面所吃掉的最大内存,默认8M


 文件上传插件

火焰雨推荐大家使用uploadify,Uploadify是JQuery的一个上传插件,实现带进度显示。插件安装简单,此处略过。
 但是有个问题需要注意,非IE浏览器session会丢失,查了很多资料,最终总结的原因是:

因为诸如uploadify采用的是flash客户端,它产生的useragent与浏览器的user-agent不同。
 

最终解决办法:


//在upmodify上传参数中加入session参数,如下:

scriptData: {"SESSION_ID":""},

// 在服务端接收页面加入以下代码:

if(@$_REQUEST['SESSION_ID'] && ($session_id=$_REQUEST['SESSION_ID']) !=session_id()){

session_destroy();

session_id($session_id);

@session_start(); 

}

 这样就解决了 FLASH 不能正确传递页面

视频格式转换

现在Linux下比较流行的视频格式转换软件是FFMPEG,FFMPEG是用于录制、截图、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。除了FFMPEG外,我们要转码成H264格式 ,还需要一个扩展。(文章最后给出所有软件包下载地址)

centos 5.4环境下安装源码安装h264扩展


tar -xjvf x264-snapshot-20120718-2245-stable.tar.bz2 

  #进入解压后的源文件目录 

  cd x264-snapshot-20120718-2245-stable/ 

  ./configure --prefix=/usr/local --enable-shared 

  make

  make install

 //centos 5.4环境下安装源码安装ffmpeg with h264扩展  tar -xjvf ffmpeg-2.1.1.tar.bz2  //进入解压后目录  cd ffmpeg-2.1.1  ./configure --enable-gpl --enable-libx264  make  make install  //重新加载配置  lcfonfig  //测试是否安装成功  ffmpeg

 如果你看到以下内容说明安装成功:


ffmpeg version 2.1.1 Copyright (c) 2000-2013 the FFmpeg developers

 built on Dec 17 2013 23:32:40 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-3)

 configuration: --enable-libx264 --enable-gpl

 libavutil 52. 48.101 / 52. 48.101

 libavcodec 55. 39.101 / 55. 39.101

 libavformat 55. 19.104 / 55. 19.104

 libavdevice 55. 5.100 / 55. 5.100

 libavfilter 3. 90.100 / 3. 90.100

 libswscale 2. 5.101 / 2. 5.101

 libswresample 0. 17.104 / 0. 17.104

 libpostproc 52. 3.100 / 52. 3.100

 Hyper fast Audio and Video encoder

 usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

 Use -h to get full help or, even better, run 'man ffmpeg'

 php调用ffmpeg转码视频


$cmd = 'FFMPEG  -i  uploadfile/video/test.wmv -c:v libx264 -strict -2 uploadfile/mp4/test.mp4';

 exec($cmd, $status);

 运行前请确认exec函数已经开启。否则请修改php.ini文件

最后附上FFMPEG+H264扩展+YASM+apache_mod_h264

 类似资料:
  • 我在这里和谷歌上到处都找了--没有一个有效的命令适用于IE9。IE9缺少了什么。我所尝试的一切都适用于其他地方:chrome,safari,移动设备等等。我想要一个命令,将转换它,我可以使用它在每一个设备假设支持mp4在HTML5视频标签。 我使用以下命令: 等等。同样,所有这些命令会生成一个有效的mp4文件,可以在chrome,safari等上运行。即使我使用windows media Play

  • 我在后来发现的另一个社区视频产品上发布了同样的问题,这似乎是一个更好的问题: 输出文件的规格如下所示: 看看Framerate/Timebase部分:59.94 fps,59.94 tbr,90K tbn,59.94 Tbc。虽然ffmpeg只是复制了视频流,但framerate和timebase已经改为两倍值。 null

  • 我目前有问题,使我的音频和视频流保持同步。 以下是我正在使用的AVCodecContexts: 视频: 这演奏得很完美。 然而,当我对音频做同样的操作时,视频以慢动作播放,首先播放音频,然后在没有声音的情况下继续播放视频。 我找不到任何地方的例子如何设置PTS/DTS位置的视频/音频在MP4文件。任何帮助的例子都将是伟大的! 而且,我首先写视频帧,然后(一旦它们都写好了)我写音频。我已经用注释中建

  • 我在另一个论坛上问过这个问题,但从来没有运气。我在网上找到了下面的命令,它应该使用FFMPEG从图像创建一个视频(每个持续时间为5秒)。 FFMPEG-F image2-r 1/5-i img%03d.png-vcodec libx264 out.mp4 编辑:添加命令行输出

  • 谁能帮助我理解为什么我尝试使用FFMPEG CLI用语言元数据标记音轨失败了?我已经找到了关于标签正确语法的各种信息,但我仍然不清楚(所以我的问题的第1部分是什么是正确的语法),但即使我得到了正确的(我可能有也可能没有),我想知道FFMPEG是否未能标记我的音轨,因为我的源被包装/混合了视频本质。这是否排除了语言标记的能力? 值得注意的是,尝试从MP4和MKV源(视频和音频)到MP4(视频和音频)

  • 我不小心删除了一个视频文件,但设法用恢复工具保存了它。视频被破坏了,但我设法修复了它,现在有了一个。h264文件。 我对FFMPEG是完全陌生的,运气不太好。任何建议都会很好。 提前致谢