GVKun编程网logo

编译ffmpeg的时候出现ERROR: libx264 not found

16

在本文中,我们将详细介绍编译ffmpeg的时候出现ERROR:libx264notfound的各个方面,同时,我们也将为您带来关于2023-03-07:x264的视频编码器,不用ffmpeg,用lib

在本文中,我们将详细介绍编译ffmpeg的时候出现ERROR: libx264 not found的各个方面,同时,我们也将为您带来关于2023-03-07:x264的视频编码器,不用ffmpeg,用libx264.dll也行。请用go语言调用libx264.dll,将yuv文件编码成h264文件。、2023-03-08:x265的视频编码器,不用ffmpeg,用libx265.dll也行。请用go语言调用libx265.dll,将yuv文件编码成h265文件。、android ndk 编译ffmpeg、android – 如何解决“ERROR:libx264 not found”?的有用知识。

本文目录一览:

编译ffmpeg的时候出现ERROR: libx264 not found

编译ffmpeg的时候出现ERROR: libx264 not found

最近用Linux编译ffmpeg的时候出现了错误ERROR: libx264 not found

查看config.log原因如下

./x264/libx264.a(opencl.o): In function `x264_opencl_close_library'':
opencl.c:(.text+0x572): undefined reference to `dlclose''
./x264/libx264.a(opencl.o): In function `x264_opencl_load_library'':
opencl.c:(.text+0x5d7): undefined reference to `dlopen''
opencl.c:(.text+0x5f1): undefined reference to `dlsym''
opencl.c:(.text+0x60e): undefined reference to `dlsym''
opencl.c:(.text+0x62b): undefined reference to `dlsym''
opencl.c:(.text+0x648): undefined reference to `dlsym''
opencl.c:(.text+0x665): undefined reference to `dlsym''
./x264/libx264.a(opencl.o):opencl.c:(.text+0x682): more undefined references to `dlsym'' follow
./x264/libx264.a(opencl.o): In function `x264_opencl_load_library'':
opencl.c:(.text+0x8fd): undefined reference to `dlclose''
./x264/libx264.a(opencl.o): In function `x264_opencl_lookahead_init'':
opencl.c:(.text+0x1841): undefined reference to `dlopen''
opencl.c:(.text+0x185b): undefined reference to `dlsym''
opencl.c:(.text+0x186d): undefined reference to `dlsym''
opencl.c:(.text+0x1881): undefined reference to `dlsym''
opencl.c:(.text+0x1895): undefined reference to `dlsym''
opencl.c:(.text+0x18d4): undefined reference to `dlclose''
collect2: ld returned 1 exit status

查阅资料需要在ffmpeg编译的时候额外指定一下-ldl库

例如进入ffmpeg源码目录

./configure --enable-static --disable-shared \
--enable-encoder=libx264 --enable-libx264 --extra-libs=-ldl

重点在于

--extra-libs=-ldl

2023-03-07:x264的视频编码器,不用ffmpeg,用libx264.dll也行。请用go语言调用libx264.dll,将yuv文件编码成h264文件。

2023-03-07:x264的视频编码器,不用ffmpeg,用libx264.dll也行。请用go语言调用libx264.dll,将yuv文件编码成h264文件。

2023-03-07:x264的视频编码器,不用ffmpeg,用libx264.dll也行。请用go语言调用libx264.dll,将yuv文件编码成h264文件。

答案2023-03-07:

使用 github.com/moonfdd/x264-go 库,代码写在了这个库里。

这个库根据头文件编写,不依赖头文件。

执行命令:

go run ./examples/simplest_x264_encoder/main.go

参考了雷霄骅的基于libx264的视频编码器,代码用golang编写。代码如下:

// https://github.com/leixiaohua1020/simplest_encoder/blob/master/simplest_x264_encoder/simplest_x264_encoder.cpp
package main

import (
	"fmt"
	"os"
	"unsafe"

	"github.com/moonfdd/ffmpeg-go/ffcommon"
	"github.com/moonfdd/x264-go/libx264"
	"github.com/moonfdd/x264-go/libx264common"
)

func main0() ffcommon.FInt {

	var ret ffcommon.FInt
	var y_size ffcommon.FInt
	var i, j ffcommon.FInt

	//FILE* fp_src  = fopen("../cuc_ieschool_640x360_yuv444p.yuv", "rb");
	fp_src, _ := os.Open("./resources/cuc_ieschool_640x360_yuv420p.yuv")
	fp_dst_file := "./out/cuc_ieschool_640x360_yuv420p.h264"
	fp_dst, _ := os.Create(fp_dst_file)

	//Encode 50 frame
	//if set 0, encode all frame
	var frame_num ffcommon.FInt = 0
	var csp ffcommon.FInt = libx264.X264_CSP_I420
	var width, height ffcommon.FInt = 640, 360

	var iNal ffcommon.FInt = 0
	var pNals *libx264.X264NalT
	var pHandle *libx264.X264T
	pPic_in := new(libx264.X264PictureT)
	pPic_out := new(libx264.X264PictureT)
	pParam := new(libx264.X264ParamT)

	//Check
	if fp_src == nil || fp_dst == nil {
		fmt.Printf("Error open files.\n")
		return -1
	}

	pParam.X264ParamDefault()
	pParam.IWidth = width
	pParam.IHeight = height
	/*
		//Param
		pParam->i_log_level  = X264_LOG_DEBUG;
		pParam->i_threads  = X264_SYNC_LOOKAHEAD_AUTO;
		pParam->i_frame_total = 0;
		pParam->i_keyint_max = 10;
		pParam->i_bframe  = 5;
		pParam->b_open_gop  = 0;
		pParam->i_bframe_pyramid = 0;
		pParam->rc.i_qp_constant=0;
		pParam->rc.i_qp_max=0;
		pParam->rc.i_qp_min=0;
		pParam->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
		pParam->i_fps_den  = 1;
		pParam->i_fps_num  = 25;
		pParam->i_timebase_den = pParam->i_fps_num;
		pParam->i_timebase_num = pParam->i_fps_den;
	*/
	pParam.ICsp = csp
	pParam.X264ParamApplyProfile(libx264.X264ProfileNames[5])

	pHandle = pParam.X264EncoderOpen164()

	pPic_out.X264PictureInit()
	pPic_in.X264PictureAlloc(csp, pParam.IWidth, pParam.IHeight)

	//ret = x264_encoder_headers(pHandle, &pNals, &iNal);

	y_size = pParam.IWidth * pParam.IHeight
	//detect frame number
	if frame_num == 0 {
		fi, _ := fp_src.Stat()
		switch csp {
		case libx264.X264_CSP_I444:
			frame_num = int32(fi.Size()) / (y_size * 3)
		case libx264.X264_CSP_I420:
			frame_num = int32(fi.Size()) / (y_size * 3 / 2)
		default:
			fmt.Printf("Colorspace Not Support.\n")
			return -1
		}
	}

	//Loop to Encode
	for i = 0; i < frame_num; i++ {
		switch csp {
		case libx264.X264_CSP_I444:

			fp_src.Read(ffcommon.ByteSliceFromByteP(pPic_in.Img.Plane[0], int(y_size))) //Y
			fp_src.Read(ffcommon.ByteSliceFromByteP(pPic_in.Img.Plane[1], int(y_size))) //U
			fp_src.Read(ffcommon.ByteSliceFromByteP(pPic_in.Img.Plane[2], int(y_size))) //V

		case libx264.X264_CSP_I420:

			fp_src.Read(ffcommon.ByteSliceFromByteP(pPic_in.Img.Plane[0], int(y_size)))   //Y
			fp_src.Read(ffcommon.ByteSliceFromByteP(pPic_in.Img.Plane[1], int(y_size/4))) //U
			fp_src.Read(ffcommon.ByteSliceFromByteP(pPic_in.Img.Plane[2], int(y_size/4))) //V

		default:

			fmt.Printf("Colorspace Not Support.\n")
			return -1

		}
		pPic_in.IPts = int64(i)

		ret = pHandle.X264EncoderEncode(&pNals, &iNal, pPic_in, pPic_out)
		if ret < 0 {
			fmt.Printf("Error.\n")
			return -1
		}

		fmt.Printf("Succeed encode frame: %5d\n", i)

		for j = 0; j < iNal; j++ {
			a := unsafe.Sizeof(libx264.X264NalT{})
			pNal := (*libx264.X264NalT)(unsafe.Pointer(uintptr(unsafe.Pointer(pNals)) + uintptr(a*uintptr(j))))
			fp_dst.Write(ffcommon.ByteSliceFromByteP(pNal.PPayload, int(pNal.IPayload)))
		}
	}
	i = 0
	//flush encoder
	for {
		ret = pHandle.X264EncoderEncode(&pNals, &iNal, nil, pPic_out)
		if ret == 0 {
			break
		}
		fmt.Printf("Flush 1 frame.\n")
		for j = 0; j < iNal; j++ {
			a := unsafe.Sizeof(libx264.X264NalT{})
			pNal := (*libx264.X264NalT)(unsafe.Pointer(uintptr(unsafe.Pointer(pNals)) + uintptr(a*uintptr(j))))
			fp_dst.Write(ffcommon.ByteSliceFromByteP(pNal.PPayload, int(pNal.IPayload)))
		}
		i++
	}
	pPic_in.X264PictureClean()
	pHandle.X264EncoderClose()
	pHandle = nil

	fp_src.Close()
	fp_dst.Close()

	fmt.Printf("\nffplay %s\n", fp_dst_file)

	return 0
}

func main() {
	fmt.Println(libx264.X264_POINTVER)
	os.Setenv("Path", os.Getenv("Path")+";./lib")
	libx264common.SetLibx264Path("./lib/libx264-164.dll")
	main0()
}

在这里插入图片描述 在这里插入图片描述

2023-03-08:x265的视频编码器,不用ffmpeg,用libx265.dll也行。请用go语言调用libx265.dll,将yuv文件编码成h265文件。

2023-03-08:x265的视频编码器,不用ffmpeg,用libx265.dll也行。请用go语言调用libx265.dll,将yuv文件编码成h265文件。

2023-03-08:x265的视频编码器,不用ffmpeg,用libx265.dll也行。请用go语言调用libx265.dll,将yuv文件编码成h265文件。

答案2023-03-08:

使用 github.com/moonfdd/x265-go 库,代码写在了这个库里。

这个库根据头文件编写,不依赖头文件。

执行命令:

go run ./examples/simplest_x265_encoder/main.go

参考了雷霄骅的基于libx265的视频编码器,代码用golang编写。代码如下:

// https://github.com/leixiaohua1020/simplest_encoder/blob/master/simplest_x265_encoder/simplest_x265_encoder.cpp
package main

import (
	"fmt"
	"os"
	"unsafe"

	"github.com/moonfdd/ffmpeg-go/ffcommon"
	"github.com/moonfdd/x265-go/libx265"
	"github.com/moonfdd/x265-go/libx265common"
)

func main0() ffcommon.FInt {

	var i, j ffcommon.FInt
	var ret ffcommon.FInt
	var y_size ffcommon.FInt
	var buff []byte

	//FILE* fp_src  = fopen("../cuc_ieschool_640x360_yuv444p.yuv", "rb");
	fp_src, _ := os.Open("./resources/cuc_ieschool_640x360_yuv420p.yuv")
	fp_dst_file := "./out/cuc_ieschool_640x360_yuv420p.h265"
	fp_dst, _ := os.Create(fp_dst_file)

	var pNals *libx265.X265Nal
	var iNal ffcommon.FUint32T = 0

	var pParam *libx265.X265Param
	var pHandle *libx265.X265Encoder
	var pPic_in *libx265.X265Picture

	//Encode 50 frame
	//if set 0, encode all frame
	var frame_num ffcommon.FInt = 0
	var csp ffcommon.FInt = libx265.X265_CSP_I420
	var width, height ffcommon.FInt = 640, 360

	//Check
	if fp_src == nil || fp_dst == nil {
		fmt.Printf("Error open files.\n")
		return -1
	}

	pParam = libx265.X265ParamAlloc()
	pParam.X265ParamDefault()
	pParam.BRepeatHeaders = 1 //write sps,pps before keyframe
	pParam.InternalCsp = csp
	pParam.SourceWidth = width
	pParam.SourceHeight = height
	pParam.FpsNum = 25
	pParam.FpsDenom = 1
	//Init
	pHandle = pParam.X265EncoderOpen207()
	if pHandle == nil {
		fmt.Printf("x265_encoder_open err\n")
		return 0
	}
	y_size = pParam.SourceWidth * pParam.SourceHeight

	pPic_in = libx265.X265PictureAlloc()
	pParam.X265PictureInit(pPic_in)
	if frame_num == 0 {
		fi, _ := fp_src.Stat()
		switch csp {
		case libx265.X265_CSP_I444:
			buff = make([]byte, y_size*3)
			frame_num = int32(fi.Size()) / (y_size * 3)
			pPic_in.Planes[0] = uintptr(unsafe.Pointer(&buff[0]))
			pPic_in.Planes[1] = uintptr(unsafe.Pointer(&buff[0])) + uintptr(y_size)
			pPic_in.Planes[2] = uintptr(unsafe.Pointer(&buff[0])) + uintptr(y_size*2)
			pPic_in.Stride[0] = width
			pPic_in.Stride[1] = width
			pPic_in.Stride[2] = width
		case libx265.X265_CSP_I420:
			buff = make([]byte, y_size*3/2)
			frame_num = int32(fi.Size()) / (y_size * 3 / 2)
			pPic_in.Planes[0] = uintptr(unsafe.Pointer(&buff[0]))
			pPic_in.Planes[1] = uintptr(unsafe.Pointer(&buff[0])) + uintptr(y_size)
			pPic_in.Planes[2] = uintptr(unsafe.Pointer(&buff[0])) + uintptr(y_size*5/4)
			pPic_in.Stride[0] = width
			pPic_in.Stride[1] = width / 2
			pPic_in.Stride[2] = width / 2
		default:
			fmt.Printf("Colorspace Not Support.\n")
			return -1
		}
	}

	//Loop to Encode
	for i = 0; i < frame_num; i++ {
		switch csp {
		case libx265.X265_CSP_I444:

			fp_src.Read(ffcommon.ByteSliceFromByteP((*byte)(unsafe.Pointer(pPic_in.Planes[0])), int(y_size))) //Y
			fp_src.Read(ffcommon.ByteSliceFromByteP((*byte)(unsafe.Pointer(pPic_in.Planes[1])), int(y_size))) //U
			fp_src.Read(ffcommon.ByteSliceFromByteP((*byte)(unsafe.Pointer(pPic_in.Planes[2])), int(y_size))) //V

		case libx265.X265_CSP_I420:

			fp_src.Read(ffcommon.ByteSliceFromByteP((*byte)(unsafe.Pointer(pPic_in.Planes[0])), int(y_size)))   //Y
			fp_src.Read(ffcommon.ByteSliceFromByteP((*byte)(unsafe.Pointer(pPic_in.Planes[1])), int(y_size/4))) //U
			fp_src.Read(ffcommon.ByteSliceFromByteP((*byte)(unsafe.Pointer(pPic_in.Planes[2])), int(y_size/4))) //V

		default:

			fmt.Printf("Colorspace Not Support.\n")
			return -1

		}

		ret = pHandle.X265EncoderEncode(&pNals, &iNal, pPic_in, nil)
		fmt.Printf("Succeed encode frame: %5d\n", i)

		for j = 0; j < int32(iNal); j++ {
			a := unsafe.Sizeof(libx265.X265Nal{})
			pNal := (*libx265.X265Nal)(unsafe.Pointer(uintptr(unsafe.Pointer(pNals)) + uintptr(a*uintptr(j))))
			fp_dst.Write(ffcommon.ByteSliceFromByteP(pNal.Payload, int(pNal.SizeBytes)))
		}
	}
	//flush encoder
	for {
		ret = pHandle.X265EncoderEncode(&pNals, &iNal, nil, nil)
		if ret == 0 {
			break
		}
		fmt.Printf("Flush 1 frame.\n")
		for j = 0; j < int32(iNal); j++ {
			a := unsafe.Sizeof(libx265.X265Nal{})
			pNal := (*libx265.X265Nal)(unsafe.Pointer(uintptr(unsafe.Pointer(pNals)) + uintptr(a*uintptr(j))))
			fp_dst.Write(ffcommon.ByteSliceFromByteP(pNal.Payload, int(pNal.SizeBytes)))
		}
		i++
	}
	pHandle.X265EncoderClose()
	pPic_in.X265PictureFree()
	pParam.X265ParamFree()

	fp_src.Close()
	fp_dst.Close()

	fmt.Printf("\nffplay %s\n", fp_dst_file)

	return 0
}

func main() {
	os.Setenv("Path", os.Getenv("Path")+";./lib")
	libx265common.SetLibx265Path("./lib/libx265.dll")
	main0()
}

在这里插入图片描述 在这里插入图片描述

android ndk 编译ffmpeg

android ndk 编译ffmpeg

这是我在win7下用cygwin和android-ndk-r8c版本编译ffmpeg0.10时出现的错误,哪位大神帮我解决下,急

如果可以的话,加我QQ:385815345,指点下,小弟不胜感激

$ ./config.sh

./config.sh: line 1: #!/bin/bash: No such file or directory
".known option "
See ./configure --help for available options.
./config.sh: line 6: --target-os=linux: command not found
./config.sh: line 7: --arch=arm: command not found
./config.sh: line 8: --enable-version3: command not found
./config.sh: line 9: --enable-gpl: command not found
./config.sh: line 10: --enable-nonfree: command not found
./config.sh: line 11: --disable-stripping: command not found
./config.sh: line 12: --disable-ffmpeg: command not found
./config.sh: line 13: --disable-ffplay: command not found
./config.sh: line 14: --disable-ffserver: command not found
./config.sh: line 15: --disable-ffprobe: command not found
./config.sh: line 16: --disable-encoders: command not found
./config.sh: line 17: --disable-muxers: command not found
./config.sh: line 18: --disable-devices: command not found
./config.sh: line 19: --disable-protocols: command not found
./config.sh: line 20: --enable-protocol=file: command not found
./config.sh: line 21: --enable-avfilter: command not found
./config.sh: line 22: --disable-network: command not found
./config.sh: line 23: --disable-mpegaudio-hp: command not found
./config.sh: line 24: --disable-avdevice: command not found
./config.sh: line 25: --enable-cross-compile: command not found
/bin/arm-linux-androideabi-gcc: No such file or directory
/bin/arm-linux-androideabi-: No such file or directoryoid-ndk-r8c
/bin/arm-linux-androideabi-nm: No such file or directory
./config.sh: line 29: --extra-cflags=-fPIC -DANDROID: command not found
./config.sh: line 30: --disable-asm: command not found
./config.sh: line 31: --enable-neon: command not found
./config.sh: line 32: --enable-armv5te: command not found
/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x -Wl,-rpath-link=/home/S                                                                                                                /lib/gcc/arm-linux-androideabi/4.6/crtend.o -lc -lm -ldl: No such file or direct                                                                                                                ory

android – 如何解决“ERROR:libx264 not found”?

android – 如何解决“ERROR:libx264 not found”?

我需要安装ffmpeg,支持libx264以启用H.264编码.我使用android-ndk-r9d中提供的工具链使用下面的脚本成功安装了libx264.

 #!/bin/bash
 NDK=~/android-ndk-r9d
 SYSROOT=$NDK/platforms/android-8/arch-arm/
 TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64
 function build_one
 {
 ./configure \
 --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
 --sysroot="$SYSROOT" \
 --host=arm-linux \
 --enable-pic \
 --enable-shared \
 --disable-cli
 make clean
 make
 make install
 }
 build_one 

现在我想用libx264支持构建ffmpeg.我在下面的脚本中使用了以下脚本–enable-libx264, – enable-nonfree, – enable-gpl选项.

#!/bin/bash
NDK=~/android-ndk-r9d
SYSROOT=$NDK/platforms/android-8/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-nonfree \
--enable-gpl \
--enable-libx264 \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONfigURE_FLAG
make clean
make
make install
}
cpu=arm
PREFIX=$(pwd)/android/$cpu
ADDI_CFLAGS="-marm"
build_one

但是当我运行脚本时,我收到错误“ERROR:libx264 not found”.

我想ffmpeg无法弄清楚libx264的安装位置.安装libx264后,我在/usr/local/bin中的/usr/local/lib可执行文件中有libx264.so文件,在/usr/local/include目录下有头文件.

我需要对ffmpeg构建脚本进行所有更改才能使其检测到libx264?

注意:我使用Ubuntu 12.04(64位)进行交叉编译.

解决方法:

确保你的$ADDI_CFLAGS变量(你传入–extra-cflags)包含-I /usr/local/include

我们今天的关于编译ffmpeg的时候出现ERROR: libx264 not found的分享就到这里,谢谢您的阅读,如果想了解更多关于2023-03-07:x264的视频编码器,不用ffmpeg,用libx264.dll也行。请用go语言调用libx264.dll,将yuv文件编码成h264文件。、2023-03-08:x265的视频编码器,不用ffmpeg,用libx265.dll也行。请用go语言调用libx265.dll,将yuv文件编码成h265文件。、android ndk 编译ffmpeg、android – 如何解决“ERROR:libx264 not found”?的相关信息,可以在本站进行搜索。

本文标签: