草庐IT

FFmpeg常用命令汇总

梧桐樹下 2024-07-09 原文

FFmpeg的命令繁多,为了方便查询,在此作一个汇总
可参考:https://ffmpeg.org/ffmpeg.html#Options

目录

一、命令基本格式及参数

ffmpeg [global_options] {[input_file_options] -i input_url} ...
						 {[output_file_options] output_url} ...

一些参数:

参数说明
-f fmt(输入/输出)强制输入或输出文件格式
-y(全局参数)覆盖输出文件而不询问
-n(全局参数)不要覆盖输出文件,如果指定的输出文件已经存在,请立即退出
-c:[stream_specifier] codec选择一个编码器或解码器,用于一个或多个流。codec是编解码器的名称或copy指示流不被重新编码。例如:ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
-t duration n(输入/输出)用作输入选项时(在 -i之前),限制从输入文件读取的数据的持续时间。用作输出选项时(在输出url之前),在到达持续时间之后停止输出
-vframes num(输出)设置要输出的视频帧的数量
-vcodec 编解码器(输出)设置视频编解码器
-vf filtergraph(输出)创建由filtergraph指定的过滤器图,并使用它来过滤流
-acodec 编解码器(输入/输出)设置音频编解码器
-sample_fmt[:stream_specifier] sample_fmt设置音频采样格式
-af filtergraph(输出)创建由filtergraph指定的过滤器图,并使用它来过滤流

二、基本信息查询命令

ffmpeg -h 

输出 f f m p e g 基本命令帮助信息,下面介绍下比较重要的配置选项 \color{blue}{输出ffmpeg基本命令帮助信息,下面介绍下比较重要的配置选项} 输出ffmpeg基本命令帮助信息,下面介绍下比较重要的配置选项

Print help / information / capabilities:
-L                  show license  // 显示许可信息 
-h topic            show help  // 显示帮助信息
-version            show version  // 显示版本				
-buildconf          show build configuration  // 显示编译配置
-formats            show available formats  // 显示可用格式 , 其等价于 muxers + demuxers 组合 
-muxers             show available muxers  // 显示可用的复用器
-demuxers           show available demuxers  // 显示可用的解复用器
-devices            show available devices  // 显示可用设备
-codecs             show available codecs  // 显示可用的编解码器 , 其等价于 encoders + decoders 组合
-decoders           show available decoders  // 显示可用的解码器
-encoders           show available encoders  // 显示可用的编码器
-bsfs               show available bit stream filters  // 显示可用的比特流 filters 过滤器 
-protocols          show available protocols  // 显示可用协议 , 如 rtmp , rtsp 等 ; 
-filters            show available filters  // 显示可用的过滤器 , 可用于 : 改变播放速度 , 加水印 , 加 Logo 
-pix_fmts           show available pixel formats  // 显示可用的像素格式
-layouts            show standard channel layouts  // 显示标准声道名称 
-sample_fmts        show available audio sample formats  // 显示可用的音频采样格式 
-colors             show available color names  // 显示可用的颜色名称 
-sources device     list sources of the input device  // 列出输入设备来源 
-sinks device       list sinks of the output device  // 列出输出设备接收器
-hwaccels           show available HW acceleration methods  // 显示可用的硬件加速方法 

查询指定格式的相关解复用 / 复用信息: \color{blue}{查询指定格式的相关解复用/复用信息: } 查询指定格式的相关解复用/复用信息:

ffmpeg -formats | findstr flv

查询指定的编解码器信息: \color{blue}{查询指定的编解码器信息: } 查询指定的编解码器信息:

ffmpeg -codecs | findstr 264

查看具体的 f f m p e g 命令分类所支持的参数,如: \color{blue}{查看具体的 ffmpeg 命令分类所支持的参数,如: } 查看具体的ffmpeg命令分类所支持的参数,如:

ffmpeg -h format=flv  
ffmpeg -h encoder=libx264

三、分解、复用

抽取音频流 \color{blue}{抽取音频流} 抽取音频流

ffmpeg -i input.mp4 -acodec copy -vn out.aac

vn:v代表视频,n代表no

抽取视频流 \color{blue}{抽取视频流} 抽取视频流

ffmpeg -i input.mp4 -vcodec copy -an out.h264 

转格式 \color{blue}{转格式} 转格式

ffmpeg -i input.mp4 -vcodec copy -acodec copy out.flv

转 f m p 4 \color{blue}{转fmp4} fmp4

ffmpeg -i input.mp4 -movflags frag_keyframe+empty_moov fragmented.mp4

empty_moov:将导致输出100%分段

音视频合并 \color{blue}{音视频合并} 音视频合并

ffmpeg -i input.h264 -i input.aac -vcodec copy -acodec copy out.mp4

四、处理原始数据

抽取 y u v 数据 \color{blue}{抽取yuv数据} 抽取yuv数据

ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv 

视频中提取图片 \color{blue}{视频中提取图片} 视频中提取图片

ffmpeg -i input.mp4 -r 30 -ss 00:00:10 -t 2 image-%3d.jpg 

-r:每秒提取30帧
-t:取t秒时间的帧

截取视频中指定时间的某一帧图片 \color{blue}{截取视频中指定时间的某一帧图片} 截取视频中指定时间的某一帧图片

ffmpeg -i input.mp4 -ss 00:00:50 -frames:v 1 out1.jpg

-frames:v 后接张数

图片文件转成 Y U V 文件 \color{blue}{图片文件转成YUV文件} 图片文件转成YUV文件

ffmpeg -i image.png -pix_fmt yuv420p out.yuv

Y U V 转 H 264 \color{blue}{YUV转H264} YUVH264

ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i input.yuv -c:v libx264 -f rawvideo out.h264 

提取 P C M 数据 \color{blue}{提取PCM数据} 提取PCM数据

ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
ffplay -ar 44100 -ac 2 -f s16le -i out.pcm

P C M 转 W A V \color{blue}{PCM转WAV} PCMWAV

ffmpeg -f s16be -ar 8000 -ac 2 -acodec pcm_s16be -i input.pcm output.wav

五、滤镜

添加水印 \color{blue}{添加水印} 添加水印

ffmpeg -i input.mp4  -vf "movie=logo.png,scale=64:48[watermask];[in][watermask] overlay=30:10 [out]" out.mp4

vf: movie指定logo位置,scale指定大小overlay指定logo摆放的位置

删除水印 \color{blue}{删除水印} 删除水印

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

ffplay -i input.flv -vf delogo=x=806:y=20:w=70:h=80:show=1 

删除水印

ffmpeg -i input.flv -vf delogo=x=806:y=20:w=70:h=80 output.flv

视频缩小 \color{blue}{视频缩小} 视频缩小

ffmpeg -i input.mp4 -vf scale=iw/2:-1 out.mp4

-vf scale指定使用过滤器scale,iw指定按整型取视频宽度,-1表示高度随宽度一起变化,视频缩小了一倍

视频裁剪 \color{blue}{视频裁剪} 视频裁剪

ffmpeg -i input.mov  -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy -video_size 1280x720 out.mp4

倍速播放 \color{blue}{倍速播放} 倍速播放

ffmpeg -i input.ts -filter:v "setpts=2.0*PTS" output.ts

视频

ffmpeg -i input.ts -filter:a:1 "setpts=2.0*PTS" output.ts
ffmpeg -i input.ts -filter:a "atempo=2.0" -vn output.ts

音频, atempo 取值 0.5-2.0

同步改变音视频播放速度 \color{blue}{同步改变音视频播放速度} 同步改变音视频播放速度

ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" out.mp4

[0:v]表示第一个(文件索引号是0)文件的视频作为输入
map:数据流选择,可用于处理复杂输出,如可将指定的多路流输出到一个输出文件,也可指定输出到多个文件。上面是将复杂滤镜输出的视频和音频输出到指定文件中

对称视频 \color{blue}{对称视频} 对称视频

ffmpeg  -i input.mp4 -filter_complex "[0:v]pad=w=2*iw[a];[0:v]hflip[b];[a][b]overlay=x=w" out.mp4

hfilp:水平翻转
vfilp:垂直翻转

画中画 \color{blue}{画中画} 画中画

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[1:v]scale=w=176:h=144:force_original_aspect_ratio=decrease[ckout];[0:v][ckout]overlay=x=W-w-10:y=0[out]" -map "[out]" -movflags out.mp4

视频顺时针旋转 90 ° \color{blue}{视频顺时针旋转90°} 视频顺时针旋转90°

ffmpeg -i input.mp4 -vf "transpose=1" out.mp4  

transpose=2:逆时针旋转90°
transpose=3:顺时针旋转90°,再水平翻转
transpose=2:逆时针旋转90°,水平翻转

六、拼接与裁剪

裁剪 \color{blue}{裁剪} 裁剪

ffmpeg -i input.mp4 -ss 00:00:00 -t 10 out.mp4

ss:指定开始时间
-t:被裁剪后的时长

视频合并 \color{blue}{视频合并} 视频合并

ffmpeg -f concat -i inputs.txt -c copy out.flv

inputs.txt内容如下:

file '1.flv'
file '2.flv'
file '3.flv'

音频合并 \color{blue}{音频合并} 音频合并

ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex '[0:0] [1:0] concat=n=2:v=0:a=1 [a]' -map [a] out.mp3

音频混音 \color{blue}{音频混音} 音频混音

ffmpeg -i input1.mp4 -i input2.mp3 -filter_complex "[0:a] [1:a]amerge=inputs=2[aout]" -map "[aout]" -ac 2 out.aac

inputs:输入的数量,默认为2

h l s 切片 \color{blue}{hls切片} hls切片

ffmpeg -i input.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls  out.m3u8

-strict -2 指明音频使有AAC
-f hls 转成 m3u8 格式

删除特定音频 \color{blue}{删除特定音频} 删除特定音频

ffmpeg -i input.mp4 -map 0 -map -0:a:1 out.mp4

-map 0 选择一个输入文件中的所有数据(包括音频和视频)
-map -0 : a : 1 反向map,忽略第二个音轨

为某视频添加音频 \color{blue}{为某视频添加音频} 为某视频添加音频

ffmpeg -i video.mp4 -i audio.mp3 -c copy -map 0:v:0 -map 1:a:0 out.mp4

-map 0:v:0 选择第0个输入文件的第0个轨道
-map 1:a:0 选择第1个输入文件的第0个轨道

从视频中替换音频 \color{blue}{从视频中替换音频} 从视频中替换音频

ffmpeg -i video_with_audio.mp4 -i another_audio.wav -map 0:0 -map 1:0 -c:v copy -c:a libmp3lame out.mp4

拼接成四宫格 \color{blue}{拼接成四宫格} 拼接成四宫格

ffmpeg -re -i input1.mp4 -re -i input2.mp4 -re -i input3.mp4 -re -i input4.mp4 
       -filter_complex "nullsrc=size=640x480 [base]; 
       [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; 
       [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; 
       [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; 
       [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; 
       [base][upperleft] overlay=shortest=1 [tmp1]; 
       [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; 
       [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; 
       [tmp3][lowerright] overlay=shortest=1:x=320:y=240" 
       -c:v libx264 out.mp4

四张图片合并 \color{blue}{四张图片合并} 四张图片合并

ffmpeg -re -i input1.jpg -re -i input2.jpg -re -i input3.jpg -re -i input4.jpg 
-filter_complex "nullsrc=size=7680x4320 [base];
[0:v] setpts=PTS-STARTPTS,scale=3840x2160 [upperleft];
[1:v] setpts=PTS-STARTPTS, scale=3840x2160 [upperright];
[2:v] setpts=PTS-STARTPTS, scale=3840x2160 [lowerleft];
[3:v] setpts=PTS-STARTPTS, scale=3840x2160 [lowerright]; 
[base][upperleft] overlay=shortest=1 [tmp1]; 
[tmp1][upperright] overlay=shortest=1:x=3840 [tmp2]; 
[tmp2][lowerleft] overlay=shortest=1:y=2160 [tmp3]; 
[tmp3][lowerright] overlay=shortest=1:x=3840:y=2160" output.jpg

七、直播

推流 \color{blue}{推流} 推流

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/streamName

拉流保存 \color{blue}{拉流保存} 拉流保存

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

实时推流 \color{blue}{实时推流} 实时推流

ffmpeg -framerate 15 -f avfoundation -i "1" -s 1280x720 -c:v libx264 -f flv rtmp://localhost:1935/live/room

八、ffplay

播放 y u v 数据 \color{blue}{播放yuv数据} 播放yuv数据

ffplay -pix_fmt nv12 -s 192x144 source.yuv

播放 Y U V 中的 Y 平面 \color{blue}{播放YUV中的 Y平面} 播放YUV中的Y平面

ffplay -pix_fmt nv21 -s 640x480 -vf extractplanes='y' source.yuv 

播放器打印输出调试日志 \color{blue}{播放器打印输出调试日志} 播放器打印输出调试日志

ffplay -v debug out.mp4

播放器打印详细调试日志 \color{blue}{播放器打印详细调试日志} 播放器打印详细调试日志

ffplay -loglevel 56 out.mp4

九、其它

视频转 J P E G \color{blue}{视频转JPEG} 视频转JPEG

ffmpeg -i input.flv -r 1 -f image2 image-%3d.jpeg

视频转 g i f \color{blue}{视频转gif} 视频转gif

ffmpeg -i input.mp4 -ss 00:00:00 -t 10 out.gif

图片转视频 \color{blue}{图片转视频} 图片转视频

ffmpeg  -f image2 -i image-%3d.jpeg out.mp4

调整音视频参数 \color{blue}{调整音视频参数} 调整音视频参数

ffmpeg -i input.mp4 -s 500x600 -vcodec libx264 -r 30 -g 100 -acodec aac -b 200k -ac 2 -ab 32 -ar 44100 -f mp4 output.mp4

-s:指定宽高
-r :帧率
-g:gop 图像组,多少帧有一个关键帧
-b:码率
-ac:声道数
-ar:采样率
-ab:采样位数

修改视频分辨率 \color{blue}{修改视频分辨率} 修改视频分辨率

ffmpeg -i input.mp4 -vf scale=1920:1080 -y output.mp4

-vf scale 后面是宽:高,如果某个值为-1,表示按原来的比例自动生成

m p 4 的 f a s t s t a r t 转写 \color{blue}{mp4的faststart转写} mp4faststart转写

ffmpeg -i http://xxxx/input.mp4 -c copy -movflags +faststart  output.mp4

以 j s o n 形式展示视频信息 \color{blue}{以json形式展示视频信息} json形式展示视频信息

ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

设置日志级别及输出重定向 \color{blue}{设置日志级别及输出重定向} 设置日志级别及输出重定向

ffplay -report -loglevel "info" -i input.mp4 > output.txt 2>&1

-report:把 ffmpeg 命令行和终端的输出都记录到一个以时间戳命名的文件中
-loglevel “info”:也可以-v 32,32是 info 级别对应的数值
> output.txt 2>&1:将输出重定向到 output.txt 文件中

设置 h t t p 请求头 \color{blue}{设置http请求头} 设置http请求头

ffmpeg/ffplay -headers $'Ranger-Id:xxxxxxxxxxx\r\nContent-Licese:xxxxxxxxxxx\r\nContent-Auth:xxxxxxx' -i "http://xxxx.m3u8"

有关FFmpeg常用命令汇总的更多相关文章

  1. 华为常用命令 - 2

    system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100

  2. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  3. ruby - 无法在 Ruby 中将 ffmpeg 作为子进程运行 - 2

    我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope

  4. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  5. 酷早报:10月21日全球Web3加密行业重大资讯大汇总 - 2

    2022年10月21日星期五【数据指标】加密货币总市值:$0.95万亿BTC市值占比:38.51%恐慌贪婪指数:23极度恐慌 【今日快讯】1、【政讯】1.1.1、美联储布拉德:市场预期美联储11月会加息75个基点1.1.2、美联储哈克:将维持加息一段时间1.2、美国10年期国债收益率触及4.197%,为2008年6月以来最高1.3、法国数字转型部长:政府将专注于DeFi和Web31.4、巴西ATM机将于11月3日起支持USDT1.5、美众议院副议长将于11月初加入a16zCrypto担任政府事务主管1.6、香港数字资产托管机构FirstDigitalTrust首席执行官:香港仍是安全

  6. ruby - 如何使用 bash 命令或 Ruby 使用 ffmpeg 将 mp4 文件批量转换为 ogg - 2

    我运行的是OSX,对视频转换一无所知。但我有大约200个视频都是mp4格式,无法在Firefox中播放。我需要将它们转换为ogg才能使用html5视频标签。这些文件位于一个文件夹结构中,这使得一次一个地处理一个文件变得困难。我希望bash命令或Ruby命令遍历所有子文件夹并找到所有.mp4并转换它们。我找到了一份关于如何使用Google执行此操作的引用资料:http://athmasagar.wordpress.com/2011/05/12/a-bash-script-to-convert-mp4-files-to-oggogv/#!/bin/bashforfin$(ls*mp4|se

  7. Java调用ffmpeg处理视频,并记录下遇到的坑 - 2

    目录需求基于JavaCV跨平台执行ffmpeg命令[^1]坑一内存不足坑二多个ffmpeg进程并行导致IO负载大,进而导致ioerror?坑三使用Java操作ffmpeg时,有时会卡死坑四Process的waitFor死锁问题及解决办法需求给透明背景的视频自动叠加一张背景图片基于JavaCV跨平台执行ffmpeg命令1我测试发现的本需求的最小依赖:dependency>groupId>org.bytedecogroupId>artifactId>ffmpeg-platform-gplartifactId>version>5.0-1.5.7version>dependency>核心代码:Stri

  8. 基于ffmpeg的视频处理与MPEG的压缩试验(下载安装使用全流程) - 2

    基于ffmpeg的视频处理与MPEG的压缩试验ffmpeg介绍与基础知识对提取到的图像进行处理RGB并转化为YUV对YUV进行DCT变换对每个8*8的图像块进行进行量化操作ffmpeg介绍与基础知识ffmpeg是视频和图像处理的工具包,它的下载网址是https://ffmpeg.org/download.html。页面都是英文且下载正确的包的路径笔者找的时候还费点劲,这里记录一下也方便读者。选中这个Windows下的下午files,选择第一个这里有essential和full版本的,大家根据需要自行选择版本包下载下载好之后,在官网上下载ffmpeg的full包,一共300+MB解压,然后安装b

  9. ruby-on-rails - Rails 在上传时使用 stremio-ffmpeg gem 给电影加水印 - 2

    我正在使用carrierwave将电影上传到amazons3,效果非常好。现在我想在上传时或上传后给电影加水印,我不知道,最好的方法是什么?我试过这个:movie_controller.rbAction上传视频movie=FFMPEG::Movie.new(@vid.video.url)puts"........................................"putsmovie.inspectif@vid.save只是为了查明视频是否是从stremio中捕获的。但后来我得到了找不到电影的错误,问题是它没有在amazons3存储桶中查找,它在我的本地服务器上查找Nosu

  10. 软考网络工程师复习指导--下午题必考-组网技术-华为命令汇总 - 2

    文章目录1、考试介绍2、软考网络工程师前景3、软考网络工程师考试内容4、华为命令总结1、考试介绍软考是一个以考试代替评职称的考试,每年都会举行两次考试,一般都在5月份和11月份考试,今年我们的省份取消了考试。具体参考官网中国计算机技术职业资格网可以在上面查看报考时间和报名等。本人准备2021年下半年全国计算机技术与软件专业技术中网络工程师,谁知道疫情就来的很巧,辛辛苦苦复习了三个月,终于整明白头绪了,但是天不遂人愿,疫情导致取消了考试,但是是害怕我是去捐款的吗?2、软考网络工程师前景随着计算机的远程信息化处理应用的高速发展和广泛应用,网络已成为经济发展的强大动力。计算机网络工程是计算机技术和通

随机推荐