백엔드 개발 PHP 튜토리얼 利用Ffmpeg获得flv视频缩略图和视频时间的代码_PHP

利用Ffmpeg获得flv视频缩略图和视频时间的代码_PHP

Jun 01, 2016 pm 12:14 PM
ffmpeg flv

FFmpeg

问题描述;获得flv视频的缩略图和视频时间长度

  • 谷歌了半天发现可以使用Ffmpeg获得视频的一些信息,先介绍一下FFMEPG

这里简单说一下:FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。官方正式版ffmpeg不支持rmvb和rm格式. 不过有很多解决方法

FFmpeg的官方网址是 http://ffmpeg.mplayerhq.hu/ 。

中文Wiki是 http://www.ffmpeg.com.cn/ ,资料很多。

㈠安装FFMEPG

操作系统:centos6

找了那么多安装FFMEPG的文章,基本上都是没有注释,需要安装那么多软件包,也不说明一下是干什么用的,纠结。。而且安装上面步骤总是出问题,最后只得寻找官网,认真的看一下,确实官方的资料很好用,以后一定要优先看官网资料。

由于FFMEPG本身就支持flv格式,也就是说目前不需要安装什么插件只需要安装FFMEPG,安装FFMEPG有两种方式:①源码包安装,这个不知道怎么回事老是报错②yum命令安装,centos这个yum是最好的命令,呵呵

下面是安装步骤:

㈠安装编译环境

#yum install -y automake autoconf libtool gcc gcc-c++

㈡安装所需程序库的RPM包到 centos

rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

安装 Install ffmpeg 等模块
yum -y install ffmpeg ffmpeg-devel

***********************************centos下面的安装已经完成!

安装php支持插件:FFMPEG-PHP

安装 FFMPEG-PHP
cd /usr/local/src
wget http://garr.dl.sourceforge.net/sourceforge/ffmpeg-php/ffmpeg-php-0.6.0.tbz2
tar jxvf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-confi
make
make install

然后修改php.ini文件
vi  php.ini

在php.ini文件加上这句
extension=ffmpeg.so

然后重新启动apache
/etc/init.d/httpd restart

*******备注wget链接那个可能失效,估计是被墙了,可以在网上自己找

----------------------------------------------------------------------------------------------------------

但是我打开phpinfo并没有看到FFMPEG,不知道怎么回事,官网上面提供的安装方法是需要重新编译php来支持ffmpeg,我嫌麻烦,考虑到服务都是在centos上运行,既然centos已经可以,

那我使用php的exec函数调用liunx的shell命令不就可以了,也就是说不需要安装FFMPEG-PHP

关于php的exec函数的可以参考:php中使用exec,system等函数调用系统命令

下面是获得缩略图的常用命令:

示例1:
截取一张352x240尺寸大小的,格式为jpg的图片: 
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg

示例2:
把视频的前30帧转换成一个Animated Gif : 
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif

示例3:这个是我需要的!
在视频的第8.01秒处截取 320*240 的缩略图

ffmpeg -i test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 test.jpg

示例4:

把视频转换成flv文件(这个用得最多,现在Flv基本上已经成了网络视频的标准了)

ffmpeg -i source -s 320×240 -b 700k -aspect 4:3 -y -f flv dest.flv 。

其中:

  • source:是原始文件的名字,可以是mov,mpeg,avi,wmv各类格式,ffmpeg基本都支持。
  • -s wxh: 指定视频的宽和高
  • -b : 设定视频的比特率
  • -aspect: 保持视频的比率。如4:3或者16:9
  • -y : 如果目标文件存在时,直接覆盖原有的目标文件。
  • -f : 指定转换的文件格式,这里是flv格式。(其实如果不指定文件格式,ffmpeg也会按文件的后缀名来进行转换)。
  • dest: 转换的目标文件名字,并不一定需要是flv,可以是mov,mpeg以及其他的常用格式。

参数说明:

-L license

-h 帮助

-fromats 显示可用的格式,编解码的,协议的

-f fmt 强迫采用格式fmt

-I filename 输入文件

-y 覆盖输出文件

-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持

-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持

s wxh: 指定视频的宽和高

****************************************************************************

示例3:是针对flv格式的视频获得指定处的缩略图,记住 -f强制转换的格式是mjpeg因为我要获得.jpg的缩略图,网上有很多写成文章都是写成ffmpeg -i test.flv -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg 这个是错误,不可能输出.

wps_clip_image-30884

通过上面的截图:我们可以看到输入的flv信息和输出的jpg图片信息,Duration就是本文需要的视频长度,但是我不知道如何取得这个变量

下面是PHP调用shell命令获得缩略图的代码

exec("/usr/bin/ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 /usr/local/apache/htdocs/test.jpg",$out,$status);   

print_r($status);//0是成功 1是失败

*************************************************

如果没有什么图片生成的可能原因:

①对于存储生成图片的文件夹需要有写入权限 #chomd 777 /usr/local/apache/htdocs

②在php.ini中有disable_functions禁用了php调用shell命令函数,

disable_functions = proc_open, popen,exec, system, shell_exec, passthru

解决办法:注释掉disable_functions这一项

#disable_functions = proc_open, popen,exec, system, shell_exec, passthru

或者disable_functions = (把禁言的函数除去)

保存关闭开启就可以了

③php.ini中的安全模式必须关闭 才可以调用exec函数

safe_mode = off

④图片时间截取也很重要,很有可能是无效图片或者是黑屏

建议 增加关键帧,通常第一帧为关键帧,可以使用:vframes:帧参数,舍弃微秒参数,只保留时间参数

/usr/bin/ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg -ss 3 -vframes 1 -s 320x240 /usr/local/apache/htdocs/test.jpg

****************************************************************************

上面都是解决获得缩略图的方法,我看到有人在安卓开发中利用ffmpeg获得手机里面视频的缩略图,考虑到安卓的底层是liunx,应该是通用的!下面是如何获得视频的长度,虽然Duration就是需要的视频长度,但是不知道如何去取,如果有人会,可以教一下我,跪求!

下面是使用纯PHP获得视频的时间长度:

你在网上搜一下:php获得flv视频长度

可以发现有很多结果,但是我翻了十几页发现tmd的都是复制转载的,而且全部都不能使用,不知道为什么?这个代码和诡异,大家可以把网上的代码运行一下,你会发现这个跟不是php,因为编辑器就没有显示语法高亮,没有办法我照着网上手写了一边代码,发现还是报错诡异了 。。。报错还很奇怪  ,感兴趣的可以试试,没有办法我决定搜英文资料,最后在外国网站看到了代码,拿来一试可以!哈哈哈  还是老外的东西好使啊

错误的代码:wps_clip_image-988

关键词没有高亮显示


下面是正确的代码:
复制代码 代码如下:
function BigEndian2Int($byte_word, $signed = false) {
$int_value = 0;
$byte_wordlen = strlen($byte_word);
for ($i = 0; $i $int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i));
}
if ($signed) {
$sign_mask_bit = 0x80 if ($int_value & $sign_mask_bit) {
$int_value = 0 - ($int_value & ($sign_mask_bit - 1));
}
}
return $int_value;
}
//获得视频的数字时间
function getTime($name){
if(!file_exists($name)){
return;
}
$flv_data_length=filesize($name);
$fp = @fopen($name, 'rb');
$flv_header = fread($fp, 5);
fseek($fp, 5, SEEK_SET);
$frame_size_data_length =BigEndian2Int(fread($fp, 4));
$flv_header_frame_length = 9;
if ($frame_size_data_length > $flv_header_frame_length) {
fseek($fp, $frame_size_data_length - $flv_header_frame_length, SEEK_CUR);
}
$duration = 0;
while ((ftell($fp) + 1) $this_tag_header = fread($fp, 16);
$data_length = BigEndian2Int(substr($this_tag_header, 5, 3));
$timestamp = BigEndian2Int(substr($this_tag_header, 8, 3));
$next_offset = ftell($fp) - 1 + $data_length;
if ($timestamp > $duration) {
$duration = $timestamp;
}
fseek($fp, $next_offset, SEEK_SET);
}
fclose($fp);
return $duration;
}
//转化为0:03:56的时间格式
function fn($time){
$num = $time;
$sec = intval($num/1000);
$h = intval($sec/3600);
$m = intval(($sec%3600)/60);
$s = intval(($sec%60));
$tm = $h.':'.$m.':'.$s;
return $tm;
}
$t = getTime("22.flv");//显示数字时间如236722
echo fn($t);//显示时间格式0:03:56
?>

预览效果:

wps_clip_image-31828

我的视频是55秒正好!ok

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Golang 및 FFmpeg: 오디오 믹싱 및 분리를 달성하는 방법 Golang 및 FFmpeg: 오디오 믹싱 및 분리를 달성하는 방법 Sep 27, 2023 pm 02:24 PM

Golang 대 FFmpeg: 오디오 믹싱 및 분리를 구현하는 방법, 필요한 특정 코드 예제 요약: 오디오 처리는 많은 멀티미디어 애플리케이션에서 필수적인 부분입니다. Golang에서는 FFmpeg 라이브러리를 사용하여 오디오 믹싱 및 분리를 달성할 수 있습니다. 이 기사에서는 Golang을 사용하여 FFmpeg 라이브러리를 호출하여 오디오 믹싱 및 분리를 달성하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 이 기사를 연구함으로써 독자는 Golang 및 FFmpeg를 사용하여 오디오 처리를 구현하는 방법을 배우게 됩니다.

Golang과 FFmpeg를 이용한 비디오 스플라이싱 실습 Golang과 FFmpeg를 이용한 비디오 스플라이싱 실습 Sep 28, 2023 am 08:37 AM

Golang 및 FFmpeg를 사용한 비디오 스플라이싱에 대한 실무 소개: 일상 생활에서 여러 개의 녹화된 비디오를 하나의 완전한 비디오 파일로 스플라이싱하는 등 여러 비디오 파일을 하나로 병합해야 하는 상황에 자주 직면합니다. 이 목표를 달성하기 위해 이 기사에서는 Golang 및 FFmpeg 라이브러리를 사용하여 비디오 접합 프로세스를 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. Golang과 FFmpeg가 무엇인가요? Golang(Go 언어)은 Go 언어가 개발한 오픈 소스 프로그래밍 언어입니다.

Golang 및 FFmpeg: 오디오 합성 및 분할 구현 방법 Golang 및 FFmpeg: 오디오 합성 및 분할 구현 방법 Sep 27, 2023 pm 10:52 PM

Golang 및 FFmpeg: 오디오 합성 및 분할을 구현하는 방법, 구체적인 코드 예제가 필요합니다. 요약: 이 기사에서는 Golang 및 FFmpeg 라이브러리를 사용하여 오디오 합성 및 분할을 구현하는 방법을 소개합니다. 독자의 이해를 돕기 위해 몇 가지 구체적인 코드 예제를 사용하겠습니다. 소개: 오디오 처리 기술의 지속적인 개발로 인해 오디오 합성 및 분할은 일상 생활과 업무에서 일반적인 기능 요구 사항이 되었습니다. 빠르고 효율적이며 작성 및 유지 관리가 쉬운 프로그래밍 언어인 Golang은 FFmpeg와 결합되어 있습니다.

서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까? 서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까? Mar 28, 2024 pm 02:39 PM

서버에 PHPFFmpeg 확장을 설치하는 방법은 무엇입니까? 서버에 PHPFFmpeg 확장을 설치하면 PHP 프로젝트에서 오디오 및 비디오 파일을 처리하고 오디오 및 비디오 파일의 인코딩, 디코딩, 편집 및 처리와 같은 기능을 구현하는 데 도움이 될 수 있습니다. 이 기사에서는 서버에 PHPFFmpeg 확장을 설치하는 방법과 구체적인 코드 예제를 소개합니다. 먼저, PHP와 FFmpeg가 서버에 설치되어 있는지 확인해야 합니다. FFmpeg가 설치되어 있지 않은 경우 아래 단계에 따라 FFmpe를 설치할 수 있습니다.

비디오 깜박임 제거를 달성하기 위해 Golang 및 FFmpeg를 사용하는 방법 비디오 깜박임 제거를 달성하기 위해 Golang 및 FFmpeg를 사용하는 방법 Sep 27, 2023 pm 04:46 PM

비디오 깜박임 제거를 달성하기 위해 Golang 및 FFmpeg를 사용하는 방법에 대한 실제 개요: 비디오 깜박임은 비디오 처리에서 자주 발생하는 문제입니다. 녹화된 영상의 프레임 레이트가 조명 주파수와 일치하지 않을 경우 영상 깜박임이 발생할 수 있습니다. 이 기사에서는 Golang 및 FFmpeg 라이브러리를 사용하여 비디오 깜박임 제거를 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 단계: FFmpeg 라이브러리 설치: 먼저 Golang 개발 환경에 FFmpeg 라이브러리를 설치해야 합니다. 합격할 수 있다

Golang 및 FFmpeg: 오디오 형식 변환 및 압축 구현 방법 Golang 및 FFmpeg: 오디오 형식 변환 및 압축 구현 방법 Sep 28, 2023 pm 07:13 PM

Golang 및 FFmpeg: 오디오 형식 변환 및 압축을 구현하는 방법, 특정 코드 예제가 필요합니다. 소개: 오디오 파일 처리에서 오디오 형식을 변환하거나 오디오 파일 크기를 압축해야 하는 경우가 있습니다. 강력한 프로그래밍 언어인 Golang은 널리 사용되는 오디오 및 비디오 처리 도구인 FFmpeg와 결합되어 빠르고 효율적인 오디오 형식 변환 및 압축을 달성할 수 있습니다. 이 기사에서는 Golang 및 FFmpeg를 사용하여 오디오 형식 변환 및 압축을 수행하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

Golang 및 FFmpeg: 실시간 비디오 스트림 분석 및 인식 기술 Golang 및 FFmpeg: 실시간 비디오 스트림 분석 및 인식 기술 Sep 27, 2023 pm 02:31 PM

Golang 및 FFmpeg: 특정 코드 예제가 필요한 실시간 비디오 스트림 분석 및 인식을 구현하는 기술 소개: 오늘날의 디지털 및 지능형 시대에 비디오 기술의 사용이 점점 더 늘어나고 있습니다. 그중 실시간 비디오 스트림의 분석 및 인식은 보안 모니터링, 지능형 교통, 얼굴 인식 및 기타 분야에서 중요한 역할을 합니다. 이 기사에서는 Golang과 FFmpeg를 결합한 기술을 사용하여 실시간 비디오 스트림의 분석 및 식별을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. Golang 소개 Golang은

PHP FFmpeg 확장 설치 가이드: 따라하기 쉬운 튜토리얼 PHP FFmpeg 확장 설치 가이드: 따라하기 쉬운 튜토리얼 Mar 28, 2024 pm 02:17 PM

PHPFFmpeg 확장 설치 가이드: 간단하고 이해하기 쉬운 튜토리얼 웹사이트 개발 과정에서 오디오, 비디오 등 다양한 멀티미디어 파일을 처리해야 하는 경우가 있습니다. FFmpeg는 오디오, 비디오 및 기타 형식을 처리할 수 있고 다양한 트랜스코딩, 자르기 및 기타 작업을 지원하는 강력한 멀티미디어 처리 도구입니다. PHPFFmpeg 확장은 PHP에서 FFmpeg 함수를 호출하는 확장 라이브러리로 멀티미디어 파일을 쉽게 처리하는 데 사용할 수 있습니다. 아래에서는 PHPF에 대해 자세히 소개하겠습니다.

See all articles