linux【redhat&ubuntu】下ffmpeg-3.1安装编译及视频转码
来源:互联网 发布:淘宝网店供应商 编辑:程序博客网 时间:2024/06/03 15:17
一 ffmpeg编译安装
原文网址:https://www.cnblogs.com/miaosha5s/p/7670447.html
# wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz# tar -zxvf ffmpeg-3.1.tar.gz# cd ffmpeg-3.1# ./configure --prefix=/usr/local/ffmpeg# make && make install 等待安装完成... # vi /etc/profile在最后PATH添加环境变量:PATH=$PATH:/usr/local/ffmpeg/binexport PATH保存退出 # source /ect/profile 设置生效# ffmpeg -version 查看版本
注意:
若安装过程中出现以下错误:
yasm/nasm not found or too old. Use –disable-yasm for a crippled build.
If you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file “config.log” produced by configure as this will help
solve the problem.
如错误提示,yasm未安装或者版本太老了,需要安装新版的yasm
# wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
# tar -zxvf yasm-1.3.0.tar.gz
# cd yasm-1.3.0
# ./configure
# make && make install
问题:在其他机器安装时,还遇到了下面的几个问题,可供参考:
1、使用./configure 时,出现:
If gcc is a cross-compiler, use the --enable-cross-compile option.Only do this if you know what cross compiling means.C compiler test failed.
If you think configure made a mistake, make sure you are using the latestversion from Git. If the latest version fails, report the problem to theffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.Include the log file "config.log" produced by configure as this will helpsolve the problem.提示是gcc的问题,并提示了可以查看config.log。cat config.log 查看错误信息如下【这里只粘贴最后的错误信息】:
END /tmp/ffconf.A6YIvVF3.cgcc -c -o /tmp/ffconf.kvhyNUCz.o /tmp/ffconf.A6YIvVF3.c./configure: line 875: gcc: command not foundC compiler test failed.显然,是没有找到gcc命令。。 通过yum 或 apt-get命令安装即可,之后再进行./configure ,便可以继续安装
2、运行./configure 会报错,错误提示为:
configure: error: C++ preprocessor “/lib/cpp” sanity check
check See `config.log’ for more details
解决办法:出现该情况是由于c++编译器的相关package没有安装,在终端上执行:
$ sudo yum install glibc-headers gcc-c++
windows下的编译步骤,参考:http://blog.csdn.net/zhouyongku/article/details/44961447
二 、视频转码命令
由于需求的来源是要把h264裸流转换成mp4,好供前端页面进行播放(js的视频播放器支持的格式比较有限。。由于开发时间紧张,所以也没有足够的经历自己开发或找到现成的播放器,所以暂时只能采用编码的方案)。
ffmpeg命令:264转mp4
ffmpeg -i slamtv60.264 -vcodec copy -f mp4 test.mp4
执行中打印的信息如下:
ffmpeg version 3.1 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11) configuration: --prefix=/usr/local/ffmpeg libavutil 55. 27.100 / 55. 27.100 libavcodec 57. 48.101 / 57. 48.101 libavformat 57. 40.101 / 57. 40.101 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 46.102 / 6. 46.102 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 1.100 / 2. 1.100Input #0, h264, from 'slamtv60.264': Duration: N/A, bitrate: N/A Stream #0:0: Video: h264 (Main), yuv420p, 384x288, 25.50 fps, 25.50 tbr, 1200k tbn, 51 tbcFile 'test.mp4' already exists. Overwrite ? [y/N] y[mp4 @ 0x3913260] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.Output #0, mp4, to 'test.mp4': Metadata: encoder : Lavf57.40.101 Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 384x288, q=2-31, 25.50 fps, 25.50 tbr, 1200k tbn, 1200k tbcStream mapping: Stream #0:0 -> #0:0 (copy)Press [q] to stop, [?] for help[mp4 @ 0x3913260] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properlyframe= 1479 fps=0.0 q=-1.0 Lsize= 4890kB time=00:00:58.31 bitrate= 687.0kbits/s speed=2.41e+03x video:4884kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.139057%转换速度还是很快的,5M的一个.264文件,转换成mp4耗时在毫秒级。【不过是在配置较高的机器,x86_64,8核内存20G的服务器】
三 Java代码调用命令
使用的还是简单的java中执行shell命令的方法,考虑到都在java中实现的话可以在一个任务中完成操作,不必在使用shell衔接,增加复杂度。
代码如下:
package schedule;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class FfmpegTranscode {public static void runCmd(String command) {try {Runtime rt = Runtime.getRuntime();Process proc = rt.exec(command);InputStream stderr = proc.getErrorStream();InputStreamReader isr = new InputStreamReader(stderr);BufferedReader br = new BufferedReader(isr);String line = null;System.out.println("<LogInfo>");while ((line = br.readLine()) != null){System.out.println(line);}System.out.println("</LogInfo>");int exitVal = proc.waitFor();System.out.println("Process exitValue: " + exitVal);} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {if(args.length<2) {System.out.println("请输入源文件和输出文件位置,源文件为264,输出mp4! ");return;}String h264Path = args[0];String mp4Path = args[1];System.out.println("执行转码:"+h264Path +" "+mp4Path);String videoCommand = "ffmpeg -i "+h264Path+" -vcodec copy -f mp4 "+mp4Path;System.out.println(videoCommand);runCmd(videoCommand);}}
执行时,需要在有ffmpeg的环境下运行。可以打成jar包后,上传到上面已安装ffmpeg的机器,通过命令:
java -jar ffmpegtools.jar ./slamtv60.264 ./slamtv60.mp4 的方式执行(slamtv60.264替换成自己的264文件)
四 、流数据转换【待续-研究中】
虽然【二】中已经实现了文件的转换,但更希望可以直接针对流数据进行处理,可以减少存储文件和读取的时间;直接把h264的流处理成mp4流后再写入指定位置。
http://blog.csdn.net/firehood_/article/details/8813587
- linux【redhat&ubuntu】下ffmpeg-3.1安装编译及视频转码
- ubuntu下ffmpeg编译安装
- ubuntu下ffmpeg编译安装
- ubuntu下ffmpeg编译安装
- Ubuntu下编译安装FFmpeg
- Ubuntu 下编译安装FFmpeg
- ubuntu下FFMPEG编译安装
- ubuntu下FFMPEG编译安装
- Ubuntu(linux) 下编译ffmpeg
- linux下编译安装ffmpeg
- Linux下编译安装ffmpeg
- linux下安装编译ffmpeg
- Linux下 FFmpeg 编译安装
- linux下编译安装ffmpeg
- 【ffmpeg学习记录】ubuntu下编译ffmpeg及ffmpeg-tutorial
- Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结
- Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结
- Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结
- Java多线程总结(二):线程阻塞与线程控制
- mysql触发器
- 2.2 一往直前! 贪心法
- Android工具之屏蔽两个页面切换时的动画
- grep
- linux【redhat&ubuntu】下ffmpeg-3.1安装编译及视频转码
- 配置spring boot项目可能出现的问题
- 机器学习之-搞定支持向量机(SVM)【人工智能工程师--AI转型必修课】
- 正则匹配数组全部是数字
- 欢迎使用CSDN-markdown编辑器
- Linus发飙了!
- 正整数validate验证
- JSON
- swift4.0 Xcode9 framework加载xib文件