Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9086644
  • 博文数量: 1732
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19830
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1732)

文章存档

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Android平台

2017-05-11 16:14:14

http://www.cnblogs.com/leolztang/p/6217470.html

FFMPEG给视频加时间戳水印

项目中需要给视频添加时间戳,理所当然最好用的办法是ffmpeg。在找到正确的做法前,还被网上的答案timecode给水了一下(水的不轻,在这里转了2天),大概是这样写的:

ffmpeg -i wildlife.wmv -vf "drawtext=fontfile=arial.ttf: text='fuck': timecode='09\:57\:00\:00': r=25: \x=(w-tw)/1.5: y=h-(20*lh):fontcolor=white: box=1: boxcolor=0x00000000@1" -an -y out.wmv

 

转了一大圈,最后找到了答案, 在Ubuntu14.04LTS下面的使用过程:

复制代码
#安装官方库提供的版本,2.X的版本 sudo apt-get install ffmpeg

#添加时间戳的命令, 这串命令在实际应用中是用java生成的,然后使用process执行这个命令
ffmpeg -i "/input/input-video.mp4" -vf "drawtext=expansion=strftime:  basetime=$(date +%s -d '2016-12-19 16:27:50')000000 :text='%Y-%m-%d %H\\:%M\\:%S':fontsize=11:fontcolor=white:box=1:x=10:y=10:boxcolor=black@0.5:" -strict -2 -y "/output/output-video.mp4"
复制代码

其中:

  -i: 指定输入文件,这里使用的视频编码是H264, 音频编码是AAC

  -vf: 视频滤镜,使用了drawtext滤镜,basetime是视频时间戳的初始值,text是显示时间的格式,fontsize后面一串是关于水印的颜色、字体、背景等设置

  -strict -2:AAC的解码在2.x版本是试验性功能,需要加这个参数

  -y: 覆盖已经存在的输出文件

      最后一段是输出文件

问题来了:源视频的参数变化卡死了FFMPEG进程

这样相安无事的使用了一段时间,直到有一天发现服务器上的FFMPEG卡在那不动了,CPU占用率90%多。问了一下,录制视频的客户端确实改了一些东西,主要是视频码率和画面大小,音频参数没有改。先看看是什么导致卡死了,通过调整一些参数的方法,定位到了是音频导致卡死的(音频参数没动过,所以没法解释清楚为什么,只能猜是视频的变化影响了音频,反正MP4容器里面的东西一窍不通)。

ffmpeg -i "/input/input-video.mp4" -vf "drawtext=expansion=strftime:  basetime=$(date +%s -d '2016-12-19 16:27:50')000000 :text='%Y-%m-%d %H\\:%M\\:%S':fontsize=11:fontcolor=white:box=1:x=10:y=10:boxcolor=black@0.5:"-an -y "/output/output-video.mp4"

和原始命令不同的地方就是-strict -2换成了-an, -an表示不处理音频。这个时候视频又能正确的被处理了(只是没有声音)。问题是找到了,找来找去也没找到解决办法。

没招了,升级版本试试

先去Ubuntu16.04的系统上试了试,使用系统仓库的版本是2.8,也有同样的问题。

去官网看了看,官网都3.2了。果断去找3.2的版本,在官网找了,按照他们的步骤装好了一试,报错:大概意思就是drawtext过滤器不存在,删了一些参数,发现aac的解码器也没有。大致的意思就是有一些依赖库没有自动装。看了看没找到怎么装,也不知道具体依赖库有哪些,放弃。

没办法了,只能试试。

复制代码
#安装文档的步骤删了一些不要的库 sudo apt-get update sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \
  libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
  libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev

#要h264的库 sudo apt-get install libx264-dev

#要aac的库 sudo apt-get install libfdk-aac-dev

#configure,编译目的路径也懒得改了,最好还是改了,不然到时候ffmpeg安装到了~/bin目录下
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --pkg-config-flags="--static" \ --extra-cflags="-I$HOME/ffmpeg_build/include" \ --extra-ldflags="-L$HOME/ffmpeg_build/lib" \ --bindir="$HOME/bin" \ --enable-gpl \ --enable-libass \ --enable-libfdk-aac \ --enable-libfreetype \ --enable-libtheora \ --enable-libvorbis \ --enable-libx264 \ --enable-nonfree

PATH="$HOME/bin:$PATH" make make install make distclean

#更新一下profile,ffmpeg加入到了PATH
source ~/.profile
复制代码

重新运行了一下加水印的命令,ffmpeg又能正常工作了。

完整编译过程:

阅读(4984) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~