2639|3

1239

帖子

66

TA的资源

纯净的硅(中级)

楼主
 

【米尔MYD-YA15XC-T评测】+ 使用ffmpeg音视频处理软件处理多媒体文件(上) [复制链接]

 

在多媒体音视频处理应用中一个常见的需求就是给视频或者图像叠加水印文字、图片logo等。以下是ffmpeg的介绍:

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 [1]  FFmpeg编码库可以使用GPU加速。

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了领先的音/视频编码库libavcodec等。
libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构
和读取音视频帧等功能;
libavcodec:用于各种类型声音/图像编解码;
libavutil:包含一些公共的工具函数;
libswscale:用于视频场景比例缩放、色彩映射转换;
libpostproc:用于后期效果处理;
ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
ffsever:一个 HTTP 多媒体即时广播串流服务器;
ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;

 

本次就打算使用ffmpeg进行中英文特殊字符水印、图片水印的叠加测试,首先在电脑端实现功能,然后交叉编译移植到米尔MYD-YA15XC-T平台,顺便定性对比下电脑和米尔MYD-YA15XC-T的多媒体处理性能。

在编译ffmpeg前需要先编译字体处理软件freetype,这里使用了freetype-2.10.2版本。

编译命令如下:

make clean
./configure --prefix=/opt/nrjd/nrjd-olms-0201/apps/aaa/comm/pc/freetype --with-zlib=no --with-png=no --enable-static=no
make -j12
make install
make clean

然后编译ffmpeg,指定freetype库和头文件路径:

make clean
./configure --enable-shared --disable-static --target-os=linux --enable-libx264 --enable-gpl --enable-libfreetype --enable-filter=drawtext --extra-cflags="-I/home/qldeng/ffmpeg_watermark_test/ffmpeg_test_pc/comm/pc/freetype/include/freetype2" --extra-ldflags="-L/home/qldeng/ffmpeg_watermark_test/ffmpeg_test_pc/comm/pc/freetype/lib" --prefix=/home/qldeng/ffmpeg_watermark_test/ffmpeg_test_pc/comm/pc/ffmpeg
make -j12
make install
make clean

项目文件夹内容如下:

qldeng@ubuntu:~/ffmpeg_watermark_test/ffmpeg_test_pc$ tree -L 2
.
├── build
├── CMakeLists.txt
├── comm
│   ├── ffmpeg-4.4
│   ├── freetype-2.10.2
│   └── pc
├── in.jpg
├── logo.png
├── main.cpp
├── out.jpg
├── readme.txt
├── SourceHanSansCN-Bold.ttf
├── toolchain.cmake
└── 捕获.PNG

5 directories, 9 files

测试项目使用CMake构建,CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.17)

#输出可执行文件的文件名
set(ARTIFACT_NAME myapp)

project(${ARTIFACT_NAME})

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD 99)

set(MYLIBS_PATH /opt/nrjd/nrjd-olms-0201/apps/ffmpeg_test_pc/comm/pc)

set(INC_DIR
        ${PROJECT_SOURCE_DIR}
        ${MYLIBS_PATH}/freetype/include/freetype2
        ${MYLIBS_PATH}/ffmpeg/include
        )

set(LINK_DIR
        ${MYLIBS_PATH}/freetype/lib
        ${MYLIBS_PATH}/ffmpeg/lib
        )

include_directories(${INC_DIR})

link_directories(${LINK_DIR})

aux_source_directory(${PROJECT_SOURCE_DIR} SOURCE_FILES)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})

link_libraries(
        freetype
        avcodec
        avdevice
        avfilter
        avformat
        avutil
        postproc
        swresample
        swscale
)

add_executable(${ARTIFACT_NAME} ${SOURCE_FILES})

target_link_libraries(${ARTIFACT_NAME}
        freetype
        avcodec
        avdevice
        avfilter
        avformat
        avutil
        postproc
        swresample
        swscale
        pthread)

main.cpp是测试代码,直接使用system函数调用ffmpeg即可,需要注意的是特殊符号需要转义:

    cmd = "ffmpeg -loglevel quiet -i " + string(dest_path) + " -vf drawtext=\"fontcolor=white:fontfile=SourceHanSansCN-Bold.ttf:fontsize=40:x=w-tw-th/2:y=h-th-th::alpha=0.65:box=1:boxcolor=0x000000:text='" + string(s5) + "\" -y " + string(dest_path);
    system(cmd.c_str());

 

        float battery_voltage = 12.345;
        float battery_current = 0.678;
        float device_temperature = 37.2;
        s1 = "日期\\:" + string(str) + "\"";
        memset(str, 0, sizeof(str));
        sprintf(str, "处理器\\:%0.1f\℃ 电源\\:%0.1fV %0.2fA CSQ\\:%d%%", device_temperature, battery_voltage,battery_current,64);
        s2 = string(str);

 

toolchain.cmake内容:

set(CMAKE_CXX_COMPILER g++)
set(CMAKE_C_COMPILER gcc)

进入build目录,打开终端执行以下命令进行编译:

cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ..
make

可以看到图片上叠加了预期的水印内容,处理时间183毫秒:

下一步就是眼睛就如何正确交叉编译ffmpeg到米尔MYD-YA15XC-T平台了,周六晚上折腾了半天,虽然编译出了命令行工具个库,但是放到米尔MYD-YA15XC-T里面无法运行,总是提示命令找不到,还得仔细研究下。

最新回复

和楼主学习一下Linux音视频处理。   详情 回复 发表于 2021-12-8 11:28
点赞 关注
 
 

回复
举报

1411

帖子

3

TA的资源

版主

沙发
 

感谢分享

 
 
 

回复

2万

帖子

71

TA的资源

管理员

板凳
 

好的,需要支持可以随时联系管理员哈

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

7671

帖子

18

TA的资源

五彩晶圆(高级)

4
 

和楼主学习一下Linux音视频处理。

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表