暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ffmpeg 问题记录

李二狗搞程序 2021-09-21
1500

0、示例代码

private void outputMp4() {
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".mp4";
    log.info("文件上传到文件服务器开始,文件名:{}", fileName);
try {
BufferedImage img = ImageIO.read(videos.get(0));
int width = img.getWidth();
int height = img.getHeight();
if (height % 2 != 0) {
height++;
}
if (width % 2 != 0) {
width++;
}
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(fileName, width, height);
        log.info("有异常");
// recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setVideoCodecName("libx264");
recorder.setFrameRate(15.0);
recorder.setVideoBitrate((int) ((width * height * 25.0) * 1 * 0.07));
recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
recorder.setFormat("mp4");
recorder.start();
log.info("2222222222");
OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();
for (File f : videos) {
opencv_core.IplImage image = cvLoadImage(f.getPath());
recorder.record(conveter.convert(image));
opencv_core.cvReleaseImage(image);
}
recorder.stop();
recorder.release();
File file = new File(fileName);
videoName = fileStorageOperate.fileStorageUploadFile(file);
log.info("文件上传到文件服务器完成,文件名:{}", fileName);
file.delete();
} catch (Exception e) {
        log.error("文件上传到文件服务器异常,文件名:{}", fileName);
log.info(e.getMessage());
try {
BufferedImage img = ImageIO.read(videos.get(0));
log.info(String.format("image1 width %d height %d", img.getWidth(), img.getHeight()));


} catch (IOException e1) {


log.info(e.getMessage());


}
}
}


抛出异常

avcodec_find_encoder() error_Video codec not found

解决方式:寻码方式更改

recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setVideoCodecName("libx264");

1、安装yasm编译器

在计算机领域中, Yasm是英特尔x86架构下的一个汇编器和反汇编器。它可以用来编写16位、32位(IA-32)和64位(x86-64)的程序。Yasm是一个完全重写的Netwide汇编器(NASM)。Yasm通常可以与NASM互换使用,并支持x86和x86-64架构。其许可协议为修订过的BSD许可证。截至2011年它由Peter Johnson和Michael Urman开发。

下载地址:https://yasm.tortall.net/Download.html

tar -xvzf yasm-1.3.0.tar.gz
cd yasm-1.3.0/
./configure
make && make install
yasm --version

2、安装x264 解码器

H.264是MPEG4的第十部分,是一个标准。对头,国际上两个视频专家组(VCEG和MPEG)合作提出的标准, 两个专家组各有各的叫法,所以既叫H.264,也叫AVC。x264是一个编码器,他参照的标准是H.264。对头,H.264是需要付费的编码格式, 而x264是符合H.264标准的一个开源项目,是免费的, 也就是H264的一个简化版,不支持某些高级特性。但x264非常优秀,并不比H264的商业编码器差。

下载地址:git clone http://git.videolan.org/git/x264.git

解压命令 安装 yum -y install bzip2 解压 tar -xvf x264-master.tar.bz2 重命名 mv x264-master x264

./configure --prefix=/usr/local/ffmpeg/x264 --enable-shared --enable-static --disable-asm
make && make install

3、安装ffmpeg

视频处理最常用的开源软件。它功能强大,用途广泛, 大量用于视频网站和商业软件(比如 Youtube 和 iTunes), 也是许多音频和视频格式的标准编码/解码实现。

下载地址:https://ffmpeg.org/download.html

解压命令
tar xvJf ffmpeg-4.1.tar.xz
重命名
mv ffmpeg-4.1 ffmpeg
./configure --prefix=/usr/local/ffmpeg/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/usr/local/ffmpeg/x264/include --extra-ldflags=-L/usr/local/ffmpeg/x264/lib
make && make install


4、完成验证

ffmpeg   ffplay
ffmpeg -version
cd /usr/local/ffmpeg/ffmpeg/bin
./ffmpeg -version 查看安装版本/是否安装成功【可选】
./ffmpeg -encoders |grep 264 检查是否安装H264成功
./ffmpeg -decoders |grep 246 检查是否安装H264成功


ffmpeg -decoders  //列出可用的解码器   H264  H265
ffmpeg -encoders //列出可用的编码器
ffmpeg -devices //列出可支持的设备

5、卸载

sudo make uninstall hash -r rm -rf 删除相关命令

6、问题解决

./ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory
./ffmpeg: error while loading shared libraries: libx264.so.161: cannot open shared object file: No such file or directory

打开这个文件

sudo vim /etc/ld.so.conf

在后面添加以下自己的路径

/usr/local/ffmpeg/ffmpeg/lib
/usr/local/ffmpeg/x264/lib

修改完了就保存,然后在运行

sudo ldconfig -v


文章转载自李二狗搞程序,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论