FFmpeg功能命令汇总

FFmpeg功能命令汇总,第1张

前言

如此强大的FFmpeg,能够实现视频采集、视频格式转化、视频截图、视频添加水印、视频切片、视频录制、视频推流、更改音视频参数功能等。通过终端命令如何实现这些功能,Richy在本文做一记录,以备之后查阅。

注意:下面一一列举的命令,未归类整理,命令参数供参考。

如果参数有误,大家可对照文章- FFmpeg参数命令 ,进行修改。

第一组

1分离视频音频

ffmpeg -i input_file -vcodec copy -an output_file_video//分离视频流ffmpeg -i input_file -acodec copy -vn output_file_audio//分离音频流

2视频解复用

ffmpeg –i testmp4 –vcodec copy –an –f m4v test264

ffmpeg –i testavi –vcodec copy –an –f m4v test264

3视频转码

ffmpeg –i testmp4 –vcodec h264 –s 352278 –an –f m4v test264

//转码为码流原始文件

ffmpeg –i testmp4 –vcodec h264 –bf 0 –g 25 –s 352278 –an –f m4v test264 //转码为码流原始文件

ffmpeg –i testavi -vcodec mpeg4 –vtag xvid –qsame test_xvidavi //转码为封装文件

说明: -bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制

4视频封装

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

5视频剪切

ffmpeg –i testavi –r 1 –f image2 image-%3djpeg //提取

ffmpeg -ss 0:1:30 -t 0:0:20 -i inputavi -vcodec copy -acodec copy outputavi //剪切视频//-r 提取图像的频率,-ss 开始时间,-t 持续时间

6视频录制

ffmpeg –i rtsp://1921683205:5555/test –vcodec copy outavi

7、利用ffmpeg视频切片

主要把视频源切成若干个ts格式的视频片段然后生成一个m3u8的切片文件索引提供给html5的video做hls直播源

命令如下:

ffmpeg -i 视频源地址 -strict -2 -c:v libx264 -c:a aac -f hls m3u8文件输出地址

8、ffmpeg缩放视频

假设原始视频尺寸是 1080p(即 1920×1080 px,16:9),使用下面命令可以缩小到 480p:

命令如下:

ffmpeg -i 视频源地址 -vf scale=853:480 -acodec aac -vcodec h264 视频输出地址(如:outmp4)

各个参数的含义:-i amov 指定待处理视频的文件名-vf scale=853:480 vf 参数用于指定视频滤镜,其中 scale 表示缩放,后面的数字表示缩放至 853×480 px,其中的 853px 是计算而得,因为原始视频的宽高比为 16:9,所以为了让目标视频的高度为 480px,则宽度 = 480 x 9 / 16 = 853-acodec aac 指定音频使用 aac 编码。注:因为 ffmpeg 的内置 aac 编码目前(写这篇文章时)还是试验阶段,故会提示添加参数 “-strict -2” 才能继续,尽管添加即可。又或者使用外部的 libfaac(需要重新编译 ffmpeg)。-vcodec h264 指定视频使用 h264 编码。注:目前手机一般视频拍摄的格式(封装格式、文件格式)为 mov 或者 mp4,这两者的音频编码都是 aac,视频都是 h264。outmp4 指定输出文件名上面的参数 scale=853:480 当中的宽度和高度实际应用场景中通常只需指定一个,比如指定高度为 480 或者 720,至于宽度则可以传入 “-1” 表示由原始视频的宽高比自动计算而得。即参数可以写为:scale=-1:480,当然也可以 scale=480:-1

9、ffmpeg裁剪

有时可能只需要视频的正中一块,而两头的内容不需要,这时可以对视频进行裁剪(crop),比如有一个竖向的视频 1080 x 1920,如果指向保留中间 1080×1080 部分命令如下:ffmpeg -i 视频源地址 -strict -2 -vf crop=1080:1080:0:420 视频输出地址(如:outmp4)

其中的 crop=1080:1080:0:420 才裁剪参数,具体含义是 crop=width:height:x:y,其中 width 和 height 表示裁剪后的尺寸,x:y 表示裁剪区域的左上角坐标。比如当前这个示例,我们只需要保留竖向视频的中间部分,所以 x 不用偏移,故传入0,而 y 则需要向下偏移:(1920 – 1080) / 2 = 420

10 转视频格式

ffmpeng -i sourcemp4 -c:v libx264 -crf 24 destinationflv

其中 -crf 很重要,是控制转码后视频的质量,质量越高,文件也就越大。

此值的范围是 0 到 51:0 表示高清无损;23 是默认值(如果没有指定此参数);51 虽然文件最小,但效果是最差的。

值越小,质量越高,但文件也越大,建议的值范围是 18 到 28。而值 18 是视觉上看起来无损或接近无损的,当然不代表是数据(技术上)的转码无损。

第二组

1ffmpeg 把文件当做直播推送至服务器 (RTMP + FLV)

ffmpeg - re -i demomp4 -c copy - f flv rtmp://wgslbletv/live/streamid

2将直播的媒体保存到本地

ffmpeg -i rtmp://rglsbletv/live/streamid -c copy streamfileflv

3将一个直播流,视频改用h264压缩,音频改用faac压缩,送至另一个直播服务器

ffmpeg -i rtmp://rglsbletv/live/streamidA -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://wglsbletv/live/streamb

4提取视频中的音频,并保存为mp3 然后输出

ffmpeg -i inputavi -b:a 128k outputmp3

第三组

1获取视频的信息

ffmpeg -i videoavi

2将序列合成视频

ffmpeg -f image2 -i image%djpg videompg

上面的命令会把当前目录下的(名字如:image1jpg image2jpg 等)合并成videompg

3将视频分解成序列

ffmpeg -i videompg image%djpg

上面的命令会生成image1jpg image2jpg

支持的格式有:PGM PPM PAM PGMYUV JPEG GIF PNG TIFF SGI

4为视频重新编码以适合在iPod/iPhone上播放

ffmpeg -i source_videoavi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_videomp4

5为视频重新编码以适合在PSP上播放

ffmpeg -i source_videoavi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_videomp4

6从视频抽出声音并存为Mp3

ffmpeg -i source_videoavi -vn -ar 44100 -ac 2 -ab 192 -f mp3 soundmp3

7将wav文件转成Mp3

ffmpeg -i son_origineavi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_finalmp3

8将avi视频转成mpg

ffmpeg -i video_origineavi video_finalempg

9将mpg转成avi

ffmpeg -i video_originempg video_finaleavi

10将avi转成gif动画(未压缩)

ffmpeg -i video_origineavi gif_animegif

11合成视频和音频

ffmpeg -i sonwav -i video_origineavi video_finalempg

12将avi转成flv

ffmpeg -i video_origineavi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finaleflv

13将avi转成dv

ffmpeg -i video_origineavi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finaledv

或者:

ffmpeg -i video_origineavi -target pal-dv video_finaledv

14将avi压缩成divx

ffmpeg -i video_origineavi -s 320x240 -vcodec msmpeg4v2 video_finaleavi

15将Ogg Theora压缩成Mpeg dvd

ffmpeg -i film_sortie_cinelerraogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminatempg

16将avi压缩成SVCD mpeg2

NTSC格式:

ffmpeg -i video_origineavi -target ntsc-svcd video_finalempg

PAL格式:

ffmpeg -i video_origineavi -target pal-dvcd video_finalempg

17将avi压缩成VCD mpeg2

NTSC格式:

ffmpeg -i video_origineavi -target ntsc-vcd video_finalempg

PAL格式:

ffmpeg -i video_origineavi -target pal-vcd video_finalempg

18多通道编码

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

19从flv提取mp3

ffmpeg -i sourceflv -ab 128k destmp3

第四组

1、将文件当做直播送至live

ffmpeg -re -i localFilemp4 -c copy -f flv rtmp://server/live/streamName

2、将直播媒体保存至本地文件

ffmpeg -i rtmp://server/live/streamName -c copy dumpflv

3、将其中一个直播流,视频改用h264压缩,音频不变,送至另外一个直播服务流

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

4、将其中一个直播流,视频改用h264压缩,音频改用faac压缩,送至另外一个直播服务流

ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream

5、将其中一个直播流,视频不变,音频改用faac压缩,送至另外一个直播服务流

ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream

6、将一个高清流,复制为几个不同视频清晰度的流重新发布,其中音频不变

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

7、功能一样,只是采用-x264opts选项

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k

8、将当前摄像头及音频通过DSSHOW采集,视频h264、音频faac压缩后发布

ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

9、将一个JPG经过h264压缩循环输出为mp4视频

ffmpegexe -i INPUTjpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 06 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUTmp4

10、将普通流视频改用h264压缩,音频不变,送至高清流服务(新版本FMS live=1)

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃

文/骚之哈塞给(作者)

FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。

本文将简要介绍一下 FFMPEG 库的基本目录结构及其功能,然后详细介绍一下我们在日常工作中,如何使用 ffmpeg 提供的工具来处理音视频文件。

在讲解 FFMPEG 命令之前,我们先要介绍一些音视频格式的基要概念。

我们按使用目的可以将 FFMPEG 命令分成以下几类:

然后将编码的数据包传送给解码器(除非为数据流选择了流拷贝,请参阅进一步描述)。 解码器产生未压缩的帧(原始视频/ PCM音频/ ),可以通过滤波进一步处理(见下一节)。 在过滤之后,帧被传递到编码器,编码器并输出编码的数据包。 最后,这些传递给复用器,将编码的数据包写入输出文件。

默认情况下,ffmpeg只包含输入文件中每种类型(视频,音频,字幕)的一个流,并将其添加到每个输出文件中。 它根据以下标准挑选每一个的“最佳”:对于视频,它是具有最高分辨率的流,对于音频,它是具有最多channel的流,对于字幕,是第一个字幕流。 在相同类型的几个流相等的情况下,选择具有最低索引的流。

您可以通过使用-vn / -an / -sn / -dn选项来禁用某些默认设置。 要进行全面的手动控制,请使用-map选项,该选项禁用刚描述的默认设置。

下面我们就来详细介绍一下这些命令。

FFMPEG 可以使用下面的参数进行基本信息查询。例如,想查询一下现在使用的 FFMPEG 都支持哪些 filter,就可以用 ffmpeg -filters 来查询。详细参数说明如下:

接下来介绍的是 FFMPEG 处理音视频时使用的命令格式与参数。

下面是 FFMPEG 的基本命令格式:

ffmpeg 通过 -i 选项读取输任意数量的输入“文件”(可以是常规文件,管道,网络流,抓取设备等,并写入任意数量的输出“文件”。

原则上,每个输入/输出“文件”都可以包含任意数量的不同类型的视频流(视频/音频/字幕/附件/数据)。 流的数量和/或类型是由容器格式来限制。 选择从哪个输入进入到哪个输出将自动完成或使用 -map 选项。

要引用选项中的输入文件,您必须使用它们的索引(从0开始)。 例如。 第一个输入文件是0,第二个输入文件是1,等等。类似地,文件内的流被它们的索引引用。 例如。 2:3是指第三个输入文件中的第四个流。

上面就是 FFMPEG 处理音视频的常用命令,下面是一些常用参数:

-an(输出) 禁用录音。

-acodec编解码器(输入/输出) |设置音频编解码器。这是-codec的别名:a。

-sample_fmt [:stream_specifier] sample_fmt(输出,每个流) |设置音频采样格式。使用-sample_fmts获取支持的样本格式列表。

-af filtergraph(输出) |创建由filtergraph指定的过滤器图,并使用它来过滤流。

了解了这些基本信息后,接下来我们看看 FFMPEG 具体都能干些什么吧。

首先通过下面的命令查看一下 mac 上都有哪些设备。

注意,桌面的输入对帧率没有要求,所以不用限制桌面的帧率。其实限制了也没用。

ffmpeg -f avfoundation -i 1:0 -r 2997 -c:v libx264 -crf 0 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k outflv

流拷贝是通过将 copy 参数提供给-codec选项来选择流的模式。它使得ffmpeg省略了指定流的解码和编码步骤,所以它只能进行多路分解和多路复用。 这对于更改容器格式或修改容器级元数据很有用。 在这种情况下,上图将简化为:

由于没有解码或编码,速度非常快,没有质量损失。 但是,由于许多因素,在某些情况下可能无法正常工作。 应用过滤器显然也是不可能的,因为过滤器处理未压缩的数据。

上面的命令表式的是音频、视频都直接 copy,只是将 mp4 的封装格式转成了flv。

在编码之前,ffmpeg可以使用libavfilter库中的过滤器处理原始音频和视频帧。 几个链式过滤器形成一个过滤器图形。 ffmpeg区分两种类型的过滤器图形:简单和复杂。

简单的过滤器图是那些只有一个输入和输出,都是相同的类型。 在上面的图中,它们可以通过在解码和编码之间插入一个额外的步骤来表示:

简单的filtergraphs配置了per-stream-filter选项(分别为视频和音频使用-vf和-af别名)。 一个简单的视频filtergraph可以看起来像这样的例子:

请注意,某些滤镜会更改帧属性,但不会改变帧内容。 例如。 上例中的fps过滤器会改变帧数,但不会触及帧内容。 另一个例子是setpts过滤器,它只设置时间戳,否则不改变帧。

复杂的过滤器图是那些不能简单描述为应用于一个流的线性处理链的过滤器图。 例如,当图形有多个输入和/或输出,或者当输出流类型与输入不同时,就是这种情况。

复杂的过滤器图使用-filter_complex选项进行配置。 请注意,此选项是全局性的,因为复杂的过滤器图形本质上不能与单个流或文件明确关联。

-lavfi选项等同于-filter_complex。

一个复杂的过滤器图的一个简单的例子是覆盖过滤器,它有两个视频输入和一个视频输出,包含一个视频叠加在另一个上面。 它的音频对应是amix滤波器。

先通过 ffplay 找到要删除 LOGO 的位置

使用 delogo 滤镜删除 LOGO

crop 格式:crop=out_w:out_h:x:y

如果要修改为垂直翻转可以用vflip。

首先创建一个 inputstxt 文件,文件内容如下:

file '1flv'

file '2flv'

file '3flv'

然后执行下面的命令:

E:/upload_code/FFmpeg/ffmpegexe -i E://2010/04/26/1272277112flv -y -ss 00:00:09 -t 00:00:10 -s 320240 -f mjpeg -vframes 10 E:/2010/04/26/1272277112jpg

网络视频先保存下来再截取应该是不可以直接 *** 作网络视频的

以上就是关于FFmpeg功能命令汇总全部的内容,包括:FFmpeg功能命令汇总、ffmpeg 常用命令、ffmpeg如何截取网络视频中的某一帧等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9459876.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存