FFmpeg 使用命令整理 – 提取音频或视频、提取图片、格式转换等
提取声音的软件网上搜索有不少,不过最有名最专业的似乎是一个命令行工具: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 使用命令整理 – 提取音频或视频、提取图片、格式转换等相关推荐
- docx文档怎么排列图片_格式转换太麻烦?仅需一行命令,搞定图片、音频、视频、文本批量转换!...
每天12:18准时给大家惊喜! 大家好!我是好奇仔,热衷于搜罗和分享各种好用.实用的软件神器和资源,有手机软件.办公软件.APP,还有网站资源-- 来自:芒种学院(ID:lazy_info) 作者: ...
- 视频提取音频 - 手机视频在线提取音频提取器
怎样将视频中的音频提取出来?一刀工具箱提供一键可将手机相册中的视频提取音频,便捷的快速获取到视频中的音频文件,视频提取音频的软件,免费转换 mp3 格式的工具. 代码片段 buildVideo(){l ...
- ffmpeg合并(复用)音频和视频文件,组成mp4
ffmpeg合并(复用)音频和视频文件,组成mp4.程序如下: /* 合并音频和视频,形成音视频 */extern "C" { #include "libavutil/a ...
- ffmpeg图片格式转换
图片格式转换,指的是将图片从一种格式转换到另一种格式(如YUV420到RGB888),可以通过ffmpeg实现 图片格式转换的使用场景之一是:当我们要播放一段视频时解封装得到了一段视频原始数据,可是我 ...
- 多文件断点续传,上传视频自动转MP4和截图,图片格式转换
功能:自己写的一个组件,根据调用传过来的的fileType判断是上传视频还是图片还是音频.可以选择多文件上传,同时也可以暂停,继续,取消,断网重连续传.如果上传的是视频,会自动转为mp4,自动截取一帧 ...
- golang 运行命令行进行图片格式转换(jpg转png)
1.golang 运行命令行 cmd := exec.Command(命令, 传入参数1, 传入参数2,...) cmd.Stdout = os.Stdout if err := cmd.Run(); ...
- python批量提取word文档中的图片(含图片格式转换和GUI)
作者:小小明 文章目录 doc格式批量转为docx 批量提取docx文档的图片 批量图片格式转换 完整代码 GUI图形化工具开发 打包exe 给GUI加入进度条 日常工作中,领导要求你将一份 Word ...
- 【FFmpeg 命令】提取音频或视频、提取图片、格式转换等
文章目录 1. FFmpeg 简介 2. 组件组成 3. 命令参数 3.1 主要参数 3.2 影像参数 4. 实战使用 4.1 格式转换 (将file.avi 转换成output.flv) 4.2 合 ...
- FFmpeg命令(七)、 音频与视频合并成视频
1. 提取音频 ffmpeg -i input.mp4 -acodec copy -vn out.aac //acodec :指定音频编码器,copy只拷贝,不做编码 //vn:v代表视频,n代表no ...
最新文章
- 近一半企业曾遭遇云计算安全问题
- oracle 分区表
- lvm 2(逻辑卷管理)基础详解
- STM32 基础系列教程 4 – 基本定时器
- python日记----2017.8.1
- Hihocoder 小Hi小Ho扫雷作死一二三
- Ext---CheckBoxGroup的取值和赋值
- 《用户故事与敏捷方法》阅读笔记三
- java 给图片添加暗水印_java 实现给图片添加水印
- 清除SQL SERVER日志
- 【网络基础编程】第三节 C/S
- 解决:本地计算机无法复制文件到远程计算机
- 竞价推广和信息流推广是什么?区别在哪里?
- 博途V15.1激活工具出错。
- 前端调用后台验证码接口
- windows快速生成ssh key
- A Survey on Metaverse: the State-of-the-art,Technologies, Applications, and Challenges
- 正则表达式判断用户昵称
- 天梯赛 L1-079 天梯赛的善良 (20 分)
- 《思维导图与识字教学》理论在教学实践中的应用