【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://xiahunao.cn/news/3247582.html

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

相关文章

Java | Leetcode Java题解之第242题有效的字母异位词

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isAnagram(String s, String t) {if (s.length() ! t.length()) {return false;}int[] table new int[26];for (int i 0; i < s.length(); i) {table[s.charAt(i) - a];}for (int i 0; i < t.leng…

【面试题】Redo log和Undo log

Redo log 介绍Redo log之前我们需要了解一下&#xff0c;mysql数据操作的流程&#xff1a; 上述就是数据操作的流程图&#xff0c;可以发现sql语句并不是直接操作的磁盘而是通过操作内存&#xff0c;然后进行内存到磁盘的一个同步。这里我们必须要了解一些区域&#xff1a; 缓…

基于 asp.net家庭财务管理系统设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用感兴趣的可以先…

抖音seo短视频账号矩阵系统源码-SaaS开源部署流程开发者技术分享

抖音seo账号矩阵系统&#xff0c;短视频矩阵系统源码&#xff0c; 短视频矩阵是一种常见的视频编码标准&#xff0c;通过多账号一键授权管理的方式&#xff0c;为运营人员打造功能强大及全面的“矩阵式“管理平台。使用矩阵系统也能保证账号的稳定性&#xff0c;降低账号的风险…

redis数据持久化之RDB大战AOF

华子目录 数据持久化RDB什么是RDB如何备份Fork持久化流程rdb持久化过程一、触发RDB持久化的方式二、RDB持久化的具体过程三、RDB持久化的优缺点 相关配置1.db文件名2.rdb文件和aof文件路径3.save示例 4.stop-writes-on-bgsave-errorstop-writes-on-bgsave-error 的配置选项和含…

Unity3d开发google chrome的dinosaur游戏

游戏效果 游戏中&#xff1a; 游戏中止&#xff1a; 一、制作参考 如何制作游戏&#xff1f;【15分钟】教会你制作Unity小恐龙游戏&#xff01;新手15分钟内马上学会&#xff01;_ unity教学 _ 制作游戏 _ 游戏开发_哔哩哔哩_bilibili 二、图片资源 https://download.csdn.…

ELK企业级日志分析

目 录 一、ELK简介 1.1 elasticsearch简介 1.2 logstash简介 1.3 kibana简介 1.4 ELK的好处 1.5 ELK的工作原理 二、部署ELK 2.1 部署elasticsearch(集群) 2.1.1 修改配置文件 2.1.2 修改系统参数 2.1.2.1 修改systemmd服务管理器 2.1.2.2 性能调优参数 2.1.2.3 …

电源模块企业该如何解决测试中的痛点问题?

根据研究发现&#xff0c;超过76%的企业在进行测试时会对产品质量、可靠性和测试速度这三项核心指标尤为重视。但是随着近几年的发展&#xff0c;目前的测试方法和措施对于这三项指标的测试远远无法达到企业的预期。被测产品的整体质量参差不齐、测试数据的可靠性以及测试的速度…

vue 如何做一个动态的 BreadCrumb 组件,el-breadcrumb ElementUI

vue 如何做一个动态的 BreadCrumb 组件 el-breadcrumb ElementUI 一、ElementUI 中的 BreadCrumb 定义 elementUI 中的 Breadcrumb 组件是这样定义的 <template><el-breadcrumb separator"/"><el-breadcrumb-item :to"{ path: / }">主…

yearrecord——一个类似痕迹墙的React数据展示组件

介绍一下自己做的一个类似于力扣个人主页提交记录和GitHub主页贡献记录的React组件。 下图分别是力扣个人主页提交记录和GitHub个人主页的贡献记录&#xff0c;像这样类似痕迹墙的形式可以比较直观且高效得展示一段时间内得数据记录。 然而要从0实现这个功能还是有一些麻烦得…

【数据结构】详解堆

一、堆的概念 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵 完全二叉树的 数组对象。 堆是非线性数据结构&#xff0c;相当于一维数组&#xff0c;有两个直接后继。 如果有一个关键码的集合K { k₀&#xff0c;k₁&#xff0c;k₂ &#xff0…

PCB(印制电路板)制造涉及的常规设备

印制电路板&#xff08;PCB&#xff09;的制造涉及多种设备和工艺。从设计、制作原型到批量生产&#xff0c;每个阶段都需要不同的专业设备。以下是一些在PCB制造过程中常见的设备&#xff1a; 1. 计算机辅助设计&#xff08;CAD&#xff09;软件&#xff1a; - 用于设计PC…

3D问界—MAYA制作铁丝栅栏(透明贴图法)

当然&#xff0c;如果想通过建立模型法来实现铁丝栅栏的效果&#xff0c;也不是不行&#xff0c;可以找一下栅栏建模教程。本篇文章主要是记录一下如何使用透明贴图来实现创建铁丝栅栏&#xff0c;主要应用于场景建模&#xff0c;比如游戏场景、建筑场景等大环境&#xff0c;不…

问题清除指南|成功解决pipmatplotlib因为ConnectTimeoutError更新失败问题

前言&#xff1a;跑baseline需要升级matplotlib和pip&#xff0c;在此记录一个错误和一个「别致」的解决方案。 北京时间 14:00 左右&#xff0c;在终端环境中运行命令python -m pip install --upgrade pip&#xff0c;报错&#xff1a; 多次尝试&#xff0c;未果。 隔天上午 0…

Qt支持LG高级汽车内容平台

Qt Group与LG 电子&#xff08;简称LG&#xff09;正携手合作&#xff0c;将Qt软件框架嵌入其基于 webOS的ACPLG车载娱乐平台&#xff0c;用于应用程序开发。该合作旨在让原始设备制造商&#xff08;OEM&#xff09;的开发者和设计师能为汽车创建更具创新性的沉浸式汽车内容流媒…

1-2、truffle与webjs亲密接触(truffle智能合约项目实战)

1-2、truffle与webjs亲密接触&#xff08;truffle智能合约项目实战&#xff09; 5&#xff0c;web3调用智能合约6&#xff0c;Ganache 5&#xff0c;web3调用智能合约 在前面已经完成简单的合约编写 使用web3调用此函数 Web端的代码使用web3进行智能合约的访问 首先在cmd以…

SCI一区级 | Matlab实现SSA-CNN-GRU-Multihead-Attention多变量时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现SSA-CNN-GRU-Multihead-Attention麻雀算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测&#xff0c;要求Matlab2023版以上&#xff1b; 2.输入多个特征&#xff0c;输出单个…

数据结构之细说链表

1.1顺序表的问题以及思考 经过上一篇顺序表的学习&#xff0c;我们知道顺序表还是有很多缺点 顺序表的缺点&#xff1a; 1.中间/头部的插入删除&#xff0c;实际复杂度为O(N) 2.增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗 3.扩容一般…

R语言包AMORE安装报错问题以及RStudio与Rtools环境配置

在使用R语言进行AMORE安装时会遇到报错&#xff0c;这时候需要采用解决办法&#xff1a; AMORE包安装&#xff0c;需要离线官网下载安装包&#xff1a; Index of /src/contrib/Archive/AMORE (r-project.org)https://cran.r-project.org/src/contrib/Archive/AMORE/ 一、出现…

AI绘画入门实践|Midjourney 的模型版本

模型分类 Midjourney 的模型主要分为2大类&#xff1a; 默认模型&#xff1a;目前包括&#xff1a;V1, V2, V3, V4, V5.0, V5.1, V5.2, V6 NIJI模型&#xff1a;目前包括&#xff1a;NIJI V4, NIJI V5, NIJI V6 模型切换 你在服务器输入框中输入 /settings&#xff1a; 回车后…