当前位置: 首页 > news >正文

【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命令和参数,不断提高自己的技能。祝你学习愉快!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 昇思25天学习打卡营第21天|DCGAN生成漫画头像
  • 算法学习笔记:贪心算法
  • Java集合框架的内部揭秘:List、Set与Map的深潜之旅
  • PHP MySQL 创建数据库
  • 数仓工具—Hive语法之宏(Macro)
  • 数据采集监控平台:挖掘数据价值 高效高速生产!
  • 单例模式 单例模式在多线程中是否线程安全, 如何保证线程安全。
  • react中状态管理useState
  • 计算1的数量
  • Windows图形界面(GUI)-DLG-C/C++ - 列表视图(ListView)
  • 如何修复WordPress“414 Request URI Too Large:” 错误
  • Linux chmod 命令简介
  • 【时时三省】tessy 集成测试:小白入门指导手册
  • Git代码管理工具 — 3 Git基本操作指令详解
  • 《JavaSE》---13.<面向对象系列之(附:static关键字及final关键字)>
  • [Vue CLI 3] 配置解析之 css.extract
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【EOS】Cleos基础
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • C# 免费离线人脸识别 2.0 Demo
  • co.js - 让异步代码同步化
  • emacs初体验
  • es6
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • laravel5.5 视图共享数据
  • mysql 数据库四种事务隔离级别
  • Object.assign方法不能实现深复制
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Spring框架之我见(三)——IOC、AOP
  • 技术胖1-4季视频复习— (看视频笔记)
  • 使用 @font-face
  • 项目管理碎碎念系列之一:干系人管理
  • 学习JavaScript数据结构与算法 — 树
  • 译米田引理
  • 在Mac OS X上安装 Ruby运行环境
  • 转载:[译] 内容加速黑科技趣谈
  • ​你们这样子,耽误我的工作进度怎么办?
  • #LLM入门|Prompt#3.3_存储_Memory
  • $.ajax()参数及用法
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (7)摄像机和云台
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (windows2012共享文件夹和防火墙设置
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)JAVA中的堆栈
  • (转)Unity3DUnity3D在android下调试
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程