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

农民  金牌会员 | 2024-7-19 11:49:47 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 985|帖子 985|积分 2955


前言

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

ffmpeg的形貌

ffmpeg是一款通用的媒体转换工具,它可以读取各种类型的输入(包括及时抓取/录制设备),进行过滤,并将它们转换成各种输特别式。
ffmpeg可以从任意数量的输入"文件"中读取数据,这些文件可以是通例文件、管道、网络流、抓取设备等,这些都是通过-i选项指定的。ffmpeg可以写入任意数量的输出"文件",这些文件是通过一个普通的输出url指定的。下令行上找到的任何不能被表明为选项的内容都被视为输出url。
每个输入或输出url原则上可以包含任意数量和类型(视频/音频/字幕/附件/数据)的流。流的数量和/或类型可能受到容器格式的限制。选择哪些流从哪些输入进入哪个输出要么自动完成,要么通过-map选项完成。
在选项中引用输入文件时,你必须利用它们的索引(从0开始)。例如,第一个输入文件是0,第二个是1,等等。同样,文件内的流也是通过它们的索引引用的。例如,2:3指的是第三个输入文件中的第四个流。
作为一样平通例则,选项应用于下一个指定的文件。因此,次序很紧张,你可以在下令行上多次利用同一个选项。每次出现的选项都会应用于下一个输入或输出文件。此规则的例外是全局选项(例如,具体水平级别),这些选项应该首先被指定。
不要混淆输入和输出文件 - 首先指定全部输入文件,然后指定全部输出文件。也不要混淆属于差别文件的选项。全部选项仅适用于下一个输入或输出文件,并在文件之间重置。
重新编码媒体流

重新编码媒体流的下令

我们可以利用ffmpeg把任意他支持的媒体流酿成另一个他支持的媒体流,就像如许:
  1. ffmpeg -i input.mp4 output.avi
复制代码

  1. D:\Codes\ffmpeg_Command>ffmpeg -i test.mp4 out1.avi
复制代码
ffmpeg支持的媒体流

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

  • 视频格式:.mp4、.avi、.flv、.mov、.mkv、.wmv、.3gp等。
  • 音频格式:.mp3、.wav、.aac、.flac、.ogg、.m4a等。
  • 封装格式:.ts、.m3u8(用于HLS流)等。
  • 图像格式:.jpg、.png、.bmp、.gif等。
你可以通过ffmpeg -formats下令来获取FFmpeg所支持的全部文件类型
  1. D:\Codes\ffmpeg_Command>ffmpeg -formats
  2. ffmpeg version 7.0.1-essentials_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
  3.   built with gcc 13.2.0 (Rev5, Built by MSYS2 project)
  4.   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-librubberband
  5.   libavutil      59.  8.100 / 59.  8.100
  6.   libavcodec     61.  3.100 / 61.  3.100
  7.   libavformat    61.  1.100 / 61.  1.100
  8.   libavdevice    61.  1.100 / 61.  1.100
  9.   libavfilter    10.  1.100 / 10.  1.100
  10.   libswscale      8.  1.100 /  8.  1.100
  11.   libswresample   5.  1.100 /  5.  1.100
  12.   libpostproc    58.  1.100 / 58.  1.100
  13. Formats:
  14. D.. = Demuxing supported
  15. .E. = Muxing supported
  16. ..d = Is a device
  17. ---
  18. D   3dostr          3DO STR
  19.   E  3g2             3GP2 (3GPP2 file format)
  20.   E  3gp             3GP (3GPP file format)
  21. D   4xm             4X Technologies
  22.   E  a64             a64 - video for Commodore 64
  23. D   aa              Audible AA format files
  24. D   aac             raw ADTS AAC (Advanced Audio Coding)
  25. D   aax             CRI AAX
  26. DE  ac3             raw AC-3
  27. DE  ac4             raw AC-4
  28. D   ace             tri-Ace Audio Container
  29. D   acm             Interplay ACM
  30. D   act             ACT Voice file format
  31. D   adf             Artworx Data Format
  32. D   adp             ADP
  33. D   ads             Sony PS2 ADS
  34.   E  adts            ADTS AAC (Advanced Audio Coding)
  35. DE  adx             CRI ADX
  36. DE  aea             MD STUDIO audio
  37. D   afc             AFC
  38. DE  aiff            Audio IFF
  39. D   aix             CRI AIX
  40. DE  alaw            PCM A-law
  41. D   alias_pix       Alias/Wavefront PIX image
  42. DE  alp             LEGO Racers ALP
  43. DE  amr             3GPP AMR
  44. D   amrnb           raw AMR-NB
  45. D   amrwb           raw AMR-WB
  46.   E  amv             AMV
  47. D   anm             Deluxe Paint Animation
  48. D   apac            raw APAC
  49. D   apc             CRYO APC
  50. D   ape             Monkey's Audio
  51. //后面还有很多,这里不写出来了
复制代码
设置视频码率

视频码率是什么

视频码率是指视频数据的传输速率,也就是每秒钟传输的数据量。它通常以比特每秒(bps)或千比特每秒(kbps)为单位来表示。
举个例子,假如一个视频的码率是500 kbps,那么这意味着每秒钟这个视频会传输500千比特的数据。
视频码率对视频质量有很大的影响。一样平常来说,码率越高,视频质量越好,因为每秒钟传输的数据量更大,可以或许展示更多的细节。但是,高码率的视频也会占用更多的存储空间和带宽。
所以,选择合适的视频码率是一个平衡的过程,必要在视频质量和存储空间/带宽之间做出权衡。
设置视频的码率

  1. 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选项强制设置帧数率:
  1. ffmpeg -i test2.mp4 -r 144 out3.mp4
复制代码
过程:
  1. 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.
  2. //省略
  3. [out#0/mp4 @ 0000023746653900] video:14502KiB audio:477KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.512872%
  4. 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
  5. [libx264 @ 000002374665af80] frame I:67    Avg QP:18.77  size: 18885
  6. [libx264 @ 000002374665af80] frame P:1160  Avg QP:23.94  size:  8734
  7. [libx264 @ 000002374665af80] frame B:3103  Avg QP:22.95  size:  1113
  8. [libx264 @ 000002374665af80] consecutive B-frames:  1.9%  4.4%  9.8% 83.9%
  9. [libx264 @ 000002374665af80] mb I  I16..4: 14.1% 80.9%  5.0%
  10. [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%
  11. [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%
  12. [libx264 @ 000002374665af80] 8x8 transform intra:73.9% inter:73.4%
  13. [libx264 @ 000002374665af80] coded y,uvDC,uvAC intra: 12.4% 19.1% 3.2% inter: 0.7% 0.7% 0.0%
  14. [libx264 @ 000002374665af80] i16 v,h,dc,p: 49% 31% 11%  9%
  15. [libx264 @ 000002374665af80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 48% 15% 30%  1%  1%  1%  1%  1%  1%
  16. [libx264 @ 000002374665af80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 39% 15% 20%  4%  5%  6%  4%  5%  2%
  17. [libx264 @ 000002374665af80] i8c dc,h,v,p: 69% 13% 15%  2%
  18. [libx264 @ 000002374665af80] Weighted P-Frames: Y:0.6% UV:0.2%
  19. [libx264 @ 000002374665af80] ref P L0: 68.4%  6.5% 17.6%  7.4%  0.1%
  20. [libx264 @ 000002374665af80] ref B L0: 84.6% 12.3%  3.0%
  21. [libx264 @ 000002374665af80] ref B L1: 97.7%  2.3%
  22. [libx264 @ 000002374665af80] kb/s:3950.77
  23. [aac @ 0000023746669ac0] Qavg: 910.307
复制代码

总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表