【ffmpeg命令入门】重新编码媒体流、设置码率、设置帧速率

文章目录

  • 前言
  • ffmpeg的描述
  • 重新编码媒体流
    • 重新编码媒体流的命令
      • ffmpeg支持的媒体流
  • 设置视频码率
    • 视频码率是什么
    • 设置视频的码率
  • 设置文件帧数率
    • 帧数率是什么
    • ffmpeg设置帧数率
  • 总结


前言

在数字媒体处理领域,ffmpeg是一款非常强大的工具,它可以用来进行媒体流的重新编码、设置码率、设置帧速率等操作。ffmpeg的功能强大且复杂,但是一旦掌握了其基本的使用方法,就能够灵活地处理各种媒体文件,满足各种需求。


ffmpeg的描述

ffmpeg是一款通用的媒体转换工具,它可以读取各种类型的输入(包括实时抓取/录制设备),进行过滤,并将它们转换成各种输出格式。

ffmpeg可以从任意数量的输入"文件"中读取数据,这些文件可以是常规文件、管道、网络流、抓取设备等,这些都是通过-i选项指定的。ffmpeg可以写入任意数量的输出"文件",这些文件是通过一个普通的输出url指定的。命令行上找到的任何不能被解释为选项的内容都被视为输出url。

每个输入或输出url原则上可以包含任意数量和类型(视频/音频/字幕/附件/数据)的流。流的数量和/或类型可能受到容器格式的限制。选择哪些流从哪些输入进入哪个输出要么自动完成,要么通过-map选项完成。

在选项中引用输入文件时,你必须使用它们的索引(从0开始)。例如,第一个输入文件是0,第二个是1,等等。同样,文件内的流也是通过它们的索引引用的。例如,2:3指的是第三个输入文件中的第四个流。

作为一般规则,选项应用于下一个指定的文件。因此,顺序很重要,你可以在命令行上多次使用同一个选项。每次出现的选项都会应用于下一个输入或输出文件。此规则的例外是全局选项(例如,详细程度级别),这些选项应该首先被指定。

不要混合输入和输出文件 - 首先指定所有输入文件,然后指定所有输出文件。也不要混合属于不同文件的选项。所有选项仅适用于下一个输入或输出文件,并在文件之间重置。

重新编码媒体流

重新编码媒体流的命令

我们可以使用ffmpeg把任意他支持的媒体流变成另一个他支持的媒体流,就像这样:

ffmpeg -i input.mp4 output.avi

在这里插入图片描述

D:\Codes\ffmpeg_Command>ffmpeg -i test.mp4 out1.avi

ffmpeg支持的媒体流

FFmpeg支持的文件后缀非常多,包括但不限于以下几种:

  1. 视频格式.mp4.avi.flv.mov.mkv.wmv.3gp等。
  2. 音频格式.mp3.wav.aac.flac.ogg.m4a等。
  3. 封装格式.ts.m3u8(用于HLS流)等。
  4. 图像格式.jpg.png.bmp.gif等。

你可以通过ffmpeg -formats命令来获取FFmpeg所支持的所有文件类型

D:\Codes\ffmpeg_Command>ffmpeg -formats
ffmpeg version 7.0.1-essentials_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developersbuilt with gcc 13.2.0 (Rev5, Built by MSYS2 project)configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberbandlibavutil      59.  8.100 / 59.  8.100libavcodec     61.  3.100 / 61.  3.100libavformat    61.  1.100 / 61.  1.100libavdevice    61.  1.100 / 61.  1.100libavfilter    10.  1.100 / 10.  1.100libswscale      8.  1.100 /  8.  1.100libswresample   5.  1.100 /  5.  1.100libpostproc    58.  1.100 / 58.  1.100
Formats:D.. = Demuxing supported.E. = Muxing supported..d = Is a device---D   3dostr          3DO STRE  3g2             3GP2 (3GPP2 file format)E  3gp             3GP (3GPP file format)D   4xm             4X TechnologiesE  a64             a64 - video for Commodore 64D   aa              Audible AA format filesD   aac             raw ADTS AAC (Advanced Audio Coding)D   aax             CRI AAXDE  ac3             raw AC-3DE  ac4             raw AC-4D   ace             tri-Ace Audio ContainerD   acm             Interplay ACMD   act             ACT Voice file formatD   adf             Artworx Data FormatD   adp             ADPD   ads             Sony PS2 ADSE  adts            ADTS AAC (Advanced Audio Coding)DE  adx             CRI ADXDE  aea             MD STUDIO audioD   afc             AFCDE  aiff            Audio IFFD   aix             CRI AIXDE  alaw            PCM A-lawD   alias_pix       Alias/Wavefront PIX imageDE  alp             LEGO Racers ALPDE  amr             3GPP AMRD   amrnb           raw AMR-NBD   amrwb           raw AMR-WBE  amv             AMVD   anm             Deluxe Paint AnimationD   apac            raw APACD   apc             CRYO APCD   ape             Monkey's Audio
//后面还有很多,这里不写出来了

设置视频码率

视频码率是什么

视频码率是指视频数据的传输速率,也就是每秒钟传输的数据量。它通常以比特每秒(bps)或千比特每秒(kbps)为单位来表示。

举个例子,如果一个视频的码率是500 kbps,那么这意味着每秒钟这个视频会传输500千比特的数据。

视频码率对视频质量有很大的影响。一般来说,码率越高,视频质量越好,因为每秒钟传输的数据量更大,能够展示更多的细节。但是,高码率的视频也会占用更多的存储空间和带宽。

所以,选择合适的视频码率是一个平衡的过程,需要在视频质量和存储空间/带宽之间做出权衡。

设置视频的码率

ffmpeg -i test2.mp4 -b:v 2048k -bufsize 2048k out2.mp4

这个命令是使用FFmpeg将一个输入的视频文件input.avi转换为输出的视频文件output.mp4,并在转换过程中设置视频流的码率和缓冲区大小。

具体来说,这个命令的各个部分的含义如下:

  • ffmpeg:这是调用FFmpeg程序的命令。

  • -i input.avi-i选项后面跟的是输入文件的名称,这里是input.avi

  • -b:v 2048k:这是设置视频流的码率为2048kbps(千比特每秒)。-b:v是指定视频码率的选项,2048k是码率的值。码率越大,视频质量越好,但文件大小也会越大。

  • -bufsize 2048k:这是设置码率控制缓冲区的大小,这里是2048kbps。缓冲区大小可以影响视频的质量和文件大小。

  • output.mp4:这是输出文件的名称,这里是output.mp4

设置文件帧数率

帧数率是什么

帧率,也被称为帧频,是用来衡量视频播放流畅度的一个参数。它表示的是每秒钟能够显示的图片的数量,单位通常是FPS(Frames Per Second,每秒帧数)。

举个例子,如果一个视频的帧率是30 FPS,那就意味着每秒钟这个视频会播放30张图片。这些图片以足够快的速度连续播放,使人眼看起来就像是连续的动画。

一般来说,帧率越高,视频看起来就越流畅。例如,大多数电影的帧率是24 FPS,而电视节目可能会使用30 FPS或60 FPS。然而,更高的帧率也意味着需要更多的存储空间和更高的播放要求。

总的来说,帧率是决定视频播放质量的重要因素之一。

ffmpeg设置帧数率

使用-r选项强制设置帧数率:

ffmpeg -i test2.mp4 -r 144 out3.mp4

过程:

frame=   46 fps=0.0 q=33.0 size=       0KiB time=00:00:00.30 bitrate=   1.3kbits/s dup=73 drop=0 speed=0.5frame=  135 fps=130 q=33.0 size=     256KiB time=00:00:00.92 bitrate=2271.0kbits/s dup=125 drop=0 speed=0.frame=  231 fps=149 q=33.0 size=     512KiB time=00:00:01.59 bitrate=2637.7kbits/s dup=181 drop=0 speed=1.frame=  318 fps=154 q=33.0 size=     768KiB time=00:00:02.19 bitrate=2867.2kbits/s dup=231 drop=0 speed=1.frame=  410 fps=159 q=33.0 size=    1280KiB time=00:00:02.83 bitrate=3701.0kbits/s dup=286 drop=0 speed= 1frame=  509 fps=164 q=33.0 size=    1536KiB time=00:00:03.52 bitrate=3574.0kbits/s dup=343 drop=0 speed=1.frame=  608 fps=168 q=33.0 size=    1792KiB time=00:00:04.20 bitrate=3488.4kbits/s dup=400 drop=0 speed=1.frame=  697 fps=169 q=33.0 size=    2048KiB time=00:00:04.82 bitrate=3476.2kbits/s dup=452 drop=0 speed=1.frame=  797 fps=172 q=33.0 size=    2560KiB time=00:00:05.51 bitrate=3803.5kbits/s dup=511 drop=0 speed=1.frame=  889 fps=172 q=33.0 size=    2816KiB time=00:00:06.15 bitrate=3745.1kbits/s dup=564 drop=0 speed=1.
//省略
[out#0/mp4 @ 0000023746653900] video:14502KiB audio:477KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.512872%
frame= 4330 fps=165 q=-1.0 Lsize=   15056KiB time=00:00:30.00 bitrate=4111.3kbits/s dup=2526 drop=0 speed=1.14x
[libx264 @ 000002374665af80] frame I:67    Avg QP:18.77  size: 18885
[libx264 @ 000002374665af80] frame P:1160  Avg QP:23.94  size:  8734
[libx264 @ 000002374665af80] frame B:3103  Avg QP:22.95  size:  1113
[libx264 @ 000002374665af80] consecutive B-frames:  1.9%  4.4%  9.8% 83.9%
[libx264 @ 000002374665af80] mb I  I16..4: 14.1% 80.9%  5.0%
[libx264 @ 000002374665af80] mb P  I16..4:  4.0% 13.5%  1.1%  P16..4: 10.2%  2.8%  0.7%  0.0%  0.0%    skip:67.7%
[libx264 @ 000002374665af80] mb B  I16..4:  0.1%  0.2%  0.0%  B16..8:  9.5%  0.4%  0.0%  direct: 0.1%  skip:89.6%  L0:46.4% L1:53.0% BI: 0.6%
[libx264 @ 000002374665af80] 8x8 transform intra:73.9% inter:73.4%
[libx264 @ 000002374665af80] coded y,uvDC,uvAC intra: 12.4% 19.1% 3.2% inter: 0.7% 0.7% 0.0%
[libx264 @ 000002374665af80] i16 v,h,dc,p: 49% 31% 11%  9%
[libx264 @ 000002374665af80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 48% 15% 30%  1%  1%  1%  1%  1%  1%
[libx264 @ 000002374665af80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 39% 15% 20%  4%  5%  6%  4%  5%  2%
[libx264 @ 000002374665af80] i8c dc,h,v,p: 69% 13% 15%  2%
[libx264 @ 000002374665af80] Weighted P-Frames: Y:0.6% UV:0.2%
[libx264 @ 000002374665af80] ref P L0: 68.4%  6.5% 17.6%  7.4%  0.1%
[libx264 @ 000002374665af80] ref B L0: 84.6% 12.3%  3.0%
[libx264 @ 000002374665af80] ref B L1: 97.7%  2.3%
[libx264 @ 000002374665af80] kb/s:3950.77
[aac @ 0000023746669ac0] Qavg: 910.307

总结

通过本文的学习,我们了解了如何使用ffmpeg进行媒体流的重新编码、设置码率和设置帧速率等操作。虽然ffmpeg的命令行参数众多,但是只要掌握了一些基本的命令和概念,就能够灵活地处理各种媒体文件。希望本文能够帮助你入门ffmpeg,为你的媒体处理工作提供帮助。在实际使用中,你可能还需要根据自己的需求去查阅更多的ffmpeg命令和参数,不断提高自己的技能。祝你学习愉快!

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

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

相关文章

自动驾驶车道线检测系列—3D-LaneNet: End-to-End 3D Multiple Lane Detection

文章目录 1. 摘要概述2. 背景介绍3. 方法3.1 俯视图投影3.2 网络结构3.2.1 投影变换层3.2.2 投影变换层3.2.3 道路投影预测分支 3.3 车道预测头3.4 训练和真实值关联 4. 实验4.1 合成 3D 车道数据集4.2 真实世界 3D 车道数据集4.3 评估结果4.4 评估图像仅车道检测 5. 总结和讨论…

windows下gcc编译C、C++程序 MinGW编译器

文章目录 1、概要2、MinGW安装2.1 编译器下载2.2 编译器安装2.3 设置环境变量2.4 查看gcc版本信息 3、编译C、C程序3.1 编写Hello World.c3.2 编译C程序3.3 运行程序3.4 编译C程序 1、概要 GCC原名为GNU C语言编译器(GNU C Compiler),只能处…

Linux系统下weblogic10.3.6版本打补丁步骤

linux系统 weblogic补丁压缩包:p35586779_1036_Generic.zip 链接:https://pan.baidu.com/s/1EEz_zPX-VHp5EU5LLxfxjQ 提取码:XXXX (补丁压缩包中包含以下东西) 打补丁步骤: 1.备份原weblogic(需要先确保服…

Langchain[3]:Langchain架构演进与功能扩展:流式事件处理、事件过滤机制、回调传播策略及装饰器应用

Langchain[3]:Langchain架构演进与功能扩展:流式事件处理、事件过滤机制、回调传播策略及装饰器应用 1. Langchain的演变 v0.1: 初始版本,包含基本功能。 从0.1~0.2完成的特性: 通过事件流 API 提供更好的流式支持。标准化工具调用支持Tool…

哪些基于 LLMs 的产品值得开发?从用户体验和市场接受度的角度探讨

编者按:在大语言模型(LLMs)相关技术高速发展的今天,哪些基于 LLMs 的产品真正值得我们投入精力开发?如何从用户体验和市场接受度的角度评估这些产品的潜力? 今天为大家分享的这篇文章,作者的核心…

visual studio开发C++项目遇到的坑

文章目录 1.安装的时候,顺手安装了C模板,导致新建项目执行出问题2.生成的exe,打开闪退问题3.项目里宏的路径不对,导致后面编译没有输出4. vs编译ui,warning跳过,未成功5.vs编译.h,warning跳过&a…

K8S 中的 CRI、OCI、CRI shim、containerd

K8S 如何创建容器? 下面这张图,就是经典的 K8S 创建容器的步骤,可以说是冗长复杂,至于为什么设计成这样的架构,继续往下读。 前半部分 CRI(Container Runtime Interface,容器运行时接口&#xf…

避免海外业务中断,TikTok养号注意事项

TikTok已成为企业和个人拓展海外业务的重要平台。然而,由于平台规则严格,账号被封禁或限制访问的风险始终存在。为了确保用户在TikTok上的业务顺利进行,着重说一些养号的注意事项。 文章分为三个部分,分别是遵守平台规则、养号策略…

LATEX格式的高等数学题库(导数和概率论与数理统计)

\documentclass{ctexart} \usepackage{amsmath,amssymb,amsfonts,hyperref} \usepackage{CJKutf8} \usepackage{enumitem} % 引入宏包 \usepackage [colorlinkstrue] {} \begin{document}\begin{CJK}{UTF8}{gkai}%正文放在此行下与\end{CJK}之间就行\tableofcontents\newpage\s…

F1-score(标准度量)

什么是F1-score? F1分数(F1-score)是分类问题的一个衡量指标。一些多分类问题的机器学习竞赛,常常将F1-score作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,最小为0,如公式1所示…

使用GPT3.5,LangChain,FAISS和python构建一个本地知识库

引言 介绍本地知识库的概念和用途 在现代信息时代,我们面临着海量的数据和信息,如何有效地管理和利用这些信息成为一项重要的任务。本地知识库是一种基于本地存储的知识管理系统,旨在帮助用户收集、组织和检索大量的知识和信息。它允许用户…

Excel 学习手册 - 精进版(包括各类复杂函数及其嵌套使用)

作为程序员从未想过要去精进一下 Excel 办公软件的使用方法,以前用到某功能都是直接百度,最近这两天跟着哔哩哔哩上的戴戴戴师兄把 Excel 由里到外学了一遍,收获良多。程序员要想掌握这些内容可以说是手拿把掐,对后续 Excel 的运用…

linux的学习(七):读取,函数,正则表达式,文本处理工具cut和awk

##简介 shell编程中的读取,函数,正则表达式,文本处理工具的简单使用 read read:读取控制台的输入 参数: -p:指定读取时的提示符-t:等待读取的时间 脚本例子 编写i.sh脚本,enter…

算法实验3:贪心算法的应用

实验内容 &#xff08;1&#xff09;活动安排问题 设有n个活动的集合E{1, 2, …, n}&#xff0c;其中每个活动都要求使用同一资源&#xff0c;而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi&#xff0c;且si <f…

JavaWeb-【2】CSS和JavaScript

笔记系列持续更新,真正做到详细!!本次系列重点讲解后端,那么第一阶段先讲解前端【续上篇HTML】 目录 一、CSS 1、CSS介绍 2、CSS快速入门 3、CSS语法 4、字体颜色和边框 5、背景颜色和字体样式 6、div和文本居中 7、超链接去下划线和表格细线 8、无序列表去掉样式…

持续集成03--Jenkins的安装与配置

前言 在持续集成/持续部署&#xff08;CI/CD&#xff09;的实践中&#xff0c;Jenkins作为一个开源的自动化服务器&#xff0c;扮演着至关重要的角色。本篇“持续集成03--Jenkins的安装配置”将带您走进Jenkins的世界&#xff0c;深入了解如何在Linux环境中安装并配置Jenkins。…

VUE:跨域配置代理服务器

//在vite.config。js中&#xff0c;同插件配置同级进行配置server:{proxy:{"/myrequest":{//代理域名&#xff0c;可自行修改target:"https://m.wzj.com/",//访问服务器的目标域名changeOrigin:true,//允许跨域configure:(proxy,options) > {proxy.on(&…

C4D各版本软件下载+自学C4D 从入门到精通【学习视频教程全集】+【素材笔记】

下载链接&#xff1a; 迅雷网盘https://pan.xunlei.com/s/VO1tydOxEo-Az_QCM-Jz2R4RA1?pwdvxg4# 夸克网盘https://pan.quark.cn/s/fe7450b02d80 百度网盘https://pan.baidu.com/s/1Omj4WL93F1DNdA2iP4SiMQ?pwdwmb8

[C++] 深度剖析C_C++内存管理机制

文章目录 内存分布内存分布图解 C语言中动态内存管理方式malloc:callocrealloc C内存管理方式内置类型**自定义类型** operator new & operator deleteoperator new & operator delete函数operator newoperator delete **new T[N]** 与**delete[]** **定位new表达式(pl…

vue 实现下拉框的数据是树状结构

页面显示效果 vue实现代码 <el-form-item label"公司名称" prop"comName"><el-select ref"select" v-model"queryParams.comName" placeholder"请选择公司名称" clearable size"small"change"handl…