jjzjj

FFmpeg

巡山小钻风つ 2024-05-30 原文

介绍

        FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

        FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括WindowsMac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 [1]  FFmpeg编码库可以使用GPU加速。

安装 

FFmpeg 被许多开源项目采用, QQ 影音、暴风影音、 VLC 等。
下载:FFmpeg https://www.ffmpeg.org/download.html#build-windows

 

 

 将zip解压

 将bin目录配置到环境变量

 测试 ffmpeg -version 有输出安装成功

将一个 .avi 文件转成 mp4 mp3 gif 等。
比如我们将 lucene.avi 文件转成 mp4 ,运行如下命令:
ffffmpeg -i lucene.avi lucene.mp4

 

转成 mp3 ffffmpeg -i lucene.avi lucene.mp3
转成 gif ffffmpeg -i lucene.avi lucene.gif

基本使用

 生成m3u8/ts文件

 使用ffffmpeg生成 m3u8的步骤如下:

第一步:先将avi视频转成mp4

ffmpeg.exe ‐i lucene.avi ‐c:v libx264 ‐s 1280x720 ‐pix_fmt yuv420p ‐b:a 63k ‐b:v 753k ‐r 18
.\lucene.mp4
下面把各参数意思大概讲讲,大概了解意思即可,不再此展开流媒体专业知识的讲解。
  • -c:v 视频编码为x264 x264编码是H264的一种开源编码格式。
  • -s 设置分辨率
  • -pix_fmt yuv420p:设置像素采样方式,主流的采样方式有三种,YUV4:4:4YUV4:2:2YUV4:2:0,它的作用是
  • 根据采样方式来从码流中还原每个像素点的YUV(亮度信息与色彩信息)值。
  • -b 设置码率,
  • -b:a-b:v分别表示音频的码率和视频的码率,
  • -b表示音频加视频的总码率。码率对一个视频质量有很大的作用,后边会介绍。
  • -r:帧率,表示每秒更新图像画面的次数,通常大于24肉眼就没有连贯与停顿的感觉了。

第二步:将mp4生成m3u8

ffmpeg ‐i lucene.mp4 ‐hls_time 10 ‐hls_list_size 0 ‐hls_segment_filename
./hls/lucene_%05d.ts ./hls/lucene.m3u8
  • -hls_time 设置每片的长度,单位为秒
  • -hls_list_size n: 保存的分片的数量,设置为0表示保存所有分片
  • -hls_segment_fifilename :段文件的名称,%05d表示5位数字
生成的效果是:将 lucene.mp4 视频文件每 10 秒生成一个 ts 文件,最后生成一个 m3u8 文件, m3u8 文件是 ts 的索引 文件。
使用 VLC 打开 m3u8 文件,测试播放效果, VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多 媒体文件,以及 DVD 、音频 CD VCD 及各类流媒体协议。( http://www.videolan.org/

 码率

码率又叫比特率即每秒传输的 bit 数,单位为 bps(Bit Per Second) ,码率越大传送数据的速度越快。
码率的计算公式是:文件大小(转成 bit / 时长(秒) /1024 = kbps 即每秒传输千位数
例如一个 1M 的视频,它的时长是 10s ,它的码率等于
 1*1024*1024*8/10/1024 = 819Kbps
码率设置到多少才能达到最好,通过根据个人的经验或参考一些视频网台给出的参考,下图是优酷对码率的要求:

如果要将视频上传到优酷则必须按照上面的要求,如果是自己搭建视频服务器,码率设置不易过大,最终达到的视频清晰度满足业务需求即可。

 

有关FFmpeg的更多相关文章

  1. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  2. ruby - 无法在 Ruby 中将 ffmpeg 作为子进程运行 - 2

    我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope

  3. ruby - 如何使用 bash 命令或 Ruby 使用 ffmpeg 将 mp4 文件批量转换为 ogg - 2

    我运行的是OSX,对视频转换一无所知。但我有大约200个视频都是mp4格式,无法在Firefox中播放。我需要将它们转换为ogg才能使用html5视频标签。这些文件位于一个文件夹结构中,这使得一次一个地处理一个文件变得困难。我希望bash命令或Ruby命令遍历所有子文件夹并找到所有.mp4并转换它们。我找到了一份关于如何使用Google执行此操作的引用资料:http://athmasagar.wordpress.com/2011/05/12/a-bash-script-to-convert-mp4-files-to-oggogv/#!/bin/bashforfin$(ls*mp4|se

  4. Java调用ffmpeg处理视频,并记录下遇到的坑 - 2

    目录需求基于JavaCV跨平台执行ffmpeg命令[^1]坑一内存不足坑二多个ffmpeg进程并行导致IO负载大,进而导致ioerror?坑三使用Java操作ffmpeg时,有时会卡死坑四Process的waitFor死锁问题及解决办法需求给透明背景的视频自动叠加一张背景图片基于JavaCV跨平台执行ffmpeg命令1我测试发现的本需求的最小依赖:dependency>groupId>org.bytedecogroupId>artifactId>ffmpeg-platform-gplartifactId>version>5.0-1.5.7version>dependency>核心代码:Stri

  5. 基于ffmpeg的视频处理与MPEG的压缩试验(下载安装使用全流程) - 2

    基于ffmpeg的视频处理与MPEG的压缩试验ffmpeg介绍与基础知识对提取到的图像进行处理RGB并转化为YUV对YUV进行DCT变换对每个8*8的图像块进行进行量化操作ffmpeg介绍与基础知识ffmpeg是视频和图像处理的工具包,它的下载网址是https://ffmpeg.org/download.html。页面都是英文且下载正确的包的路径笔者找的时候还费点劲,这里记录一下也方便读者。选中这个Windows下的下午files,选择第一个这里有essential和full版本的,大家根据需要自行选择版本包下载下载好之后,在官网上下载ffmpeg的full包,一共300+MB解压,然后安装b

  6. ruby-on-rails - Rails 在上传时使用 stremio-ffmpeg gem 给电影加水印 - 2

    我正在使用carrierwave将电影上传到amazons3,效果非常好。现在我想在上传时或上传后给电影加水印,我不知道,最好的方法是什么?我试过这个:movie_controller.rbAction上传视频movie=FFMPEG::Movie.new(@vid.video.url)puts"........................................"putsmovie.inspectif@vid.save只是为了查明视频是否是从stremio中捕获的。但后来我得到了找不到电影的错误,问题是它没有在amazons3存储桶中查找,它在我的本地服务器上查找Nosu

  7. zlmediakit搭建和配合ffmpeg使用 - 2

    前言本来是自己按照文档搭建好使用的,结果用完就扔,部署新服务器的时候,又查了一遍,不仅耽误时间,还做了很多无用功,坑死自己系列。。。所以赶紧记录一下,争取以后再用到不要再翻各种文档了1.zlmediakit搭建:链接:https://zhuanlan.zhihu.com/p/366774975这篇文章写得已经非常详细了,就不再拾人牙慧了2.ffmpeg安装:虽然上面的搭建文档说不用安装ffmpeg,但是如果使用命令的话,肯定还是要安装的(不安装指的是在项目中调用api)1).sudoapt-getupdate2).sudoapt-getinstallffmpeg3.测试(;推流路径格式是:rt

  8. 【Qt+FFmpeg】解码播放本地视频(二)——实现播放、暂停、重播、倍速功能 - 2

    目录一、FFmpeg解码流程图二、播放、暂停、重播、倍速功能实现1.创建播放、重播和倍速按钮2.设置布局、样式、没有播放完毕前隐藏重播按钮 3.绑定信号槽4.实现槽函数(1)暂停和播放(2)播放完毕(3)重新播放 (4)倍速上一期我们解码本地视频并在窗口上进行播放,这期来谈谈如何实现播放、暂停、重播和倍速如果还没看过上期,请移步【Qt+FFmpeg】解码播放本地视频_logani的博客-CSDN博客一、FFmpeg解码流程图二、播放、暂停、重播、倍速功能实现1.创建播放、重播和倍速按钮播放和暂停共用一个按钮pauseBto=newQPushButton("",this);replayBto=n

  9. RK3588移植-ffmpeg交叉编译 - 2

    文章目录1.下载ffmpeg2.交叉编译3.修改cmakelist.txt4.将lib文件复制到install目录下的lib目录5.测试文件6.运行测试样例7.错误n.测试文件源码1.下载ffmpeggitclonehttps://git.ffmpeg.org/ffmpeg.gitffmpeg2.交叉编译进入下载目录,将ffmpeg编译成arm64平台的版本,编译后的文件存放于./instal_arm64中。sudo./configure--prefix=./instal_arm64--enable-shared--disable-static--enable-cross-compile--a

  10. FFmpeg 1 - 概览/安装 - 2

    文章目录关于FFmpeg库命令行工具安装方式一:snapshotbuild方式二:brew其它Ffmpeg耻辱柱关于FFmpegFFmpeg读作“efefempeg”,其中的“FF”指的是“FastForward”,“mpeg”则是“MovingPictureExpertsGroup”(动态图像专家组)。官网https://ffmpeg.org官方文档https://ffmpeg.org/documentation.htmlGithubhttps://github.com/FFmpeg/FFmpeg教程资料等小破站:命令调用教程https://www.bilibili.com/video/BV

随机推荐