音视频命令转换工具 - FFmpeg
随着自媒体兴起,许多人会自拍视频或者找视频素材裁剪,配上背景音乐或解说,加上各种特效边框,处理后再生成新的视频文件,发布到各大平台。生成的原始视频文件都很大,我们需要转换格式或者压缩大小,便于上传或者在其他如手机等设备上分享。
1.FFmpeg 介绍
FFmpeg是一款开源免费的多媒体视频处理工具,功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。它提供了录制、转换以及流化音视频的完整解决方案。
FFmpeg项目在开源界的影响力也是数一数二的。几乎你所见到的视频转换软件或播放器中用到的功能或编码/解码都基于FFmpeg。它采用LGPL或GPL许可证,曾今国内某些知名播放器使用FFmpeg源码未声明,被FFmpeg钉在历史的耻辱柱上。
2.FFmpeg 安装
FFmpeg提供源码,可自行编译。几乎所有发行版Linux仓库中已有FFmpeg,可以直接安装。
# debian/ubuntu apt install ffmpeg # redhat/centos/fedora' yum install ffmpeg 或 dnf install ffmpeg 复制代码
FFmpeg官方也提供二进制包:ffmpeg.org/download.ht…
推荐使用FFmpeg官方static二进制包,无需额外动态库,仅一个可执行文件官网下载后的FFmpeg解压后有三个可执行文件:ffmpeg、ffprobe、ffplay。
3.FFmpeg 使用
官网下载后的FFmpeg解压后有三个可执行文件:
ffmpeg:音视频文件处理转换
ffprobe:读取视频文件信息
ffplay:一个简易的播放器
3.1ffmpeg命令:
ffmpeg -i video.wma ./video.mp4
把 video.wma 视频文件转换成 mp4 格式。ffmpeg mp4 格式默认使用h264编码
ffmpeg -i video.wma -c:v libx265 video.mp4
把 video.wma 视频文件转换成 h265 编码的 mp4 格式。
h265比h264编码有更高的压缩率,在低码率下生成的文件更小。 也就是说,相同质量下的h265编码比h264更清晰。相同大小的视频文件,h265编码比h264编码的视频文件体积更小。但是当视频码率到达一定大小时,两者清晰度区别不大。 h264比h265有更好的兼容性,有些手机默认不支持h265编码的视频文件,需要借助软件解码。 视频转换,h265编码比h264编码用时会更长,更消耗CPU资源。
ffmpeg -i video.mp4 -s 1280x720 video2.mp4
将视频压缩到1280x720分辨率。
ffmpeg -i video.mp4 -ss 00:00:10 -i video.mp4 -t 00:00:30 -c:v copy -c:a copy cut.mp4
不改变视频和音频的编码截剪视频,保留从视频10秒之后开始30秒,因为音频视频编码指定参数值copy,不会影响视频质量。
使用ss参数一定要在-i之前,如果写在-i之后,ffmpeg会理解为起始点是作用于输出文件。
ffmpeg -i video.mp4 -metadata:s:v rotate="90" -c:v copy -c:a copy out.mp4
不改变视频和音频的质量将视频翻转90度。把横屏变竖屏。
ffmpeg -f x11grab -r 30 -i :0.0 -f alsa -i hw:0,0 -acodec aac -vcodec libx264 out.mkv
使用FFmpeg录像,该命令在Linux上有效。每秒30帧,音频格式使用 aac,视频格式使用h264,输出mkv格式。
vcodec 与 c:v 参数一样,指定视频编码,如:libx264,libx265 acodec 与 c:a 参数一样,指定音频编码,如:aac,mp4,flac
FFmpeg还有很多其他用法,比如调整码率,帧数等。使用 ffmpeg --help 可以看到全部参数说明。
3.2GPU加速
FFmpeg默认使用CPU编码。执行ffmpeg命令时,资源管理器可以看到CPU使用率升高。
如果使用GPU运算,转换速度能成倍提高,特别是转换h265编码视频。
查看ffmpeg支持视频编码格式:
ffmpeg -codecs 复制代码
找到 hevc ,也就是h265编码:
hevc_qsv:intel核显
hevc_nvenc:nvidia显卡
hevc_amf:amd显卡
如果使用h264编码,使用 h264_qsv / h264_nvenc 。
ffmpeg -i ./video.mp4 -c:v hevc_qsv ./out.mp4
使用GPU编码,运行以上ffmpeg命令,可以看到GPU占用率升高。
使用GPU加速视频转换速度快了很多,我仅使用核显速度也比CPU转码也能快数倍。
3.3ffprobe命令
ffprobe ./video.mp4
查看视频文件信息。
从输出信息可以看到该视频文件是使用h264编码,分辨率1280x720,视频平均码率921kbps,24帧。视频的音频使用aac编码,采样率44100Hz,码率128kpbs。
ffprobe -v error -show_streams -print_format json ./video.mp4
使用json格式输出视频信息。
3.4ffplay命令
ffplay ./video.mp4
播放视频文件。这时会弹出一个播放器。
ffplay命令还有很多控制参数。不过我觉得用处不大,毕竟图形化播放器更好用,功能也更强大。
4.开发集成
使用FFmpeg命令,我们可以用程序或脚本完成视频自动转换。也可以让我们开发的系统拥有视频转码,或读取视频信息的功能。以Java示例:
public static int doWaitFor(Process process) {InputStream in = null;InputStream err = null;int exitValue = -1; // returned to caller when p is finishedtry {in = process.getInputStream();err = process.getErrorStream();boolean finished = false; // Set to true when p is finishedwhile (!finished) {try {while (in.available() > 0) {// Print the output of our system callCharacter c = new Character((char) in.read());System.out.print(c);}while (err.available() > 0) {// Print the output of our system callCharacter c = new Character((char) err.read());System.out.print(c);}// Ask the process for its exitValue. If the process// is not finished, an IllegalThreadStateException// is thrown. If it is finished, we fall through and// the variable finished is set to true.exitValue = process.exitValue();finished = true;} catch (IllegalThreadStateException e) {// Process is not finished yet;// Sleep a little to save on CPU cyclesThread.currentThread().sleep(500);}}} catch (Exception e) {e.printStackTrace();} finally {try {if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}if (err != null) {try {err.close();} catch (IOException e) {e.printStackTrace();}}}return exitValue; }
Java调用外部命令使用 Runtime.getRuntime().exec(command) 。 在使用调用ffmpeg命令时,必须要读取执行命令输出流中的内容,程序才不会阻塞。否则缓冲读满后,进程会卡住。 视频转换会非常耗时,取决于硬件性能。在实际应用中,我们也可以开启线程去处理。
FFmpeg还提供C调用,公共库集成。以上方法并不是最优解决方案,仅提供一种参考
链接:音视频命令转换工具 - FFmpeg - 掘金
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
音视频命令转换工具 - FFmpeg相关推荐
- pcm 采样率转换_Cool Audio Video Converter(音视频格式转换工具)V2.18 最新版 - 绿色先锋下载 -...
Cool Audio Video Converter(音视频格式转换工具)是一款十分优秀好用的音频格式转换助手.如果你需要一款好用的格式转换工具,小编带来的这款Cool Audio Video Con ...
- office文档、图片、音/视频格式转换工具
1.音频/视屏转换工具VLC https://wiki.videolan.org/Mp3/#Container_formats http://wenku.baidu.com/view/ba73ac ...
- 媒体文件转换工具ffmpeg命令行汇总(包括精准裁剪音视频)
转自:https://www.cnblogs.com/renhui/p/9223969.html 这个blog有一系列的ffmpeg的源码分析,建议系统读一下. 这里我重点关注的是精准裁剪视频,没想到 ...
- FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg
一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...
- Fmpeg命令行工具学习(三):媒体文件转换工具ffmpeg
一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...
- 【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )
FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 [FFmpeg]FFmpeg 相关术语简介 二 [FFmpe ...
- 音视频基本概念和FFmpeg的简单入门(新手友好+FFmpeg资料分享)
音视频基本概念和FFmpeg的简单入门 基本概念 容器/文件(Conainer/File): 即特定格式的多媒体文件,一般来说一个视频文件是由视频,音频,字幕等按特定的格式/规则组合到一起的,常见如: ...
- 音视频基础概念(4)—音视频开发常用工具
目录 1.VLC播放器简介 1.1 VLC 播放器 1.2 VLC的功能列表 1.3 VLC播放网络串流 1.4 VLC作为流媒体服务器 2. MediaInfo简介 2.1 MediaInfo 2. ...
- java图片音视频上传工具_java处理音视频,文档,图片所用工具
对开发人员来说,对文件的操作往往必不可少,但可能会有一些陌生的感觉,本文就为大家提供一些可用的工具帮助大家处理各种类型的文档. 音.视频 推荐的工具:FFmpeg, 它提供了录制.转换以及流化音视频的 ...
最新文章
- JQuery插件:ScrollTo平滑滚动到页面指定位置
- keil查看程序运行时间_你知道 KEIL 自带示波器吗?
- n1进入recovery模式_oppo n1怎么进recovery
- C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
- 链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。
- java poi读取word中附件_java poi word读取
- Failed to resolve loader: less-loader
- python 安装第三方库/包(命令/详细注释),如安装pyinstaller库
- Android MuPDF 部署
- 华为hicar支持车型列表_汽车大观| 华为的“汽车梦”
- 【android开发】手机应用管理器的实现之实现软件加锁(四)
- 微信小程序设计稿pt怎么转rpx
- 第4章 手机平板要兼顾,探究碎片
- “热散由心静,凉生为室空” - linux温控的那些事儿
- 达梦数据库之备份还原
- 什么是线程循环发包 ?
- 为什么N型MOS管占据主导地位
- 研发的首要目的是什么——一个容易被忽略的问题
- Chromium OS Autotest 编码风格
- 四万字+五十图,三五十问拿捏Spring面试