导航:首页 > 程序命令 > ffmpeg命令详解

ffmpeg命令详解

发布时间:2022-06-21 08:27:01

1. FFmpeg有什么用

FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等,核心功能作用如下。

视频采集功能

ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可

以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

ffmpeg在linux下的视频采集

在Linux平台上,ffmpeg对V4L2的视频设备提供了很好的支持,如:

./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp



以上命令表示:采集10秒钟视频,对video4linux2视频设备进行采集,采集QCIF(176*144)的视频,每秒8帧,视频设备为/dev/video0,视频编码为h263,输出格式为RTP,后面定义了IP地址及端口(WWW.PC841.COM 百事网),将该码流所对应的SDP文件重定向到/tmp/ffmpeg.sdp中,将此SDP文件上传到流媒体服务器就可以实现直播了。

ffmpeg在windows下的视频采集

在windows下关于ffmpeg视频采集的资料非常少,但是ffmpeg还是支持windows下视频采集的。ffmpeg支持windows下video for windows(VFW)设备的视频采集,不过VFW设备已经过时,正在被WDM的视频设备所取代,但是ffmpeg还没有支持WDM的计划,不过好像有将WDM转为VFW的工具,因此ffmpeg还是可以在windows下进行视频采集的。

视频格式转换功能

ffmpeg视频转换功能。视频格式转换,比如可以将多种视频格式转换为flv格式,可不是视频信号转换 。

ffmpeg可以轻易地实现多种视频格式之间的相互转换(wma,rm,avi,mod等),例如可以将摄录下的视频avi等转成视频网站所采用的flv格式。

视频截图功能

对于选定的视频,截取指定时间的缩略图。视频抓图,获取静态图和动态图,不提倡抓gif文件;因为抓出的gif文件大而播放不流畅。

给视频加水印功能

使用ffmpeg 视频添加水印(logo)。

2. 怎样使用ffmpeg 进行音频解码

安装完成ffmpeg后,就可以使用ffmpeg进行音频文件格式转换。比如 ./ffmpeg -i /media/1.mp3 /media/1.wav, 通过该命令行可以将/media文件夹下1.mp3文件转换成WAV格式的。

但是反过来 ./ffmpeg -i /media/1.WAV /media/1.MP3 却不能转换成Mp3格式,提示如下错误(找不到编码器):
Stream mapping:
Stream #0:0 -> #0:0 (wav -> ?)
Encoder (codec none) not found for output stream #0:0
如果强行指定编码器 ./ffmpeg -i /media/1.wav -acodec mp3 /media/1.mp3, 仍提示找不到编码器错误:
Unknown encoder 'mp3'

这是因为,ffmpeg虽然是个开源软件,但因为具体格式的版权原因,它并没有包含所有的编解码格式,或者有个格式只有对应的解码器,但没有编码器,比如 Mp3就只有解码器,能播放Mp3文件,但却没有Mp3的编码器,无法将其它格式转换成Mp3。可以通过命令行 ./ffmpeg -codecs 查询编解码配置,第一个D表示Decoder,该格式能够解码;E表示Encoder,该格式可以编码。从中可以看出Mp3不能编码,Mp2倒是即可解码 也可编码。如何解决这个问题呢?
D A D mp1 MP1 (MPEG audio layer 1)
D A D mp1float MP1 (MPEG audio layer 1)
DEA D mp2 MP2 (MPEG audio layer 2)
D A D mp2float MP2 (MPEG audio layer 2)
D A D mp3 MP3 (MPEG audio layer 3)
D A D mp3a ADU (Application Data Unit) MP3 (MPEG audio layer 3)
D A D mp3afloat ADU (Application Data Unit) MP3 (MPEG audio layer 3)

我的第一个方法是自己写代码来完成。源码文件中,Allcodecs.c中对各个格式进行注册,先修改Mp3的注册行,改为同时注册解码器和编码器:
REGISTER_ENCDEC (MP2, mp2);
REGISTER_DECODER (MP2FLOAT, mp2float);
REGISTER_DECODER (MP3, mp3) // 此行修改为 REGISTER_ENCDEC (MP3, mp3)
然后新增Mp3编码器的实现Struct,里面Init函数、encode函数、close函数使用Mp2的函数,因为我也不知道如何去实现Mp3的函数,或者说到代码实现级我也不知道Mp3和Mp2的区别在哪。
AVCodec ff_mp3_encoder = {
.name = "mp3",
.type = AVMEDIA_TYPE_AUDIO,
.id = CODEC_ID_MP3,
.priv_data_size = sizeof(MpegAudioContext),
.init = MPA_encode_init,
.encode = MPA_encode_frame,
.close = MPA_encode_close,
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
.supported_samplerates= (const int[]){44100, 48000, 32000, 22050, 24000, 16000, 0},
.long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"),
.defaults = mp3_defaults,
};
重新编译上线。 用命令行./ffmpeg -i /media/1.WAV /media/1.MP3 试了一下,能成功生成1.mp3文件,文件也能播放。似乎没有问题了,单用 file /media/1.mp3 查看了一下,发现文件不是Mp3格式的,而是Mp2格式的:
/media/1.mp3: MPEG ADTS, layer II, v1, 128 kbps, 44.1 kHz, Stereo
很遗憾,自行修改代码的方式行不通,因为不是每个编解码格式协议的专家,自行修改代码失败的风险很大,不仅是Mp3,还有一些其他格式比如AMR OGG H.263是没有编码器的。所以,第二个方案,使用成熟的第三方编码器和ffmpeg结合。

Mp3比较好的开源第三方库是libmp3lame(简称Lame)。我下了一个最新版本(3.99.4)的Lame源码,编译它:
首先配置: ./configure --prefix=/shared --enable-shared --enable-static
然后编译: make
make install
生成文件: 动态链接库 /shared/lib/libmp3lame.so 和 静态链接库 /shared/lib/libmp3lame.a。这里只需要使用动态链接库,将.so文件拷贝到/lib中,这个文件夹是动态链接库的默认搜索路径, 让ffmpeg运行时可以找到。
然后对ffmpeg配置libmp3lame: ./configure --enable-libmp3lame
重新编译ffmpeg,运行转化命令,看看效果如何。
首先执行 ./ffmpeg -codecs 查看可用编解码的变化,可以看到多出了libmp3lame编码器,带E的:
D V D lagarith Lagarith lossless
EA libmp3lame libmp3lame MP3 (MPEG audio layer 3)
EV ljpeg Lossless JPEG
D V D loco LOCO
然后执行 ./ffmpeg -i /media/1.WAV /media/1.MP3, 生成1.mp3,用File命令查看,确实是Mp3文件。
/media/1.mp3: Audio file with ID3 version 2.4.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, Stereo
大功告成,问题解决。
也可在命令行中指定编解码生成Mp3文件:./ffmpeg -i /media/1.WAV -acodec libmp3lame /media/1.MP3.

3. ffmpeg 命令行的输出文件的路径该怎么写

ffmpeg 输出文件无须参数,直接写 d:\path\filename.mp4。
ffmpeg -i c:\input\k.mp4 -c d:\path\filename.mp4。

在windows下,路径中出现空格或其他空白符时,则需要用双引号把路径包括起来。
比如 "d:\path\my file.mp4"

4. linux环境下ffmpeg从视频中每隔几帧提取帧命令

命令:ffmpeg -i INPUT -y -f image2 -ss TIME -vframes 1 OUTPUT
其中各参数的说明如下:
INPUT :输入。表示原始视频文件
TIME:某个时间点,要提取的图像即为该时间点的图像。格式00:01:30或直接写90
OUTPUT:会在视频文件所在的文件夹下生成图像文件

自己动手写个bash小脚本应该不难吧。

5. ffmpeg的安装和使用

ffmpeg是一个可移植的音视频解码编码库。是开源的。是c代码。不是php的。按你的需求。应该不需要安装,直接到ffmpeg.org下载windows版编译好的exe文件。然后参考网上的命令行参数。调用一下就可以了。

详解估计你是要不到的了。貌似没有人专门写这个。不是大家不愿意分享。而且大家都很难把整个ffmpeg吃透。自己多尝试尝试吧。

6. linux怎么实现由ffmpeg命令

格式转换 (将file.avi 转换成output.flv)
C代码
#ffmpeg -i file.avi output.flv

-i 表示输入文件

:现在有个视频video.avi,有个音频 audio.mp3,将其合并成output.avi
两个命令(file.avi 是中间文件,用完可删)
C代码
#ffmpeg -i video.avi -vcodec -an video2.avi
#ffmpeg -i video2.avi -i audio.mp3 -vcodec -acodec output.avi

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

方法2 好像可以直接指定两个输入文件 ,
C代码
#ffmpeg -i /tmp/a.wav -i /tmp/a.avi /tmp/a.avi

两个文件的顺序很重要

从视频里提取声音(声音与视频的分离)
C代码
#ffmpeg -i 人生若只如初见.flv -vnr.mp3

从flv 文件中提取声音并保存为mp3格式
-vn : 表示忽略视频 估计是video no 之类的缩写

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

只留视频不留声音
-an : 表示 忽略 声音 估计是audio no 之类的缩写

从视频里提取图片( )
C代码
#ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg
-ss

第8秒处截一图

压缩mp3 文件
如果你觉得mp3文件有点大,想变小一点那么可以通过-ab 选项改变音频的比特率 (bitrate)
C代码
#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文件的大小不仅仅取决于播放时间的长度,还取决于源音频文件的其它因素。

7. 如何使用ffmpeg.exe。双击是一闪而过,怎么输入参数啊

1、首先把要分割的视频放到D:aab目录下,路径可以随意更改。

8. ffmpeg.exe的参数

ffmpeg.exe -i F:闪客之家闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:11.flv
ffmpeg -i F:1.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f: est.flv
使用-ss参数 作用(time_off set the start time offset),可以从指定时间点开始转换任务。如:
转换文件格式的同时抓缩微图:
ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
对已有flv抓图:
ffmpeg -i test.flv -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
-ss后跟的时间单位为秒
Ffmpeg转换命令
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500
-ab 24 -f 3gp test.3gp
或者
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp
ffmpeg参数设定解说
-bitexact 使用标准比特率
-vcodec xvid 使用xvid压缩
-s 320x240 指定分辨率
-r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)
画面部分,选其一
-b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的
就是原来默认项目中有的
-qscale <数值> 以<数值>质量为基础的VBR,取值0.01-255,约小质量越好
-qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31
-sameq 使用和源同样的质量
声音部分
-acodec aac 设定声音编码
-ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质
的DVDrip就可以用2
-ar <采样率> 设定声音采样率,PSP只认24000
-ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换
君默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上
-vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍
这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去
判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整
例子:ffmpeg -y -i 1.avi -title Test -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 1.***
解释:以上命令可以在Dos命令行中输入,也可以创建到批处理文件中运行。不过,前提是:要在ffmpeg所在的目录中执行(转换君所在目录下面的cores子目录)。
参数:
-y(覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了)
-i 1.avi(输入文件是和ffmpeg在同一目录下的1.avi文件,可以自己加路径,改名字)
-title Test(在PSP中显示的影片的标题)
-vcodec xvid(使用XVID编码压缩视频,不能改的)
-s 368x208(输出的分辨率为368x208,注意片源一定要是16:9的不然会变形)
-r 29.97(帧数,一般就用这个吧)
-b 1500(视频数据流量,用-b xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高)
-acodec aac(音频编码用AAC)
-ac 2(声道数1或2)
-ar 24000(声音的采样频率,好像PSP只能支持24000Hz)
-ab 128(音频数据流量,一般选择32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(输出psp专用格式)
-muxvb 768(好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了)
1.***(输出文件名,也可以加路径改文件名)
机器强劲的话,可以多开几个批处理文件,让它们并行处理。
E:ffmpeg.exe -i I:1.wmv -b 360 -r 25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac 1 D:2.flv

9. 我想用ffmpeg命令行转换一个视频文件,视、音频编码格式不变,只是将画面旋转90度,请问命令行该如何写

在你的转码命令里面添加上-vf rotate=PI/2或者-vf rotate=3*PI/2,例如
ffmpeg -i E:\ffmpeg\test.mp4 -y -vf rotate=PI/2 E:\ffmpeg\dest1.mp4

阅读全文

与ffmpeg命令详解相关的资料

热点内容
我的世界is命令 浏览:154
python和php哪个强大 浏览:223
批处理启动文件夹写文件 浏览:85
app怎么看是第几层 浏览:68
python复杂验证码识别 浏览:508
python位置变量 浏览:434
python和SQLserver 浏览:247
华为大数据服务器有什么用 浏览:842
Windows应用程序捆绑核心编程 浏览:480
源码时代php怎么样 浏览:990
命令提示符以管理员身份运行 浏览:820
加密交易者投资贵金属 浏览:219
如何更改服务器的地址吗 浏览:320
快手上的领券app是什么牌 浏览:9
照片jpg转换成pdf 浏览:518
复函数的运算法则 浏览:865
android语言切换实现 浏览:17
山西省开山压缩空压机 浏览:759
cc程序员注意事项 浏览:256
遗传算法工具箱函数 浏览:407