背景

直接编译移植的ffmpeg是与 arm-linux 下类似的。

详情参考: arm linux 移植 FFMPEG库 + x264

host平台   :Ubuntu 16.04

x264  :20171212

ffmpeg   :4.0.1

gcc   :5.4.0

使用以下脚本编译

##
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/ # File Name: make.sh
# Created : Mon 02 Sep 2019 08:05:53 PM HKT
##
#!/bin/sh
BASE=`pwd`
BUILD_HOST=arm-linux
OUTPUT_PATH=${BASE}/install OTHER_LIB=${OUTPUT_PATH}/__all_without_ffmpeg make_dirs () {
#为了方便管理,创建有关的目录
cd ${BASE} && mkdir compressed install source -p
} tget () { #try wget
filename=`basename $1`
echo "Downloading [${filename}]..."
if [ ! -f ${filename} ];then
wget $1
fi echo "[OK] Downloaded [${filename}] "
} download_package () {
cd ${BASE}/compressed
tget http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20171212-2245.tar.bz2
tget http://ffmpeg.org/releases/ffmpeg-4.0.1.tar.bz2
tget http://download.videolan.org/videolan/x265/x265_2.6.tar.gz
} tar_package () {
cd ${BASE}/compressed
ls * > /tmp/list.txt
for TAR in `cat /tmp/list.txt`
do
tar -xf $TAR -C ../source
done
rm -rf /tmp/list.txt
} make_x264() {
cd ${BASE}/source/x264* CC=${BUILD_HOST}-gcc \
./configure \
--host=${BUILD_HOST} \
--enable-shared \
--enable-static \
--enable-pic \
--prefix=${OUTPUT_PATH}/x264 \
--cross-prefix=${BUILD_HOST}- \
--disable-asm make -j4 && make install
} make_x265() {
#sudo apt-get install cmake -y
# 其他编译选项可以 通过 在 cmake ../source 以后 ccmake ../source 可以查看 ( ccmake 可以通过 sudo apt-get install cmake-curses-gui 进行安装 )
cd ${BASE}/source/x265*/source
# 每次还原 CMakeLists 文件
if [ ! -f CMakeLists.txt.old ];then
# 不存在就创建
cp CMakeLists.txt CMakeLists.txt.old
else
# 存在就还原
cp CMakeLists.txt.old CMakeLists.txt
fi
# 获取 工具链所在位置 下面的操作为的是在 CMakeLists.txt 中插入下面内容
#set( CMAKE_SYSTEM_NAME Linux )
#set( CMAKE_SYSTEM_PROCESSOR ARM )
#set( CMAKE_C_COMPILER "/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin/arm-hisiv500-linux-gcc" )
#set( CMAKE_CXX_COMPILER "/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin/arm-hisiv500-linux-g++" )
#set( CMAKE_FIND_ROOT_PATH "/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin/" )
GCC_FULL_PATH=`whereis ${BUILD_HOST}-gcc | awk -F: '{ print $2 }' | awk '{print $1}'` # 防止多个结果
GCC_DIR=`dirname ${GCC_FULL_PATH}/`
sed -i "1i\set( CMAKE_SYSTEM_NAME Linux )" CMakeLists.txt
sed -i "2a\set( CMAKE_SYSTEM_PROCESSOR ARM )" CMakeLists.txt
sed -i "2a\set( CMAKE_C_COMPILER ${GCC_DIR}/${BUILD_HOST}-gcc )" CMakeLists.txt
sed -i "2a\set( CMAKE_CXX_COMPILER ${GCC_DIR}/${BUILD_HOST}-g++ )" CMakeLists.txt
sed -i "2a\set( CMAKE_FIND_ROOT_PATH ${GCC_DIR} )" CMakeLists.txt
cmake ../source
# 指定安装路径
sed -i "1i\set( CMAKE_INSTALL_PREFIX "${BASE}/install/x265" )" cmake_install.cmake
make && make install
}
prepare_other_lib () {
# 这一个是针对 ffmpeg 方便管理外部库使用的
# 核心思想是把 所有的库都放到一起,再让 ffmpeg ld的时候在这里找(而不是添加多行) --extra-cflags="-I${X264_DIR}/include -I${xxx}/include" \
cd ${BASE}/install/
rm ${OTHER_LIB} -rf
ls > /tmp/list.txt
mkdir ${OTHER_LIB} -p
for sub_dir in `cat /tmp/list.txt`
do
cp ${sub_dir}/* ${OTHER_LIB} -r -v
done
rm -rf /tmp/list.txt
}
make_ffmpeg() {
cd ${BASE}/source/ffmpeg*
./configure \
--cross-prefix=${BUILD_HOST}- \
--enable-cross-compile \
--target-os=linux \
--cc=${BUILD_HOST}-gcc \
--arch=arm \
--prefix=${OUTPUT_PATH}/ffmpeg \
--enable-shared \
--enable-static \
--enable-gpl \
--enable-nonfree \
--enable-ffmpeg \
--disable-ffplay \
--enable-swscale \
--enable-pthreads \
--disable-armv5te \
--disable-armv6 \
--disable-armv6t2 \
--disable-yasm \
--disable-stripping \
--enable-libx264 \
--extra-cflags=-I${OTHER_LIB}/include \
--extra-ldflags=-L${OTHER_LIB}/lib
make clean && make -j4 && make install
}
echo "Using ${BUILD_HOST}-gcc"
make_dirs
download_package
tar_package
make_x264
#make_x265
prepare_other_lib
make_ffmpeg exit $?
--enable-ffserver \
--enable-libx265 \

配置完成以后可能会有这个警告,但是不影响后续的结果:

License: nonfree and unredistributable
Creating configuration files ... WARNING: The --disable-yasm option is only provided for compatibility and will be
removed in the future. Use --enable-x86asm / --disable-x86asm instead.
WARNING: unknown architecture linux
WARNING: using libx264 without pkg-config

此后,就可以使用编译好的库进行开发,也可以根据需要将库拷贝到 /usr/lib目录下

测试:

 ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 /mnt/tmp/test.avi
# video4linux2 代表Linux下
# /dev/video0 代表摄像头设备
# /mnt/tmp/test.avi代表输出路径

Ubuntu 移植 ffmpeg + x264的更多相关文章

  1. Arm-Linux 移植 FFMPEG库 + x264

      背景: ffmpeg 中带有264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx26 ...

  2. 移植ffmpeg到VC环境心得

    所有想学习ffmpeg的网友有福了,大名鼎鼎的ffmpeg,移植到Windows的VC6版本全部开源,编译环境为VC6+SP5+VCPP5.别忘记了顶贴哦. 移植ffmpeg到windows,主要的修 ...

  3. 基于v4l2 ffmpeg x264的视频远程监控(附上编译好的库文件)

    说明:主要是基于ghostyu网友整理的< arm mini2440 基于v4l2 ffmpeg x264的视频远程监控>.自己做了一遍,遇到不少问题,就整理记录下来. 1.平台 硬件:a ...

  4. ffmpeg x264编译与使用介绍

    问题1:我用的是最新版本的ffmpeg和x264,刚刚编译出来,编译没有问题,但是在linux 环境使用ffmpeg的库时发现报错error C3861: 'UINT64_C': identifier ...

  5. 编译Android下可用的FFmpeg+x264

    编译Android下可用的FFmpeg+x264 编译x264: 下载最新版的x264 ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 1.解压 ...

  6. ubuntu下使用脚本交叉编译windows下使用的ffmpeg + X264

    这里主要是补充一些遇到的问题和解决方法. 2013-06 下旬 由于项目需要,重新编译ffmpeg+264+其他. 这里使用的环境Ubuntu 13.04,脚本依然是cross_compile_ffm ...

  7. arm linux 移植 ffmpeg 库 + x264

    背景 Ffmpeg 中带有h264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264. ...

  8. centos编译ffmpeg x264

    1.安装汇编编译器(一般系统自带吧).假设没有依照以下的命令安装吧 yum install yasm 2.使用最新x264源代码编译(仅仅支持编码)    在x264官网下载最新的代码http://w ...

  9. android编译ffmpeg+x264

    下载最新版的x264ftp://ftp.videolan.org/pub/videolan/x264/snapshots/1.解压到指定的目录2.切换当前目录为该目录3.创建一个shell脚本buil ...

随机推荐

  1. 【PAT甲级】1066 Root of AVL Tree (25 分)(AVL树建树模板)

    题意: 输入一个正整数N(<=20),接着输入N个结点的值,依次插入一颗AVL树,输出最终根结点的值. AAAAAccepted code: #define HAVE_STRUCT_TIMESP ...

  2. Atcoder Grand Contest 039B(思维,BFS)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int col[207],s[207],n;c ...

  3. 关系型数据库中的jsonfield字段的优劣

    本人并非专业,开发经验也不太足,有一次在弄一个user数据表时,需要增加一些字段,又懒得去修改数据,就索性把这些属性封装在一个类中,序列化为json数据,存放在数据库的一个字段中了,后来,发现这么做至 ...

  4. Spark操作MySQL,Hive并写入MySQL数据库

    最近一个项目,需要操作近70亿数据进行统计分析.如果存入MySQL,很难读取如此大的数据,即使使用搜索引擎,也是非常慢.经过调研决定借助我们公司大数据平台结合Spark技术完成这么大数据量的统计分析. ...

  5. Redis数据的导出和导入(dump和load方式)

    迁移redis数据一般有如下3种方式: 第三方工具redis-dump,redis-load aof机制,需要开启aof功能 rdb存储机制 这里介绍第一种方式,通过redis-dump导出数据,再通 ...

  6. Dart语言学习(十五) Dart函数方法

    Dart函数方法可分为两类: 一.内置方法/函数: print(); 二.自定义方法: 自定义方法的基本格式: 返回类型 方法名称(参数1,参数2,...){ 方法体 return 返回值; } vo ...

  7. Docker for windows修改默认镜像文件位置

    docker版本为18.06 windows上安装的docker其实本质上还是借助与windows平台的hyper-v技术来创建一个Linux虚拟机,你执行的所有命令其实都是在这个虚拟机里执行的,所以 ...

  8. RuntimeError: cuda runtime error (10) : invalid device ordinal

    This is caused by the unmatching of gpu device number when loading a saved model. torch.load('my_fil ...

  9. 汇编语言从入门到精通-5微机CPU的指令系统2

    微机CPU的指令系统 5.2.2 标志位操作指令 标志位操作指令是一组对标志位置位.复位.保存和恢复等操作的指令. 1.进位CF操作指令 a.清进位指令CLC(Clear Carry Flag):CF ...

  10. C++ STL之动态数组vector(⽮量)的使⽤

    写再最前面:摘录于柳神的笔记:   之前C语⾔⾥⾯⽤ int arr[] 定义数组,它的缺点是数组的⻓度不能随⼼所欲的改变,⽽C++⾥⾯有⼀个能完全替代数组的动态数组 vector (有的书⾥⾯把它翻 ...