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下面的使用过程:

#安装官方库提供的版本,.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 - -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的版本,在官网找了Ubuntu14的PPA版本,按照他们的步骤装好了一试,报错:大概意思就是drawtext过滤器不存在,删了一些参数,发现aac的解码器也没有。大致的意思就是有一些依赖库没有自动装。看了看没找到怎么装,也不知道具体依赖库有哪些,放弃。

没办法了,只能试试手动编译了

#安装文档的步骤删了一些不要的库
sudo apt-get update
sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \
libsdl1.-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又能正常工作了。

完整编译过程:http://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu#CompilationInstallation

ffmpeg为视频添加时间戳 - 手动编译ffmpeg的更多相关文章

  1. (原)使用ass字幕文件通过ffmpeg给视频添加字幕的一些研究

    使用ass字幕文件通过ffmpeg给视频添加字幕的一些研究 Author:lihaiping1603@aliyun.com Create:2019-09-04 最近对ffmpeg给视频文件添加字幕效果 ...

  2. 使用ffmpeg给视频添加跑马灯效果(滚动字幕)

    直接上命令 从左往右滚 ffmpeg -i input.mp4 -vf "drawtext=text=string1 string2 string3 string4 string5 stri ...

  3. FFmpeg 向视频中添加文字

    原文地址:http://www.cnblogs.com/wanggang123/p/6707985.html FFmpeg支持添加文字功能,具体如何将文字叠加到视频中的每一张图片,FFmpeg调用了文 ...

  4. NET 2.0(C#)调用ffmpeg处理视频的方法

    另外:ffmpeg的net封装库 http://www.intuitive.sk/fflib/ NET 2.0 调用FFMPEG,并异步读取输出信息的代码...public void ConvertV ...

  5. Java使用FFmpeg处理视频文件指南

    Java使用FFmpeg处理视频文件指南 本文主要讲述如何使用Java + FFmpeg实现对视频文件的信息提取.码率压缩.分辨率转换等功能: 之前在网上浏览了一大圈Java使用FFmpeg处理音视频 ...

  6. linux下编译ffmpeg 引入外部库x264

    Found no assembler Minimum version is nasm-2.13 If you really want to compile without asm, configure ...

  7. Java使用FFmpeg处理视频文件的方法教程

    这篇文章主要给大家介绍了关于Java使用FFmpeg处理视频文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 前言 本文主要 ...

  8. VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时

    之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...

  9. ffmpeg处理视频与声音

    1.ffmpeg将mp4分解成多张jpg图片 要在游戏中播放视频,引擎竟然不支持.琢磨了一下,干脆将视频图片提取出来,然后用Animation动画类来播放这些图片,这样也能实现播放视频的效果.还是ff ...

随机推荐

  1. MyBatis源码分析-IDEA新建MyBatis源码工程

    MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简 ...

  2. rxjs5.X系列 —— filter系列 api 笔记

    欢迎指导与讨论 :) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第二篇 -- filter转换.如有错漏,希望大家指出提醒O(∩_∩)O.更详细的资料尽在rxjs官 ...

  3. angular js 在ie11 下的get请求缓存问题的解决办法

    使用angularjs 1.x开发的应用在ie11 下回碰到各种怪异的情况:一般表现在:卡,慢,丑. 还有另外一种情况,就是:get请求被缓存,导致页面数据没有刷新.今天我们就来解决这个问题. 几行代 ...

  4. C# 提交网页请求时出现如下错误: System.Net.WebException: 操作超时

    原因一: 连接超时时间 Timeout 以及写入Post数据超时时间 ReadWriteTimeout 设置得太短,一般要设置大于6000ms. 原因二: Expect100Continue 属性的值 ...

  5. 在 kernel 下打 log。 怪異現象與解決方式。

    code battery_log(BAT_LOG_CRTI, "y t: %d \n", (int)my_timer_timeout); battery_log(BAT_LOG_C ...

  6. U8采购订单联查采购入库单

    1.表头rdrecord01,字段ipurorderid(采购订单ID), cOrderCode(采购订单号)要与采购订单表头主键和单号对应 表体rdrecords01,字段cPOID(采购订单号), ...

  7. 理解OAuth 2.0

    转自:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛 ...

  8. Bzoj1305 [CQOI2009]dance跳舞

    Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 2925  Solved: 1221 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时 ...

  9. linux安装php

    接上篇:linux安装apache 一.安装php 先安装libxml2库 [root@ctxsdhy package]# yum -y install libxml2-devel 最新地址在:htt ...

  10. SWMM模型子汇水区划分的几种方法

    子汇水区的划分是SWMM模型建模的主要步骤之一,划分的好坏对结果精度有比较大的影响.概括来讲,子汇水区的划分有以下几种思路: (1)根据管网走向.建筑物和街道分布,直接人工划分子汇水区.这个方法适用于 ...