Total Pageviews

Sunday 2 June 2024

用ffmpeg合并多个音频


  1. 创建一个文本文件,列出要合并的音频文件。例如,如果要合并名为“audio1.mp3”、“audio2.mp3”和“audio3.mp3”的文件,可以在文本文件中写入以下内容:
file 'audio1.mp3'
file 'audio2.mp3'
file 'audio3.mp3'
文本文件保存为 input.txt 

注意:文件名和路径应该根据实际情况进行修改。

  1. 使用“concatenate”功能合并音频。使用以下命令:
ffmpeg -f concat -safe 0 -i input.txt -c copy output.mp3

其中,“-f concat”表示使用concat协议进行合并,-safe 0表示禁用安全检查,-i input.txt表示输入要合并的文件列表,-c copy表示复制原始编解码器,output.mp3表示输出文件名。

完成以上步骤后,多个mp3文件将被合并到一个新的MP3文件中

注意:在实际使用中,可能需要根据实际情况进行调整。

ref: https://juejin.cn/post/7224125445272076325

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

基础命令:

1.将xxx.amr转成xxx.mp3:

ffmpeg -i xxx.amr xxx.mp3


2.多个音频拼接为一个:

ffmpeg -i "concat:xxx1.mp3|xxx2.mp3|xxx3.mp3" -acodec copy xxx4.mp3

解释:

-i代表输入参数

contact:xxx1.mp3|xxx2.mp3|xxx3.mp3 代表着需要连接到一起的音频文件

-acodec copy xxx4.mp3 重新编码并复制到新文件xxx4.mp3中


3.多个合成为一个,比如给某用户录音添加背景音乐

ffmpeg -i xxx.mp3 -i xxxbg1.mp3 -i xxxbg2.mp3 -filter_complex amix=inputs=3:duration=first:dropout_transition=2 xxxsave.mp3

解释:

-i代表输入参数

-filter_complex ffmpeg滤镜功能

amix是混合多个音频到单个音频输出

inputs=3代表是3个音频文件,如果更多则代表对应数字

duration 确定最终输出文件的长度

longest(最长)|shortest(最短)|first(第一个文件)

dropout_transition

The transition time, in seconds, for volume renormalization when an input stream ends. The default value is 2 seconds.

-f mp3  输出文件格式

xxxsave.mp3 保存文件


在代码中使用(这里演示的为php的用法):

$amr = $dirname.$filename;   源文件路径

$mp3 = $dirname.$name.'_wgc.mp3'; 保存路径

$command = "/usr/local/bin/ffmpeg -i $amr $mp3";

system($command,$error);


返回结果:

成功返回0,

失败(命令不存在等原因) 返回 非0值


安装方法:

window:

        先去官网下载window版的ffmpeg, 把bin目录放到环境变量中,然后cmd,具体使用命令请自行百度

linux(centos),一般情况可以跳过: 

         安装依赖包

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

        创建编译源码的目录

mkdir ~/ffmpeg_sources


编译&安装

Note: 如果您不需要特定的编码器,可以跳过相关部分,然后删除编译ffmpeg 时相应的./configure选项。例如,如果不需要libvorbis ,可以跳过这一节,然后从安装ffmpeg的部分去掉--enable-libvorbis


yasm:汇编器,新版本的ffmpeg增加了汇编代码

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz 

tar -xzvf yasm-1.3.0.tar.gz 

cd yasm-1.3.0 && ./configure && make && make install


lame:Mp3音频解码

wget http://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz 

tar -xzvf lame-3.99.5.tar.gz 

cd lame-3.99.5 && ./configure && make && make install


amr支持

wget http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.3.tar.gz 

tar -xzvf opencore-amr-0.1.3.tar.gz 

cd opencore-amr-0.1.3 && ./configure && make && make install


amrnb支持

wget http://www.penguin.cz/~utx/ftp/amr/amrnb-11.0.0.0.tar.bz2 

tar -xjvf amrnb-11.0.0.0.tar.bz2 

cd amrnb-11.0.0.0 && ./configure && make && make install


amrwb支持

wget http://www.penguin.cz/~utx/ftp/amr/amrwb-11.0.0.0.tar.bz2 

tar -xjvf amrwb-11.0.0.0.tar.bz2 

cd amrwb-11.0.0.0 && ./configure && make && make install


x264


git clone https://code.videolan.org/videolan/x264.git

// 假设装在 xxx 目录下

 ./configure --disable-asm --enable-shared --enable-static --prefix=xxx

make && make install

// 然后在 xxx/share 下建一个 x264 目录,把 x264 源码目录下的 x264.pc 拷到 xxx/share/x264 下

export PKG_CONFIG_PATH=xxx/share/x264  

如上操作需要注意安装目录哦,如果需要安装其他特定的编码器可以自行百度然后编译ffmpeg时加入相应的./configure选项##

###如果需要安装其他特定的编码器可以自行百度然后编译ffmpeg时加入相应的./configure选项


ffmpeg: 最好去官网下载最新的安装包 FFmpeg 使用最新版注意命令操作名称

wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2

tar -xjvf ffmpeg-4.1.tar.bz2

cd ffmpeg-4.1

./configure --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 -enable-shared --enable-libx264  --enable-gpl

make && make install

加载配置,最后写入config后,终端运行ffmpeg命令,出现success和已安装的扩展,则运行成功。

ldconfig


附录:

ffmpeg默认安装目录为“/usr/local/lib”,有些64位系统下软件目录则为“/usr/lib64”,编译过程中可能会出现 

“ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory”等类似的错误,

解决办法是建立软链接:

ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0


No comments:

Post a Comment