FFmpeg最常用命令参数详解及应用实例

news2024/11/15 18:03:20

FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器,提供了录制、转换以及流化音视频的完整解决方案。

ffmpeg命令行参数解释

ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
ffmpeg [[ options ][ -i input_file ]]... {[ options ] output_file}...

    参数选项:

  •     (1) -an: 去掉音频 -vn:去掉视频 -t:持续时长 -ss:起始时间 -r:帧率(默认为25) -s:帧大小(W*H) -aspect:横纵比(4:3,16:9等)
  •     (2) -acodec: 音频选项, 一般后面加copy表示拷贝
  •     (3) -vcodec:视频选项,一般后面加copy表示拷贝
  •     格式选项:
  •     (1) h264: 表示输出的是h264的视频裸流
  •     (2) mp4: 表示输出的是mp4的视频
  •     (3) mpegts: 表示ts视频流

ffmpeg命令格式转换

视频格式转换:

ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts              # 将h264格式转为ts格式

ffmpeg -i test.h264 -vcodec copy -f mp4 test.mp4              # 将h264格式转为MP4格式

视频拼接: 

ffmpeg -i "concat:test1.h264|test2.h264" -vcodec copy -f h264 out12.h264

# 将test1.h264和test2.h264视频拼接起来,输出out12.h264视频

视频截图:

ffmpeg -i test.mp4  -t 0.001 -s 352x240 1.jpg    # 在test.mp4中截图

ffmpeg -i test.mp4 -vframes 30 -y -f gif 1.gif       # 将test.py前30帧做成gif动图

ffmpeg -i test.mp4 -t 10 -r 1 pic-%03d.jpg           # 从视频前10s中取图像,1s提取一帧

常用应用例子

#强制显示宽高
ffplay -i -volume 1 -x 800 -y 480 test_1920x1080.mp4


-framerate 25 :指定帧率
-fs :全屏播放

-an :禁用音频
-vn :禁用视频
-sn :禁用字幕
-ss pos :根据设置的秒进行定位
#在5分 55秒的位置进行播放
ffplay -i -volume 1 -x 800 -y 480 -fs test_1280x720.mp4 -ss 00:05:55

-acodec :指定音频解码器  -acodec libfdk_aac
-vcodec :指定视频解码器  -vcodec h264

-window_title lpf  :指定播放器播放视频的名称
-t 指定播放的时长
-loop number :循环播放的次数
-nostats :不输出视频相关信息,通过这个可以查看ffplay 如何收集的这些信息,自己写播放器可以借鉴
-ast :执行音频流索引
-vst :执行视频流索引,这个只有在视频包含多个流才会生效
#下面这个是执行视频流索引是4  音频索引是3
ffplay -i  -x 800 -y 480  mult.ts -vst 4 -ast 3

-autoexit :播放完毕自动退出
#指定播放时间是5秒  播放完毕自动退出
ffplay -i  -x 800 -y 480  mult.ts -t 5 -autoexit

#通过-codec:v h264 指定使用特定的解码器进行解码播放 
ffplay -i test_1280x720.mp4 -x 800 -y 480  -t 5 -autoexit -codec:v h264

#通过-codec:a 指定使用libfdk_aac 来解码音频数据
ffplay -i test_1280x720.mp4 -x 800 -y 480  -t 5 -autoexit -codec:a libfdk_aac

播放rtmp流媒体:

#播放rtmp 流媒体
ffplay -window_title "cctv1" -x 640 -y 480 rtmp://media3.scctv.net/live/scctv_800

#播放yuv 裸视频  必须指定宽高以及视频格式  帧率指定不指定都行
ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv

#播放rgb
ffplay -pixel_format rgb24 -video_size 320x240 -i rgb24_320x240.rgb

#播放pcm  -ar 执行采样率  -ac指定通道数  -f 指定位深
ffplay -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm

 ffplay 简单的过滤器:

#ffplay 简单的过滤器

#视频旋转
ffplay -i test.mp4 -vf transpose=1
ffplay -i test_1280x720.mp4 -x 800 -y 480  -t 25 -autoexit -codec:a libfdk_aac  -window_title lpf -vf transpose=1

#视频反转
ffplay test.mp4 -vf hflip
ffplay test.mp4 -vf vflip

ffplay -i test_1280x720.mp4 -x 800 -y 480  -t 25 -autoexit -codec:a libfdk_aac  -window_title lpf -vf vflip

#旋转和反转
ffplay test.mp4 -vf hflip,transpose=1

#音频变速播放
ffplay -i test.mp4 -af atempo=2
ffplay -i test_1280x720.mp4 -x 800 -y 480  -t 25 -autoexit -codec:a libfdk_aac  -window_title lpf -af atempo=2

#视频变速播放
ffplay -i test.mp4 -vf setpts=PTS/2

#音频和视频同时变速
ffplay -i test_1280x720.mp4 -x 800 -y 480  -t 25 -autoexit -codec:a libfdk_aac  -window_title lpf -af atempo=2 -vf setpts=PTS/2

#-i 表示输入  -codec copy 不重新进行编码  -ss 起始时间  -t 指定时长  -f 指定输出格式
ffplay -i test_1280x720.mp4 -codec copy -ss 10 -t 20 -f flv out.mp4

ffmpeg 参数说明: 

#ffmpeg 参数说明
-i 设定输入流
-f 设定输出格式(format)
-ss 开始时间
-t 时间长度

-aframes 设置要输出的音频帧数
-b:a 音频码率
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,如
果用copy表示原始编解码数据必
须被拷贝。

-an 不处理音频
-af 音频过滤器
ffmpeg -i test_1280x720.mp4 -b:a 192k -ar 48000 -ac 2 -acodec aac -aframes 200 out2.mp3

#视频
-vframes 设置要输出的视频帧数
-b 设定视频码率
-b:v 视频码率
-r 设定帧速率
-s 设定画面的宽与高
-vn 不处理视频
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777

-vcodec 设定视频编解码器,如果用copy表示原始编解码数据必须被拷贝。
-vf 视频过滤器

ffmpeg -i test.mp4 -vframes 300 -b:v 300k -r 30 -s 640x480 -aspect 16:9 -vcodec libx265

#提取音频数据  -acodec copy 直接拷贝音频编码数据  -VN 禁止视频  
ffmpeg -i test_1280x720.mp4 -acodec copy -vn audio.mp4

#提取视频   -vcodec copy 直接拷贝视频编码数据    -an 禁止音频
ffmpeg -i test_1280x720.mp4 -vcodec copy -an video.mp4

#提取视频
ffmpeg -i test_1280x720.mp4 -vcodec copy -an test_lpf.h264

#强制格式
ffmpeg -i test_1280x720.mp4 -vcodec libx264 -an test_lpf.h264


#提取音频
ffmpeg -i test_1280x720.mp4 -acodec copy -vn test_lpf.aac
#强制格式
ffmpeg -i test_1280x720.mp4 -acodec libmp3lame -vn test_lpf.mp3

#提取yuv数据  提取3秒数据,分辨率和源视频一致
ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv

#提取3秒数据,分辨率转为320x240
ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p -s  640*480 yuv420p_320x240.yuv
#播放yuv 视频数据 必须指定分辨率 否则会绿屏以及花屏
ffplay -i yuv420p_640x480.yuv -s 640*480

#提取3秒数据,分辨率转为320x240
ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb
#rgb 格式的数据进行播放 必须指定 pixel_format rgb24  必须指定分辨率  否则播放不出来  如果不指定pixel_format 会花屏绿屏
ffplay -i rgb24_320x240.rgb -pixel_format rgb24 -video_size 320*240

#RGB和YUV之间的转换
ffmpeg -s 640*480 -i yuv420p_640x480.yuv  -pix_fmt yuv420p -pix_fmt rgb24 -s 640*480 rgb24_640x480.rgb
#播放rgb 必须指定pixel_format 以及分辨率
ffplay -i rgb24_640x480.rgb -pixel_format rgb24 -s 640*480

#更改封装格式
ffmpeg -i test_1280x720.mp4 -vcodec copy -acodec copy test_copy.ts
ffmpeg -i test_1280x720.mp4 -codec copy test_copy2.ts

#改变编码格式
ffmpeg -i test_1280x720.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv

#改变帧率
ffmpeg -i test_1280x720.mp4 -r 15 output2.mp4

#修改视频码率:
ffmpeg -i test.mp4 -b 400k output_b.mkv

#修改视频码率:
ffmpeg -i test.mp4 -b:v 400k output_bv.mkv

#修改音频码率: 如果不想重新编码video,需要加上-vcodec copy
ffmpeg -i test.mp4 -b:a 192k output_ba.mp4


#修改音视频码率:
ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4

#修改视频分辨率:
ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4

#修改音频采样率: 
ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4
#画中画 副视频停下之后默认显示最后一帧图像
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20[out]"

#eof_action=1 表示短的视频停止之后都会停止
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20:eof_action=1[out]"

#短的视频结束了 画面直接结束
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20:eof_action=2[out]"

#shortest=1 表示短的视频停止之后都会停止
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20:shortest =1[out]"


#对副视频视频进行缩放
ffplay -i input.mp4 -vf "movie=sub_320x240.mp4,scale=640x480[sub];[in][sub]overlay=x=20:y=20[out]"

#跑马灯
 ffplay -i test_60_1280x720.mp4 -vf "movie=test_60_1280x720.mp4,scale=320x270[test];[in][test]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*main_h*0.7[out]"

#双宫格
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -filter_complex "nullsrc=size=640x480[base];[0:v]setpts=PTS-STARTPTS,scale=320x240[upperleft];[1:v]setpts=PTS-STARTPTS,scale=320x240[upperright];[base][upperleft]overlay=shortest=1[tmp1];[tmp1][upperright]overlay=shortest=1:x=320" out2.mp4


#四宫格
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.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" out3.mp4

 我的热门文章推荐

  • 多路视频直播用在线云导播切换的效果测试
  • 如何把视频转换生成二维码,扫码直接播放?
  • 有哪些网站上传视频是不会插入广告的?
  • 怎么把视频生成二维码?微信扫二维码就可以观看?不要广告的
  • 常用照片尺寸对照表,照片大小看这个表就对了
  • 视频直播推流攻略(整理的各大平台推流界面)
  • html5视频倍速播放功能
  • 教你一招:多个视频如何实现列表播放?
  • 微信公众号如何实现视频列表播放视频的功能
  • h5视频倍速播放功能(视频多倍速观看功能的实例)
  • 怎样配置FTP服务器
  • 如何使用FTP上传文件(FTP文件传输)
  • OBS直播工具使用指南/OBS推送直播视频源到服务器的工具
  • QQ浏览器劫持video标签加载自己的广告(怎么解决?)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

lambada表达式

负壹、 函数式编程 Java为什么要支持函数式编程? 代码简洁 函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。 多核友好 Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下parallel()方法。 Jav…

C++ -- STL简介、string的使用

什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 STL的版本 原始版本:Alexander Stepanov、Meng Lee 在惠普实验室完成的原…

Person p=new student()是什么意思

记住:父类引用子类对象 Student t new Student(); 实例化一个Student的对象,这个不难理解。但当我这样定义时:Person p new Student(); 这代表什么意思呢? 很简单,它表示我定义了一个Person类型的引用,指…

内大892复试真题16年

内大892复试真题16年 1. 输出三个数中较大数2. 求两个数最大公约数与最小公倍数3. 统计字符串中得字符个数4. 输出菱形5. 迭代法求平方根6. 处理字符串(逆序、进制转换)7. 寻找中位数8. 输入十进制输出n进制1. 输出三个数中较大数 问题 代码 #include <iostream>usin…

如何保护页面端的企业邮箱

作为日常工作交流中不可或缺的工具&#xff0c;电子邮件的安全性一直是备受关注的话题。页面是企业邮箱用户日常邮箱使用的重要接入终端&#xff0c;企业邮箱承载着企业的重要业务内容和关键数据。这个环节的安全问题会对企业产生深远的影响&#xff0c;信息安全建设的重要性不…

CharGPT无法替代的职场发展底层逻辑

​ 什么是职场发展的两大底层逻辑&#xff1f; 一为对事&#xff0c;一为对人&#xff0c;二者不可偏废&#xff0c;否则就会成为“职场上的瘸子”。 01 在刚开始工作的很长一段时间里&#xff0c;我遇到了同一个问题 - 虽然我对自己的工作认真负责&#xff0c;但职业发展却并…

移动硬盘文件或目录损坏且无法读取?分享恢复数据的方法

案例&#xff1a;移动硬盘提示无法访问&#xff0c;文件或目录损坏且无法读取&#xff1f; “这个移动硬盘两年没用了&#xff0c;今天拿出来找文件&#xff0c;插上电脑后移动硬盘打不开&#xff0c;提示无法访问&#xff0c;文件或目录损坏且无法读取。硬盘里有重要文件&…

在字节跳动做了5年软件测试,12月无情被辞,想给划水的兄弟提个醒

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入字节&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是5年的工作经验吧。 这5年之间完成了一次…

SpringBoot异常处理

目录 一、 错误处理 1. 默认规则 2. 定制错误处理逻辑 二、自定义异常处理 1. 实现 ErrorController 2. RestControllerAdvice/ControllerAdvice ExceptionHandler 实现自定义异常 3. 新建 UserController.class 测试 3 种不同异常的处理 4. 最终效果如下 补充 1. 参…

【数据结构】八大经典排序总结

文章目录一、排序的概念及其运用1.排序的概念2.常见排序的分类3.排序的运用二、常见排序算法的实现1.直接插入排序1.1排序思想1.2代码实现1.3复杂度及稳定性1.4特性总结2.希尔排序2.1排序思想2.3复杂度及稳定性2.4特性总结3.直接选择排序3.1排序思想3.2代码实现3.3复杂度及稳定…

《数据治理行业实践白皮书》正式发布,开辟数据治理新范式(附下载)

近日&#xff0c;作为首届未来数商大会协办单位之一&#xff0c;袋鼠云承办“首届未来数商大会——业数融合创新论坛”&#xff0c;与参会嘉宾共同探讨数据驱动企业业务增长提效的新思路。袋鼠云联合创始人、易知微CEO 宁海元发表主题演讲《数智视融合&#xff0c;构建数字产业…

Docker安装Cassandra数据库,在SpringBoot中连接Cassandra

简介 Apache Cassandra是一个高度可扩展的高性能分布式数据库&#xff0c;旨在处理许多商用服务器上的大量数据&#xff0c;提供高可用性而没有单点故障。它是NoSQL数据库的一种。首先让我们了解一下NoSQL数据库的作用。 NoSQL 数据库 NoSQL数据库&#xff08;有时称为“Not …

YOLO5-V7.0的python代码转成exe,方便离线部署

思路&#xff1a;用Pyinstaller打包&#xff0c;但有一些坑&#xff0c;踩完坑后成功运行&#xff0c;写个踩坑指南分享下。 前提&#xff1a;已经在conda 环境下安装完可以运行的yolo5代码&#xff0c;例如你的虚拟python环境叫yolo5&#xff0c;主代码是XXX.py&#xff08;这…

数字IC手撕代码--低功耗设计 Clock Gating

背景介绍芯片功耗组成中&#xff0c;有高达 40%甚至更多是由时钟树消耗掉的。这个结果的原因也很直观&#xff0c;因 为这些时钟树在系统中具有最高的切换频率&#xff0c;而且有很多时钟 buffer&#xff0c;而且为了最小化时钟 延时&#xff0c;它们通常具有很高的驱动强度。 …

《分布式技术原理与算法解析》学习笔记Day26

流量控制 什么是流量控制&#xff1f; 网络传输中的流量控制就是让发送方发送数据的速度不要太快&#xff0c;这样可以让接收方来得及接收数据&#xff0c;通常使用滑动窗口的方式来实现。 滑动窗口是指在任意时刻&#xff0c;发送方都维持一个连续的允许发送的数据大小&…

全国CSM敏捷教练认证将于2023年3月25-26开班,报名从速!

CSM&#xff0c;即Certified Scrum Master&#xff0c;是Scrum联盟发起的Scrum认证。 CSM可以帮助团队正确使用Scrum&#xff0c;从而提高项目整体成功的可能性。 CSM深刻理解Scrum的价值观、实践以及Scrum框架。 CSM是“服务型领导”&#xff0c;帮助Scrum团队一起紧密合作。 …

QT案例 Qt Creator 使用QuaZIP加密压缩解压ZIP文件

QT开发中部分项目可能会涉及对项目数据的一些指定文件的打包压缩以及指定目录下的解压&#xff0c;此时也需要对数据数据进行加密以确保数据的安全性。此时就可以使用Quazip实现相关功能。 QuaZIP是使用Qt&#xff0c;C对ZLIB进行简单封装的用于压缩ZIP以及解压缩ZIP的开源库。…

Hive表-----数据清洗

以下内容所需要的环境 &#xff1a;hive 、beeline、Zeppelin&#xff08;可视化界面如何操作表格&#xff09; 一、准备表格 1、上传csv表格至linux目录中 百度网盘自取&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1xd5MdXiBDLBUtP07kpgl5Q?pwd2ema 提取码&…

python+appium+夜神模拟器(app抓包爬虫)

安装模块 pip install appium-python-client 安装andriodSDK 官网下载&#xff1a;https://android-sdk.en.softonic.com/download 自动下载一个压缩包&#xff0c;解压后就是一个文件夹放各种需要的文件&#xff0c;将解压的路径配置到环境变量中。 然后添加到path中。 下…

带你了解“函数递归”

目录 1. 什么是递归&#xff1f; 2. 函数递归的必要条件 2.1 接收一个整型值&#xff08;无符号&#xff09;&#xff0c;按照顺序打印它的每一位。 代码如下&#xff1a; 2.2 编写一个函数&#xff0c;不用临时变量求字符串长度 代码如下&#xff1a; 2.3 递归与迭代 …