提取声音的软件网上搜索有不少,不过最有名最专业的似乎是一个命令行工具:ffmpeg。这个工具功能十分丰富且强大,我所需要的从视频中提取 mp3 的功能只是其中包含的一个。感觉使用起来很复杂因为是命令行的,但其实通过学习后发现很轻松很好用,一起学习下!

FFmpeg 简介

FFmpeg 是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec—这是一个用于多个项目中音频和视频的解码器库,以及libavformat—个音频与视频格式转换库。

“FFmpeg”这个单词中的“FF”指的是“Fast Forward(快速前进)”。有些新手写信给“FFmpeg”的项目负责人,询问FF是不是代表“Fast Free”或者“Fast Fourier”等意思,“FFmpeg”的项目负责人回信说:“Just for the record, the original meaning of “FF” in FFmpeg is “Fast Forward”…”

组件组成

ffmpeg——一个命令行工具,用来对视频文档转换格式,也支持对电视卡即时编码
ffserver——一个HTTP多媒体即时广播流服务器,支持时光平移
ffplay——一个简单的播放器,基于SDL与FFmpeg库
libavcodec——包含全部FFmpeg音频/视频编解码库
libavformat——包含demuxers和muxer库
libavutil——包含一些工具库
libpostproc——对于视频做前处理的库
libswscale——对于影像作缩放的库

命令参数

FFmpeg可使用众多参数,参数内容会根据ffmpeg版本而有差异,使用前建议先参考参数及编解码器的叙述。此外,参数明细可用ffmpeg -h显示;编解码器名称等明细可用ffmpeg -formats显示。

下列为较常使用的参数:

主要参数

-i——设置输入文件名。
-f——设置输出格式。
-y——若输出文件已存在时则覆盖文件。
-fs——超过指定的文件大小时则结束转换。
-t——指定输出文件的持续时间,以秒为单位。
-ss——从指定时间开始转换,以秒为单位。
-t从-ss时间开始转换(如-ss 00:00:01.00 -t 00:00:10.00即从00:00:01.00开始到00:00:11.00)。
-title——设置标题。
-timestamp——设置时间戳。
-vsync——增减Frame使影音同步。
-c——指定输出文件的编码。
-metadata——更改输出文件的元数据。
-help——查看帮助信息。

影像参数

-b:v——设置影像流量,默认为200Kbit/秒。(单位请引用下方注意事项)
-r——设置帧率值,默认为25。
-s——设置画面的宽与高。
-aspect——设置画面的比例。
-vn——不处理影像,于仅针对声音做处理时使用。
-vcodec( -c:v )——设置影像影像编解码器,未设置时则使用与输入文件相同之编解码器。

声音参数

-b:a——设置每Channel(最近的SVN版为所有Channel的总合)的流量。(单位请引用下方注意事项)
-ar——设置采样率。
-ac——设置声音的Channel数。
-acodec ( -c:a ) ——设置声音编解码器,未设置时与影像相同,使用与输入文件相同之编解码器。
-an——不处理声音,于仅针对影像做处理时使用。
-vol——设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推。)

注意事项

以-b:v及-b:a参数设置流量时,根据使用的ffmpeg版本,须注意单位会有kbits/sec与bits/sec的不同。(可用ffmpeg -h显示说明来确认单位。)
例如,单位为bits/sec的情况时,欲指定流量64kbps时需输入 -b:a 64k;单位为kbits/sec的情况时则需输入 -b:a 64。
以-acodec及-vcodec所指定的编解码器名称,会根据使用的ffmpeg版本而有所不同。例如使用AAC编解码器时,会有输入aac与libfaac的情况。此外,编解码器有分为仅供解码时使用与仅供编码时使用,因此一定要利用ffmpeg -formats确认输入的编解码器是否能运作。

实战使用

一、格式转换 (将file.avi 转换成output.flv):

ffmpeg -i file.avi output.flv

-i 表示输入文件

二、合并视频

现在有个视频video.avi,有个音频audio.mp3,将其合并成output.avi。两个命令(video2.avi是中间文件 ,用完可删):

ffmpeg -i video.avi -vcodec copy -an video2.avi
ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy output.avi

-i 表示输入文件这个上面提过了。
-vcodec copy 表示 force video codec (‘copy’ to copy stream) 这个不知怎么译 ,估计是直接copy。
-acodec copy 这个说的应该是音频了,跟上面一样。
-an 表示 disable audio 估计是audio no之类的缩写,表示去掉video.avi原有的音频。

还有方法2好像可以直接指定两个输入文件:

ffmpeg -i /tmp/a.wav -i /tmp/a.avi /tmp/a.avi

两个文件的顺序很重要。

三、从视频里提取声音(声音与视频的分离)

从flv文件中提取声音并保存为mp3格式:
ffmpeg -i 人生若只如初见.flv -vn r.mp3

-vn 表示忽略视频,估计是 video no 之类的缩写。

只留视频不留声音:

ffmpeg -i 人生若只如初见.flv -an r.flv

-an 表示忽略声音估计是 audio no 之类的缩写。

四、从视频里提取图片

ffmpeg -i test.avi -y -f p_w_picpath2 -ss 8 -t 0.001 -s 350×240 test.jpg
-ss 第8秒处截一图

五、压缩 mp3 文件

如果你觉得mp3文件有点大,想变小一点那么可以通过-ab 选项改变音频的比特率(bitrate)

ffmpeg -i input.mp3 -ab 128 output.mp3 //这里将比特率设为128

你可以用file命令查看一下源文件的信息:

z.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, Stereo

其中的 192 kbps 就是比特率。

mp3中比特率的含义是:在压缩音频文件至mp3时,由压缩软件所确定数码文件在播放时每秒传送给播放器大小,其单位是:千位/秒;英文的含义是:kbps – = kilobits per second。现在mp3文件的最高数位率是320 kbps。这样的文件体积很大,每分钟的音乐超过两兆字节。如果采用可变比特率(VBR)编码来生成mp3文件,获得与320 kbps相当音质,文件的体积会缩小25~50%。请注意:播放时间相同,而歌曲不同,所获的压缩mp3文件的一般不相同,这是因为VBR编码所生成的mp3文件的大小不仅仅取决于播放时间的长度,还取决于源音频文件的其它因素。

六、视频文件的连接

视频文件的连接,如两个flv文件连接成一个。好像必须先将文件 转成mpg ,dv 等格式的文件后才能进行连接。连接复数的AVI影片档之范例(在此范例中须一度暂时将AVI档转换成MPEG-1档(MPEG-1, MPEG-2 PS, DV格式亦可连接)

ffmpeg -i input1.avi -sameq inputfile_01.mpg -r 20
ffmpeg -i input2.avi -sameq inputfile_02.mpg -r 20
cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg
ffmpeg -i inputfile_all.mpg -sameq outputfile.avi

上面将 input1.avi 和 input2.avi 合并成outputfile.avi
-sameq 表示相同的质量(可能指的是画面,不太清楚)
-r 指频率

七、mp3 截取

ffmpeg -ss 00:00:10 -t 00:01:22 -i 五月天-突然好想你.mp3 output.mp3

从第10秒开始截取,共截取1:22时长的内容。

八、录音(要有可用的麦克风,并且如果用alsa 的话,好像得安alsa-oss,重启)

ffmpeg -f oss -i /dev/dsp out.avi (should hava oss or alsa-oss)
ffmpeg -f alsa -ac 2 -i hw:0,0 out.avi (should )
ffmpeg -f alsa -ac 2 -i pulse (should hava PulseAudio)

oss 是linux下的声音相关的东西,与alsa一样,不过oss 是商业的,而/dev/dsp 是 oss 用到的麦克的设备吧,可以这样理解。

九、屏幕录像

ffmpeg -f x11grab -s xga -r 10 -i :0.0+0+0 wheer.avi
ffmpeg -f x11grab -s 320×240 -r 10 -i :0.0+100+200 wheer.avi

:0:0 表示屏幕(个人理解,因为系统变量$DISPLAY值就是:0.0) 而100,表示距左端100象素,200表示距上端200
-s 设置窗口大小
-r 10 好像是设置频率,不懂

ffmpeg -f x11grab -s xga-qscale 5 -r 10 -i :0.0+0+0 wheer.avi

-qscale 8 设定画面质量,值越小越好

十、屏幕录像,同时录音

ffmpeg -f oss -i /dev/dsp -f x11grab -r 30 -s 1024×768 -i :0.0 output.mkv
ffmpeg -ac 2 -f oss -i /dev/dsp -f x11grab -r 30 -s 1024×768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv

看到这,你会发现这个命令有多强大,如果我屏幕上打开了一个窗口,我只想录这个窗口的内容,如何确定这个窗口的坐标位置呢可以用另外一个命令:xwininfo。输入这个命令后,用鼠标点选目标窗口,就会出现目标窗口的坐标,宽高等一系列信息:

Absolute upper-left X: 276
Absolute upper-left Y: 57
Relative upper-left X: 2
Relative upper-left Y: 23
Width: 742
Height: 499
Depth: 24
Visual: 0x21
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x20 (installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +276+57 -262+57 -262-244 +276-244
-geometry 80×24+274+34 看到这一行了没

比如根据上面的信息

ffmpeg -f oss -i /dev/dsp -f x11grab -r 30 -s 1280×752 -i :0.0+0+23 output.avi
Another thing you can change is the video frame rate (FPS). In the example above we used -r 30 which means capture at 30 FPS. You can change this value to whatever frame rate you want.

这个 -r 30 应该是每秒钟取样几次,估计是一秒截三十次屏。

FFmpeg 使用命令整理 – 提取音频或视频、提取图片、格式转换等相关推荐

  1. docx文档怎么排列图片_格式转换太麻烦?仅需一行命令,搞定图片、音频、视频、文本批量转换!...

    每天12:18准时给大家惊喜! 大家好!我是好奇仔,热衷于搜罗和分享各种好用.实用的软件神器和资源,有手机软件.办公软件.APP,还有网站资源-- 来自:芒种学院(ID:lazy_info)  作者: ...

  2. 视频提取音频 - 手机视频在线提取音频提取器

    怎样将视频中的音频提取出来?一刀工具箱提供一键可将手机相册中的视频提取音频,便捷的快速获取到视频中的音频文件,视频提取音频的软件,免费转换 mp3 格式的工具. 代码片段 buildVideo(){l ...

  3. ffmpeg合并(复用)音频和视频文件,组成mp4

    ffmpeg合并(复用)音频和视频文件,组成mp4.程序如下: /* 合并音频和视频,形成音视频 */extern "C" { #include "libavutil/a ...

  4. ffmpeg图片格式转换

    图片格式转换,指的是将图片从一种格式转换到另一种格式(如YUV420到RGB888),可以通过ffmpeg实现 图片格式转换的使用场景之一是:当我们要播放一段视频时解封装得到了一段视频原始数据,可是我 ...

  5. 多文件断点续传,上传视频自动转MP4和截图,图片格式转换

    功能:自己写的一个组件,根据调用传过来的的fileType判断是上传视频还是图片还是音频.可以选择多文件上传,同时也可以暂停,继续,取消,断网重连续传.如果上传的是视频,会自动转为mp4,自动截取一帧 ...

  6. golang 运行命令行进行图片格式转换(jpg转png)

    1.golang 运行命令行 cmd := exec.Command(命令, 传入参数1, 传入参数2,...) cmd.Stdout = os.Stdout if err := cmd.Run(); ...

  7. python批量提取word文档中的图片(含图片格式转换和GUI)

    作者:小小明 文章目录 doc格式批量转为docx 批量提取docx文档的图片 批量图片格式转换 完整代码 GUI图形化工具开发 打包exe 给GUI加入进度条 日常工作中,领导要求你将一份 Word ...

  8. 【FFmpeg 命令】提取音频或视频、提取图片、格式转换等

    文章目录 1. FFmpeg 简介 2. 组件组成 3. 命令参数 3.1 主要参数 3.2 影像参数 4. 实战使用 4.1 格式转换 (将file.avi 转换成output.flv) 4.2 合 ...

  9. FFmpeg命令(七)、 音频与视频合并成视频

    1. 提取音频 ffmpeg -i input.mp4 -acodec copy -vn out.aac //acodec :指定音频编码器,copy只拷贝,不做编码 //vn:v代表视频,n代表no ...

最新文章

  1. 近一半企业曾遭遇云计算安全问题
  2. oracle 分区表
  3. lvm 2(逻辑卷管理)基础详解
  4. STM32 基础系列教程 4 – 基本定时器
  5. python日记----2017.8.1
  6. Hihocoder 小Hi小Ho扫雷作死一二三
  7. Ext---CheckBoxGroup的取值和赋值
  8. 《用户故事与敏捷方法》阅读笔记三
  9. java 给图片添加暗水印_java 实现给图片添加水印
  10. 清除SQL SERVER日志
  11. 【网络基础编程】第三节 C/S
  12. 解决:本地计算机无法复制文件到远程计算机
  13. 竞价推广和信息流推广是什么?区别在哪里?
  14. 博途V15.1激活工具出错。
  15. 前端调用后台验证码接口
  16. windows快速生成ssh key
  17. A Survey on Metaverse: the State-of-the-art,Technologies, Applications, and Challenges
  18. 正则表达式判断用户昵称
  19. 天梯赛 L1-079 天梯赛的善良 (20 分)
  20. 《思维导图与识字教学》理论在教学实践中的应用

热门文章

  1. 网上书城(搜索页,购物车)
  2. 全网最全,抖音Tik Tok Scheme,startActivity地址更新中
  3. Luogu3387 缩点
  4. 蔚来智驾功能大更新:与其叫NOP+,不如叫NAD-
  5. 21_lua生成随机数
  6. 腾讯音乐娱乐数据分析4.15笔试
  7. 【人脸识别6】用haar+adaboost训练自己的人脸检测器
  8. 卡通动漫游戏人物网页模板_灰色 卡通 动漫 游戏 漂亮 精美 整站 斜纹 质感
  9. Win10 发布UWD图形驱动程序 有助于小幅提高性能
  10. CAD文件转PDF格式后有白底怎么办?