FFMPEG数据封装格式、多媒体传输协议、音视频编解码器

 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 vflipffplay -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视频倍速播放功能(视频多倍速观看功能的实例)

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

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

相关文章

速通!腾讯发布《2024大模型十大趋势》

【写在前面】 腾讯发布的《2024大模型十大趋势》报告在2024世界人工智能大会上引起了广泛关注。该报告深入分析了人工智能领域的最新进展,特别是大模型技术在不同应用场景中的潜力和影响,并预测了未来人工智能的发展方向。 “大模型技术发展方向 大模型…

深入理解HTTP Cookie

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 HTTP Cookie定义工作原理分类安全性用途 认识 cookie基本格式实验测试 cookie 当我们登录了B站过后,为什么下次访问B站就…

光伏电站灰尘监测系统的工作原理

型号:TH-HS1】光伏电站灰尘监测系统是一种专门用于监测光伏电站内部灰尘积累情况的系统,通过安装在太阳能电池板表面的传感器,实时收集电池板表面的灰尘信息,包括灰尘厚度、污染比、洁净比等,并将这些数据发送到中央处…

杨中科 ASP.NETCORE 异步编程二

一、不要用sleep() 如果想在异步方法中暂停一段时间,不要用Thread.sleep(),因为它会阻塞调用线程,而要用await.Task.Delay()。 举例: 下载一个网址,3秒后下载另一个 示例: sleep() 为了能直观看到效果,使用winfor…

【STM32开发之寄存器版】(八)-定时器的编码器接口模式

一、前言 1.1 编码器接口原理 编码器模式主要用于检测旋转编码器的转动方向和转动速度。旋转编码器一般输出两路相位相差90度的脉冲信号(称为A相和B相),通过这两路信号,定时器可以判断编码器的旋转方向,并计数转动的脉…

新同事半天搭建了一套CRM系统,实力赢得老板青睐直接转正

我们都知道,搭建一套CRM系统,根据功能和数据的复杂性,一般需要2至4周才能完成。最近,我们团队新来了一位同事,之前做过产品,没写过代码。老板安排他试试能不能搭建一套CRM系统,主要用于市场部同…

【学术会议征稿】第五届应用力学与机械工程国际学术会议(ICAMME 2024)

第五届应用力学与机械工程国际学术会议(ICAMME 2024) 2024 5th International Conference on Applied Mechanics and Mechanical Engineering 在全球技术快速发展的背景下,应用力学和机械工程作为推动现代工业创新的根基,持续展…

解决html2canvas图片模糊不清,超出一页长截图问题

前言 最近需要做一个页面截图功能,类似QQ、微信截图功能,核心是将Html网页转换成图片格式,并且尽可能保证截图后图片样式和原网页一致。对比了一些第三方插件以及浏览器自带的API,最终选择使用JavaScript库‌:如html2…

【读书笔记·VLSI电路设计方法解密】问题7:什么是基于标准单元的专用集成电路 (ASIC) 设计方法论

标准单元方法论是一种基于预组装库单元的芯片设计方法。该库中包含的标准单元和宏单元(例如存储器、I/O、特殊功能单元、锁相环(PLLs)等)已经在预定的工艺节点中设计、布局并经过验证。这些单元经过完全表征,并在逻辑、时序、物理和电气模型方面进行了定义,并正确地打包在…

【学术会议征稿】2024年智能通信、感知与电磁学术会议(ICSE 2024)

2024年智能通信、感知与电磁学术会议(ICSE 2024) 2024 International Conference on Intelligent Communication, Sensing and Electromagnetics 2024年智能通信、感知与电磁学术会议(ICSE 2024)将于2024年12月13-15日在中国-广…

【AI系统】AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用,以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域,从计算机视觉到自然语言处理,再到音频处理,AI的应用正变得越来越广泛。这些技术的发展不仅推动…

TMtech凯珏LED驱动芯片T8332AD升降压线性

T8332AD 是 TM Technology, Inc. 设计的一款多功能 LED 驱动 IC。它具有广泛的输入电压范围、精确的恒流控制和多种保护机制,非常适合各种大功率 LED 应用。以下是其主要特点、应用和技术规格的概述。 主要特点 1. 宽输入电压范围:在 5V 到 60V 之间高…

平衡树 BTree和B+Tree

B树索引是B树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B树中的B代表平衡(balance),而不是二叉(binary),因为B树是从最早的平衡二叉树演化而来的。在讲B树之前必须先了…

41 | 单例模式(上):为什么说支持懒加载的双重检测不比饿汉式更优?

从今天开始,我们正式进入到设计模式的学习。我们知道,经典的设计模式有 23 种。其中,常用的并不是很多。据我的工作经验来看,常用的可能都不到一半。如果随便抓一个程序员,让他说一说最熟悉的 3 种设计模式&#xff0c…

2015年国赛高教杯数学建模C题月上柳梢头解题全过程文档及程序

2015年国赛高教杯数学建模 C题 月上柳梢头 月上柳梢头,人约黄昏后”是北宋学者欧阳修的名句,写的是与佳人相约的情景。请用天文学的观点赏析该名句,并进行如下的讨论:   1. 定义“月上柳梢头”时月亮在空中的角度和什么时间称为…

SOMEIP_ETS_177: SD_Unused_data_after_Options_Array_wrong_length

测试目的: 验证DUT能够正确处理单播SubscribeEventgroup请求,该请求在末尾包含未使用的有效载荷数据,且这些数据的长度不包括在SOME/IP长度字段中,并对此发送SubscribeEventgroupAck消息。 描述 本测试用例旨在确保DUT遵循SOME…

nginx代理,nginx301跳转,nginx地址重写

ngin代理 假如你的地址是:http://192.168.1.2:8282 你的域名是:www.jjycheng.com 你想访问域名www.jjycheng.com时,实际请求的地址是http://192.168.1.2:8282,但浏览器上的地址不变。 此时,你用到的技术就是请求代理 代理.conf配置 http {server {listen 80; server_na…

Python 代码执行失败问题及解决方案

在使用 Python 编程时,代码执行失败可能由多种原因引起。常见的问题包括语法错误、逻辑错误、环境配置问题、依赖项缺失等。下面列举了一些常见的 Python 代码执行失败的原因及对应的解决方案。 1、问题背景 在尝试运行一个 Python 代码时,代码没有执行…

centos6.9不用安装光盘在控制台重置root密码

centos6.9不用安装光盘在控制台重置root密码 centos6.9开机启动时显示启动centos时,按e进入引导菜单(注意不要一直按,否则会进grub,后面进去编辑启动命令可能会报错) 会显示censos(2.6.32-696.e16.x86_64) 选censos(…