FFmpeg工具背景介绍

ffmpeg,这是笔者接触到的第一款开源的音视频流处理工具,在使用的过程中真实感受到了这款开源工具的强大;在笔者所查过的资料中,该工具在音视频处理领域是非常重要的工具,可用性和普遍性是极高的。那么在这里勒,笔者引用Wikipedia的介绍吧,附上原文与笔者自己的译文(无意提高下格调hhh)

FFmpeg is a free and open-source software project consisting of a large suite of libraries and programs for handling video, audio, and other multimedia files and streams. At its core is the FFmpeg program itself, designed for command-line-based processing of video and audio files. It is widely used for format transcoding, basic editing (trimming and concatenation), video scaling, video post-production effects and standards compliance (SMPTE, ITU).

FFmpeg是一款开源软件,由众多用来处理视频,音频及其他多媒体文件及流数据的软件库与程序组成。这款开源软件的核心,便是FFmepg基于命令行来处理音视频文件。这款软件广泛用于格式转码,音视频流基础编辑(修剪与连接),视频后期特效处理及编辑

好啦~介绍完软件背景之后勒,笔者附上当初学习这款工具时所使用的一些资料

上图中的书是中文版的FFmpeg使用指南。在这里必须吐槽,国内许多书都是猪扮老虎,名字起的高大上,实际上如果你看过官网的文档,那这个入门到精通根本就是不存在的,而且该书写的太浅,深度还是不够的,建议多看看官网的文档

FFmpeg的官方网站ffmpeg,这是官方文档

Java Audio包的官方API文档Java Sound Programmer,这个Java包的API文档呢,其实是无心插柳柳成荫,如果你仔细看过之后,你会对FFmpeg有比较深的理解

笔者所学

其实笔者对这款软件的使用也只是停留在表面,但是授人以鱼不如授人以渔,我附上了上述的三个重要学习资源呀,那可都是笔者经过数百次Google精心凝缩而来的,好好珍惜。然后,就是笔者这里仅介绍ffmpeg的几个比较有用的命令行,及ffmpeg在Python语言与Java语言的wrapper版 ( 其实wrapper的意思便是将已有的工具进行包装,以使该工具适用于特定的平台 ),Python和Java可谓是当今最火的两大开发应用型语言呀~

FFmpeg的三大工具

  • ffmpeg 命令:A command line tool to convert multimedia files between formats

  • ffplay 命令:A simple media player based on SDL and the FFmpeg libraries

  • ffporbe 命令:A simple multimedia stream analyzer

ffprobe

这个命令行勒主要是用来作流媒体文件的数据分析,也就是通过这个命令可以提取流媒体文件中的一些比较重要的数据。笔者只使用过这个命令哦

wong@MacBook-Pro ~ % ffprobe test.mp4
ffprobe version 4.3.1 Copyright (c) 2007-2020 the FFmpeg developersbuilt with Apple clang version 11.0.3 (clang-1103.0.32.62)configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jacklibavutil      56. 51.100 / 56. 51.100libavcodec     58. 91.100 / 58. 91.100libavformat    58. 45.100 / 58. 45.100libavdevice    58. 10.100 / 58. 10.100libavfilter     7. 85.100 /  7. 85.100libavresample   4.  0.  0 /  4.  0.  0libswscale      5.  7.100 /  5.  7.100libswresample   3.  7.100 /  3.  7.100libpostproc    55.  7.100 / 55.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':Metadata:major_brand     : mp42minor_version   : 0compatible_brands: mp41mp42isomcreation_time   : 2016-08-03T04:42:45.000000ZDuration: 00:45:34.02, start: 0.000000, bitrate: 629 kb/sStream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)Metadata:creation_time   : 2016-08-03T04:42:45.000000ZStream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt470bg), 720x576 [SAR 12:11 DAR 15:11], 497 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default)Metadata:creation_time   : 2016-08-03T04:42:46.000000Zencoder         : VC Coding

怎么样,是不是感觉一大串呢,其实用久了你会发现它老是会跳出一个banner,也就是一段声明,在这里可以提供一个参数

wong@MacBook-Pro ~ % ffprobe -hide_banner test.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':Metadata:major_brand     : mp42minor_version   : 0compatible_brands: mp41mp42isomcreation_time   : 2016-08-03T04:42:45.000000ZDuration: 00:45:34.02, start: 0.000000, bitrate: 629 kb/sStream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)Metadata:creation_time   : 2016-08-03T04:42:45.000000ZStream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt470bg), 720x576 [SAR 12:11 DAR 15:11], 497 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default)Metadata:creation_time   : 2016-08-03T04:42:46.000000Zencoder         : VC Coding

这样就“安静”多了!至于其中统计出的数据,我觉得有兴趣去了解或者有需要查文档都可以的

ffplay

这个命令行主要是用来播放流媒体文件的,比如在笔者的电脑上,它是这样使用滴

ffplay -hide_banner test.mp4

输入以上命令,笔者的电脑就会弹出窗口,用来显示流媒体文件中的流数据 ( 如果是视频的话,默认不加参数便是有视频影像 )

我们还可以通过添加参数来调整我们的现实模式,至于现实模式有多少,笔者不清楚,可以查阅文档

ffplay -hide_banner -showmode 1 test.mp4

ffmpeg

这可是重头戏~这个命令估计是最常用的了~就笔者目前的了解程度,就是使用它能够从某种格式的流媒体文件转化或是抽取出特定的流媒体数据

这里介绍笔者所知的

  • 默认格式将mp4文件输出到wav文件中
# 直接默认转化出文件
wong@MacBook-Pro ~ % ffmpeg -hide_banner -i test.mp4 output.wav
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':Metadata:major_brand     : mp42minor_version   : 0compatible_brands: mp41mp42isomcreation_time   : 2016-08-03T04:42:45.000000ZDuration: 00:45:34.02, start: 0.000000, bitrate: 629 kb/sStream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)Metadata:creation_time   : 2016-08-03T04:42:45.000000ZStream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt470bg), 720x576 [SAR 12:11 DAR 15:11], 497 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default)Metadata:creation_time   : 2016-08-03T04:42:46.000000Zencoder         : VC Coding
Stream mapping:Stream #0:0 -> #0:0 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'output.wav':Metadata:major_brand     : mp42minor_version   : 0compatible_brands: mp41mp42isomISFT            : Lavf58.45.100Stream #0:0(eng): Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s (default)Metadata:creation_time   : 2016-08-03T04:42:45.000000Zencoder         : Lavc58.91.100 pcm_s16le
size=  512628kB time=00:45:34.01 bitrate=1536.0kbits/s speed=1.01e+03x
video:0kB audio:512628kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000015%
  • 指定编码格式将mp4文件输出到wav文件中
# 指定编码格式输出到文件中
wong@MacBook-Pro ~ % ffmpeg -hide_banner -i test.mp4 -acodec pcm_s16le output.wav
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':Metadata:major_brand     : mp42minor_version   : 0compatible_brands: mp41mp42isomcreation_time   : 2016-08-03T04:42:45.000000ZDuration: 00:45:34.02, start: 0.000000, bitrate: 629 kb/sStream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)Metadata:creation_time   : 2016-08-03T04:42:45.000000ZStream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt470bg), 720x576 [SAR 12:11 DAR 15:11], 497 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default)Metadata:creation_time   : 2016-08-03T04:42:46.000000Zencoder         : VC Coding
Stream mapping:Stream #0:0 -> #0:0 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'output.wav':Metadata:major_brand     : mp42minor_version   : 0compatible_brands: mp41mp42isomISFT            : Lavf58.45.100Stream #0:0(eng): Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s (default)Metadata:creation_time   : 2016-08-03T04:42:45.000000Zencoder         : Lavc58.91.100 pcm_s16le
size=  512628kB time=00:45:34.01 bitrate=1536.0kbits/s speed=1.01e+03x
video:0kB audio:512628kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000015%

其实这些附加的参数只是其中之一,还有许许多多的可选参数呢~

以上是将视频流媒体文件转化为音频流媒体文件

接下来是

  • 将某种格式的音频流媒体文件转化为另外一种格式的音频流媒体文件
wong@MacBook-Pro ~ % ffmpeg -i test.wav -hide_banner -f s16le -acodec pcm_s16le -ar 8000 -ac 2 output.pcm
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'test.wav':Duration: 00:00:35.10, bitrate: 256 kb/sStream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, stereo, s16, 256 kb/s
Stream mapping:Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, s16le, to 'output.pcm':Metadata:encoder         : Lavf58.45.100Stream #0:0: Audio: pcm_s16le, 8000 Hz, stereo, s16, 256 kb/sMetadata:encoder         : Lavc58.91.100 pcm_s16le
size=    1097kB time=00:00:35.10 bitrate= 256.0kbits/s speed=9.53e+03x
video:0kB audio:1097kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

其中的各项参数呢希望读者可以自己查阅

  • 将声道为stereo即双声道( 左右声道 )的音频流文件进行抽取出其中每个声道的音频流文件
wong@MacBook-Pro ~ % ffmpeg -i test.wav -hide_banner -filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" -map "[left]" left.wav -map "[right]" right.wav
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'test.wav':Duration: 00:00:35.10, bitrate: 256 kb/sStream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, stereo, s16, 256 kb/s
Stream mapping:Stream #0:0 (pcm_s16le) -> channelsplitchannelsplit:FL -> Stream #0:0 (pcm_s16le)channelsplit:FR -> Stream #1:0 (pcm_s16le)
Press [q] to stop, [?] for help
Output #0, wav, to 'left.wav':Metadata:ISFT            : Lavf58.45.100Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels (FL), s16, 128 kb/sMetadata:encoder         : Lavc58.91.100 pcm_s16le
Output #1, wav, to 'right.wav':Metadata:ISFT            : Lavf58.45.100Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels (FR), s16, 128 kb/sMetadata:encoder         : Lavc58.91.100 pcm_s16le
size=     549kB time=00:00:35.10 bitrate= 128.0kbits/s speed=4.79e+03x
video:0kB audio:1097kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

好了!这次的分享就到这里了~

FFmpeg介绍及了解常用指令(●----●)相关推荐

  1. mysql中的操作指令,MySQL中常用指令操作的介绍(代码示例)

    本篇文章给大家带来的内容是关于MySQL中常用指令操作的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. l 创建数据库:CREATE DATABASE table_n ...

  2. 我的世界服务器怎么显示腐竹来了,我的世界服务器主人可用指令一览 我的世界腐竹常用指令介绍_游侠手游...

    我的世界服务器主人可用指令一览,我的世界腐竹指令介绍.作为我的世界中一个服务器的主人,你可以掌控这个服务器的天时地利,具体做法自然就是使用指令了.接下来小编就给大家带来服主的常用指令介绍,大家一起来看 ...

  3. Pepper/Nao初级教程:第四章 Pepper/Nao的常用指令盒介绍

    第五章 Pepper/Nao的常用指令盒介绍 4.1 对话 制作对话App的方法有很多,其中一个方法是使用Speech Reco.和Say指令盒来实现. 4.1.1 Speech Reco.指令盒 S ...

  4. 什么是模板引擎?常见的模板引擎有哪些?thymeleaf的常用指令介绍

    一.模板引擎概念 模板引擎是为了解决用户界面(显示)与业务数据(内容)分离而产生的. 它可以生成特定格式的文档,常用的如格式如HTML.xml以及其他格式的文本格式.其工作模式如下: 举个例子,我想买 ...

  5. Vue的常用指令(v-html {{}}文本插值,v-bind绑定属性,v-if条件渲染,v-for列表渲染,v-on @ 事件绑定,v-model表单绑定)

    Vue的常用指令(文本插值,绑定属性,条件渲染,列表渲染,事件绑定,表单绑定) Vue 的介绍 Vue 是一套构建用户界面的渐进式前端框架. 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已 ...

  6. 小白也能学会的 Git 常用指令指南

    目录 1.git init 2. git add 3.git commit 4.git log 5.git reflog 6.git reset --hard HEAD~X 7.git status ...

  7. linux查看进程运行日志文件,【Linux】常用指令、ps查看进程、kill杀进程、启动停止tomcat命令、查看日志、查看端口、find查找文件...

    1.说出 10 个 linux 常用的指令 1) ls 查看目录中的文件 2)cd /home 进入 '/ home' 目录:cd .. 返回上一级目录:cd ../.. 返回上两级目录 3)mkdi ...

  8. linux指令解压rpm,dpkg rpm apt yum 的常用指令 +linux 各种解压缩方法.docx

    dpkg dpkg & rpm & apt & yum 的常用指令Dpkg (Debian系):UbuntuRPM (Red Hat系):CentOS.Fedora列出系统中已 ...

  9. vue.js语法和常用指令

    如果已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,无需手动操作DOM.它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创 ...

最新文章

  1. IDEA中maven的命令及作用
  2. 阐述一下Mysql事务的四个特性_数据库事务的四个基本性质?
  3. JS模块化写法(转)
  4. ZigBee On Windows Mobile—利用CF卡接口外扩
  5. 对数几率回归 —— Logistic Regression
  6. php 逗号编码,php有几种编码
  7. CSS中的IFC和BFC入门
  8. 虚拟机linux搭建samba,搭建samba服务使在windows上使用虚拟机为linux
  9. js 禁止android手机返回键,js禁止浏览器,微信,及手机物理键的返回
  10. lvs/nginx/haproxy优缺点
  11. yue-library是一个基于SpringBoot封装的基础库
  12. LICEcap 录制Gif动画
  13. java窗口按钮位置设置
  14. 史诗级互联网电商系统的演进过程详解
  15. MS17010(永恒之蓝)漏洞利用与复现
  16. 17 线性方程组——线性方程组解的结构、解的性质、解空间、基础解系、基础解系存在性
  17. C++参考手册中文网站
  18. 从日剧《西游记》谈项目管理
  19. linux系统不能用投影仪,Linux连接投影仪(ubuntu)失败或显示不正常
  20. redis源码学习-03_动态字符串SDS

热门文章

  1. 主流关系型分布式数据库选型与设计实战
  2. ajax ? (js)
  3. 亲测最详细VS2019+ITK+VTK(CMake)+Qt配置教程
  4. 科研中如何使用SPSS进行数据分析?
  5. CSGO服务器租用如何选择合适的配置?CSGO服务器怎么选择?
  6. MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单(安装mysql的步骤和方法)
  7. [Bartender]C#调用BartenderSDK使用场景-客户标签案列
  8. 微信小程序调用豆瓣电影API(详细)
  9. vue admin 动态路由权限管理
  10. 商用密码应用与安全性评估要点笔记(密码发展、密码算法)