android ffmpeg视频添加字幕和配音

android ffmpeg视频添加字幕和配音,第1张

使用ffmpeg三方:https://github.com/abyuthup/mobile-ffmpeg

兼容处理android10的不能 *** 作二进制文件流问题;

1、添加字幕

主要命令:-i videoPath.mp4 -q 5 -vf ass=subtitle.ass -y outPath.mp4

其中-q 5命令是为了生成的视频不会很模糊

2、添加字幕和配音

ffmpeg在特定的时间混合一个或多个音频,参考文章

如何在指定的时间点向视频插入配音文件即音频文件,参考文章

主要命令:ffmpeg -y -i video1.mp4 -i audio1.mp3 -i audio2.mp3 -filter_complex "[1]atrim=0:5,adelay=3000|3000[aud1][2]atrim=0:6,adelay=10000|10000[aud2][aud1][aud2]amix=2,apad,atrim=0:20[a]" -map 0:v -map "[a]" -c:v copy -ac 2 output.mp4

ffmpeg编译及使用ffmpeg编译及使用

1 ffmpeg介绍

ffmpeg是音视频的分离,转换,编码解码及流媒体的完全解决方案,其中最重要的就是libavcodec库。它被mplayer或者xine使用作为解码器。还有,国内比较流行的播放器影音风暴或MyMPC的后端ffdshow也是使用ffmpeg的解码库的。

ffmpeg软件包经编译过后将生成三个可执行文件,ffmpeg,ffserver,ffplay。其中ffmpeg用于对媒体文件进行处理,ffserver是一个http的流媒体服务器,ffplay是一个基于SDL的简单播放器。

ffmpeg中有五个库文件,libavcodec,libavformat,libavutil,libswscale,libpostproc,其中库libavcodec,libavformat用于对媒体文件进行处理,如格式的转换;libavutil是一个通用的小型函数库,该库中实现了CRC校验码的产生,128位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能;libswscale,libpostproc暂时不知道何用。

2 ffmpeg下载

最新的ffmpeg可以通过svn下载,SVN辅助的软件有:

SubVersion,从 http://subversion.tigris.org/ 下载,支持linux。

TortoiseSVN,从 http://tortoisesvn.tigris.org/ 下载,是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便。

subversion安装,记住最好之前装过apr和apr-util,在apache.org网站能下到

wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz

tar zvxf subversion-1.3.2.tar.gz

cd subversion-1.3.2

./configure --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd/

make

make install

如果安装了FC6,它已经带了svn,不用装了。

ffmpeg的下载:我们就可以通过svn命令获取最新的ffmpeg,命令如下:

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

3 ffmpeg支持库的安装

* xvid

xvid的获取地址如下:

http://www.xvid.org/

wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz

配置编译

for x86

#./configure --prefix=/usr/local

#make

#make install

for arm

#CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/arm-linux --build=i686-pc-linux --host=arm-linux --target=arm-linux

#make

#make install

* x264

x264的获取地址如下:

svn co svn://svn.videolan.org/x264/trunk x264

配置编译

for x86

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

#make

#make install

for arm

#CC=arm-linux-gcc ./configure --enable-pthread --enable-shared --host=arm-linux

--prefix=/usr/local/arm/arm-linux

#make

#make install

* 支持mp3

lame的获取地址如下: http://lame.sourceforge.net/index.php

配置编译

for x86

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

* 支持Ogg Vorbis:

* AC3和dts编码的支持

libdts编译参数

./configure --prefix=/usr

make

make install

* mpg4 aac格式支持,如果ffserver服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。这里我们安装faad2和faac就行,下载请到http://www.audiocoding.com/modules/mydownloads/,http://prdownloads.sourceforge.net/faac

FAAD2的编译

cd faad2

autoreconf -vif

./configure --prefix=/usr --with-mp4v2 --enable-shared

make

make install

faac的编译

cd faac

chmod +x bootstrap

./bootstrap

./configure --prefix=/usr --with-mp4v2 --enable-shared

make

make install

在编译ffmpeg,在configure时加上--enable-amr_nb --enable-faad --enable-faac参数。

* 支持3gp格式,这也是现在好多手机支持的格式,所以也得支持编译

编译的时候加上--enable-amr_nb --enable-amr_wb参数就行,根据编译系统的提示,所以我们得下载一些编译3gp所需得文件。

源码网址:http://www.3gpp.org/ftp/Specs

wget http://www.3gpp.org/ftp/Specs/ar ... 6.204/26204-510.zip

解压以后把里面的文件都拷贝到libavcodec/amrwb_float

wget http://www.3gpp.org/ftp/Specs/ar ... 6.104/26104-510.zip

解压以后把里面的文件都拷贝到libavcodec/amr_float

* ffmpeg支持VC1格式

微软ASF格式的三个版本,WMV1,WMV2,WMV3分别对应MediaPlayer的版本7,8和9,所以很多时候会称VC1为WMV3或 WMV9,都是它了,有时候在代码里,也能看到称呼它为VC9的。因为微软还没有正式公开这种格式,所以当前对VC1的支持还很不完善。本文基本是根据Multimedia Mike的一篇博客翻译和完善而来。

(1) 首先要下载 SMPTE VC-1 reference decoder,这个组织是要收费的,可以从这里下载免费的。

(2) 在ffmpeg目录下的libavcodec目录下面,建立目录libvc1。

(3) 将VC1_reference_decoder_release6/decoder/目录中的*.c和*.h文件全部copy到libvc1目录下。

(4) 将VC1_reference_decoder_release6/shared/目录中的*.c和*.h文件全部copy到libvc1目录下。

(5) 将 libvc1-makefile.txt放到libvc1下的Makefile文件。

(6) 将smpte-vc1.c文件放到libavcodec目录下。

(7) 修改libavcodec目录下的vc9.c,将文件最后的wmv3_decoder这个AVCodec的structure,用#if 0和#endif包含起来,也就是使它失效了。

(8) 修改libavcodec目录下的allcodecs.c

01<?php02$dir = './'// set to current folder03if ($handle = opendir($dir)) {04 while(false!== ($file = readdir($handle))) {05 if ( is_file($dir.$file) ){06 if (preg_match("'\.(avi)$'", $file) ){07 $sub_file = str_ireplace(".avi", ".srt", $dir.$file)08 $idx_file = str_ireplace(".avi", ".idx", $dir.$file)09 $thumb_file = str_ireplace(".avi", ".jpg", $dir.$file)10 $out_file = str_ireplace(".avi", ".mp4", $dir.$file)11 flv_convert_get_thumb($dir.$file, $sub_file, $idx_file, $thumb_file, $out_file)12 }13 else{14 continue15 }16 }17 }18 closedir($handle)19}20 21//flv_convert_get_thumb('input.avi', 'input.srt', 'output.jpg', 'output.ogm')22// code provided and updated by steve of phpsnaps ! thanks23// accepts:24// 1: the input video file25// 2: path to thumb jpg26// 3: path to transcoded mpeg?27function flv_convert_get_thumb($in, $in_sub, $in_idx, $out_thumb, $out_vid){28 // get thumbnail29 $cmd = 'ffmpeg -v 0 -y -i '.$in.' -vframes 1 -ss 250 -vcodec mjpeg -f rawvideo -s 286x160 -aspect 16:9 '.$out_thumb30 $res = shell_exec($cmd)31 // $res is the output of the command32 // transcode video33$cmd = 'mencoder '.$in.' -o '.$out_vid.' -sub '.$in_sub.' -subfont-text-scale 3.0 -subpos 99 -af volume=10 -aspect 16:9 -of avi -noodml -ovc x264 -x264encop$34 $res = shell_exec($cmd)35}36?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11818041.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存