请选择 进入手机版 | 继续访问电脑版

北南南北论坛

 找回密码
 立即注册
查看: 38|回复: 0

ffmpeg为视频添加时间戳 - 手动编译ffmpeg

[复制链接]

233

主题

334

帖子

1004

积分

金牌会员

Rank: 6Rank: 6

积分
1004
发表于 2017-11-11 19:48:29 | 显示全部楼层 |阅读模式
在Ubuntu14.04LTS下面的使用过程:

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

  3. #添加时间戳的命令, 这串命令在实际应用中是用java生成的,然后使用process执行这个命令
  4. 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容器里面的东西一窍不通)。


  1. 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的版本,在官网找了Ubuntu14的PPA版本,按照他们的步骤装好了一试,报错:大概意思就是drawtext过滤器不存在,删了一些参数,发现aac的解码器也没有。大致的意思就是有一些依赖库没有自动装。看了看没找到怎么装,也不知道具体依赖库有哪些,放弃。
没办法了,只能试试手动编译了
  1. #安装文档的步骤删了一些不要的库
  2. sudo apt-get update
  3. sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \
  4.   libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
  5.   libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev

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

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

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

  25. PATH="$HOME/bin:$PATH" make

  26. make install

  27. make distclean

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

重新运行了一下加水印的命令,ffmpeg又能正常工作了。
完整编译过程:http://trac.ffmpeg.org/wiki/Comp ... ilationInstallation


回复

使用道具 举报

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

本版积分规则


手机版|北南南北论坛  

GMT+8, 2017-12-18 09:21 , Processed in 0.066315 second(s), 31 queries .

© 2001-2016 VxWorks6 Inc.

快速回复 返回顶部 返回列表