欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

音視頻基本概念和FFmpeg的簡(jiǎn)單入門教程詳解

 更新時(shí)間:2022年04月22日 09:14:48   作者:?jiǎn)踢_(dá)摩(嘿~)  
FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。可以輕易地實(shí)現(xiàn)多種視頻格式之間的相互轉(zhuǎn)換,這篇文章主要介紹了音視頻基本概念和FFmpeg的簡(jiǎn)單入門,需要的朋友可以參考下

寫在前面

最近正好有音視頻編輯的需求,雖然之前粗略的了解過(guò)FFmpeg不過(guò)肯定是不夠用的,借此重新學(xué)習(xí)下;

基本概念

ffmpeg概念

Fmpeg的名稱來(lái)自MPEG視頻編碼標(biāo)準(zhǔn),前面的“FF”代表“Fast Forward”,F(xiàn)Fmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序??梢暂p易地實(shí)現(xiàn)多種視頻格式之間的相互轉(zhuǎn)換組成.

  • ffmpeg:是一個(gè)命令行工具,用來(lái)對(duì)視頻文件轉(zhuǎn)換格式,也支持對(duì)電視卡實(shí)時(shí)編碼
  • libavformat:用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結(jié)構(gòu)和讀取音視頻幀等功能,包含demuxers和muxer庫(kù);
  • libavcodec:用于各種類型聲音/圖像編解碼;
  • libavfilter:濾鏡庫(kù)
  • libavutil:包含一些公共的工具函數(shù);
  • libswscale:用于視頻場(chǎng)景比例縮放、色彩映射轉(zhuǎn)換;
  • libpostproc:用于后期效果處理;
  • ffsever:是一個(gè)HTTP多媒體實(shí)時(shí)廣播流服務(wù)器,支持時(shí)光平移;
  • ffplay:是一個(gè)簡(jiǎn)單的播放器,使用ffmpeg
  • 庫(kù)解析和解碼,通過(guò)SDL顯示;(一般編譯完沒(méi)有帶ffplay,新版本版本依賴于sd-2.0,需要安裝sdl-2.0才能生成ffplay)

容器/文件(Conainer/File):

即特定格式的多媒體文件,一般來(lái)說(shuō)一個(gè)視頻文件是由視頻,音頻,字幕等按特定的格式/規(guī)則組合到一起的,常見(jiàn)如:

mp4
flv
mkv
avi

媒體流(Stream):

表示時(shí)間軸上的一段連續(xù)數(shù)據(jù),如一段聲音數(shù)據(jù)、一段視頻數(shù)據(jù)或一段字幕數(shù)據(jù),可以是壓縮的,也可以是非壓縮的,壓縮的數(shù)據(jù)需要關(guān)聯(lián)特定的編解碼器。

數(shù)據(jù)幀/數(shù)據(jù)包(Frame/Packet):

通常,一個(gè)媒體流是由大量的數(shù)據(jù)幀組成的,對(duì)于壓縮數(shù)據(jù),幀對(duì)應(yīng)著編解碼器的最小處理單元,分屬于不同媒體流的數(shù)據(jù)幀交錯(cuò)存儲(chǔ)于容器之中。

一般: Frame對(duì)應(yīng)壓縮前的數(shù)據(jù),Packet對(duì)應(yīng)壓縮后的數(shù)據(jù)。

編解碼器(Codec):

視頻和音頻都需要經(jīng)過(guò)編碼,才能保存成文件。編解碼器是指以幀為單位實(shí)現(xiàn)壓縮數(shù)據(jù)和原始數(shù)據(jù)之間的相互轉(zhuǎn)換的;

編碼:原始數(shù)據(jù)->壓縮數(shù)據(jù);

解碼:壓縮數(shù)據(jù)->原始數(shù)據(jù);

不同的編碼格式(CODEC),有不同的壓縮率,會(huì)導(dǎo)致文件大小和清晰度的差異。

常用的視頻編碼格式如下:

H.262
H.264
H.265

示例:原始圖形YUV數(shù)據(jù)用H.264編碼成H264幀

常用的音頻編碼格式如下:

MP3
AAC

示例:原始聲音PCM數(shù)據(jù)用AAC編碼器編碼成AAC幀(是的音頻也有幀)

復(fù)用(mux):

把不同的流按照某種容器的規(guī)則放入容器,這種行為叫做復(fù)用(mux)

解復(fù)用(mux):

把不同的流從某種容器中解析出來(lái),這種行為叫做解復(fù)用(demux)

幀率(Frame rate):

n幀率也叫幀頻率,用FPS表示。幀率是視頻文件中每一秒的幀數(shù),肉眼想看到連續(xù)移動(dòng)圖像至少需要15幀。

一般電影的幀率為24;

碼率(Bit Rate):

比特率(也叫碼率,數(shù)據(jù)率)是一個(gè)確定整體視頻/音頻質(zhì)量的參數(shù),秒為單位處理的位數(shù),碼率和視頻質(zhì)量成正比,在視頻文件中中比特率用bps(bit per second)來(lái)表達(dá)。

碼率越低,表示壓縮程度越高,畫質(zhì)越差。

碼率越高,視頻質(zhì)量相對(duì)越高,視頻文件也就越大。

FFmpeg

FFmpeg是一個(gè)很多的項(xiàng)目,包括很多組件:

  • ffmpeg——一個(gè)命令行工具,用來(lái)對(duì)視頻文件轉(zhuǎn)換格式,也支持對(duì)電視卡即時(shí)編碼
  • ffserver——一個(gè)HTTP多媒體即時(shí)廣播流服務(wù)器,支持時(shí)光平移
  • ffplay——一個(gè)簡(jiǎn)單的播放器,基于SDL與FFmpeg庫(kù)
  • libavcodec——包含全部FFmpeg音頻/視頻編解碼庫(kù)
  • libavformat——包含demuxers和muxer庫(kù)
  • libavutil——包含一些工具庫(kù)
  • libpostproc——對(duì)于視頻做前處理的庫(kù)
  • libswscale——對(duì)于視頻作縮放的庫(kù)

我們一般說(shuō)的的FFmpeg 是指FFmpeg 的命令行工具;

第一條FFmpeg命令

ffmpeg -y -i input.mp4 -acodec copy -vcodec libx264 -s 720x1280 output.avi

參數(shù)解析

-y # 全局參數(shù),等于npm -y 
-i input.mp4 #輸入文件,F(xiàn)Fmpeg命令有位置之分, -i 之前是輸入?yún)?shù),之后是輸出參數(shù)
-acodec copy #輸出文件參數(shù),復(fù)制音頻編碼而不用重新編碼
-vcodec libx26 #輸出文件參數(shù),重新用libx26編碼(比較慢耗性能)
-s 720x1280 #輸出參數(shù),
output.avi #輸出文件
可以看到,F(xiàn)Fmpeg一般分為這五個(gè)部分,大家參考上面命令對(duì)號(hào)入座
    全局參數(shù)
    輸入文件參數(shù)
    輸入文件
    輸出文件參數(shù)
    輸出文件

所以這條命令的含義是:把視頻input.mp4不修改音頻的情況下用libx26編碼音頻,同時(shí)分辨率改成720*1280,格式改成avi;

視頻信息

左:input.mp4 ,右:output.avi

可以看到視頻文件已經(jīng)完成了命令操作轉(zhuǎn)換;

FFmpeg常用參數(shù)

-c:指定編碼器

-c copy:直接復(fù)制,不經(jīng)過(guò)重新編碼
-c:v:指定視頻編碼器
-c:a:指定音頻編碼器
-i:指定輸入文件
-an:去除音頻流
-vn: 去除視頻流,不處理視頻
-preset:指定輸出的視頻質(zhì)量,會(huì)影響文件的生成速度,有以下幾個(gè)可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
-y:不經(jīng)過(guò)確認(rèn),輸出時(shí)直接覆蓋同名文件。
-s: size 設(shè)置幀大小 格式為WXH 缺省160X128.下面的簡(jiǎn)寫也可以直接使用:Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-b: bitrate 設(shè)置比特率,缺省200kb/s
-vcodec: codec 強(qiáng)制使用codec編解碼方式。 如果用copy表示原始編解碼數(shù)據(jù)直接被拷貝。
-filter:  視頻過(guò)濾器,如 -filter:v "crop=w:h:x:y"用過(guò)濾器v裁剪視頻
		 w - 源視頻中裁剪的矩形的寬度
		 h – 矩形的高度。
		 x – 我們想自源視頻中裁剪的矩形的 x 坐標(biāo) 。
		 y – 矩形的 y 坐標(biāo)。
		 
-aspect:設(shè)置橫縱比 4:3 16:9 或 1.3333 1.7777
-ss:position 搜索到指定的時(shí)間 [-]hh:mm:ss[.xxx]的格式也支持,比如用來(lái)指定剪切開(kāi)始時(shí)間

FFmpeg命令處理流程

我們還是以這條命令為例,分析FFmpeg命令對(duì)視頻的處理經(jīng)過(guò)哪些流程

ffmpeg -y -i input.mp4 -acodec copy -vcodec libx264 -s 720x1280 output.avi

我們看圖:

我們看到命令處理一般分成5個(gè)步驟

  • 解復(fù)用:把容器文件解析成編碼的數(shù)據(jù)包;
  • 解碼:解碼器把數(shù)據(jù)包解碼成數(shù)據(jù)幀;
  • filter進(jìn)行幀處理:把1080 * 1920的數(shù)據(jù)幀處理成720 * 1280
  • 重新編碼:編碼器libx264重新把數(shù)據(jù)幀編碼成編碼的數(shù)據(jù)包;
  • 復(fù)用:把數(shù)據(jù)包按格式avi封裝;

這個(gè)簡(jiǎn)單流程比較重要,要了然于心;

FFmpeg常用命令

打印視頻基本信息

$ ffmpeg -i input.mp4 -hide_banner

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41isomavc1
    creation_time   : 2021-05-29T16:51:47.000000Z
  Duration: 00:00:30.61, start: 0.000000, bitrate: 5932 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1080x1920, 5672 kb/s, 60 fps, 60 tbr, 60 tbn (default)
    Metadata:
      creation_time   : 2021-05-29T16:51:47.000000Z
      handler_name    : L-SMASH Video Handler
      vendor_id       : [0][0][0][0]
      encoder         : AVC Coding
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 253 kb/s (default)
    Metadata:
      creation_time   : 2021-05-29T16:51:47.000000Z
      handler_name    : L-SMASH Audio Handler
      vendor_id       : [0][0][0][0]
At least one output file must be specified

轉(zhuǎn)換格式修改分辨率

ffmpeg -y -i input.mp4  -s 720x1280 output.avi

視頻靜音處理(移除音頻)

ffmpeg -i input.mp4 -an quiet.mp4

從視頻中提取圖片

ffmpeg -i input.mp4 -r 1 -f image2 -ss 00:00:10 -t 2 image-%2d.png
  • -r – 設(shè)置幀速度。即,每秒提取幀到圖像的數(shù)字。默認(rèn)值是 25。
  • -f – 表示輸出格式,即,在我們的實(shí)例中是圖像。
  • image-%2d.png – 表明我們?nèi)绾蜗朊崛〉膱D像。在這個(gè)實(shí)例中,命名應(yīng)該像這樣image-01.png、image-02.png、image-03.png 等等開(kāi)始。如果你使用 %3d,那么圖像的命名像 image-001.png、image-002.png 等等開(kāi)始。

添加/修改封面

ffmpeg -y -i input.mp4 -i cover.png -map 0 -map 1 -c copy -disposition:v:1 attached_pic cover_output.mp4

如果需要把視頻第一幀截出來(lái)坐封面,那就先提取

ffmpeg -ss 00:00:01 -i input.mp4  -f image2  cover.png

提取視頻里的音頻文件

ffmpeg -i input.mp4 -vn -c:a copy output.aac

裁剪視頻

ffmpeg -i input.mp4 -filter:v "crop=640:480:120:240" cut.mp4
  • -filter:v – 表示視頻過(guò)濾器。
  • crop – 表示裁剪過(guò)濾器。
  • w – 我們想自源視頻中裁剪的矩形的寬度。
  • h – 矩形的高度。
  • x – 我們想自源視頻中裁剪的矩形的 x 坐標(biāo) 。
  • y – 矩形的 y 坐標(biāo)。

視頻截取

ffmpeg -i input.mp4 -ss 00:00:05 -codec copy -t 10 cutout.mp4
  • -ss 開(kāi)始時(shí)間
  • -t 10,截取十秒

視頻切割拆分成多個(gè)

ffmpeg -i input.mp4 -t 00:00:13 -c copy part1.mp4 -ss 00:00:13 -codec copy part2.mp4

-t 00:00:13 表示從視頻的開(kāi)始到視頻的第 30 秒創(chuàng)建一部分視頻。

-ss 00:00:13 為視頻的下一部分顯示開(kāi)始時(shí)間戳。它意味著第 2 部分將從第 30 秒開(kāi)始,并將持續(xù)到原始視頻文件的結(jié)尾。

視頻合并拼接

ffmpeg -i "concat:part1.mp4|part2.mp4" -c:a copy -c:v copy combine.mp4

設(shè)置視屏屏蔽寬高

ffmpeg -i input.mp4 -aspect 4:3 4_3.mp4

通常使用的高寬比是:

  • 16:9
  • 4:3
  • 16:10
  • 5:4
  • 2:21:1
  • 2:35:1
  • 2:39:1

添加字幕

ffmpeg -i input.mp4 -i subtitle.srt -c copy output.mkv

是字幕文件,然后這里選用的是軟字幕方式比較快

總結(jié)

根據(jù)項(xiàng)目需要,簡(jiǎn)單學(xué)習(xí)了下音視頻的非?;镜母拍詈虵Fmpeg的基本使用,留個(gè)記錄;

[參考]

https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html

https://zhuanlan.zhihu.com/p/67878761

到此這篇關(guān)于音視頻基本概念和FFmpeg的簡(jiǎn)單入門的文章就介紹到這了,更多相關(guān)FFmpeg音視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • xmlHttp ie6下不跨域還提示沒(méi)有權(quán)限,ie8下不會(huì)有這錯(cuò)誤

    xmlHttp ie6下不跨域還提示沒(méi)有權(quán)限,ie8下不會(huì)有這錯(cuò)誤

    昨天晚上叫我好弄啊,最后發(fā)現(xiàn)原因是我url太長(zhǎng)了,最后發(fā)現(xiàn)URL在2070B左右就不行了
    2009-04-04
  • 各類常見(jiàn)語(yǔ)言清除網(wǎng)頁(yè)緩存方法匯總

    各類常見(jiàn)語(yǔ)言清除網(wǎng)頁(yè)緩存方法匯總

    這篇文章主要介紹了各類常見(jiàn)語(yǔ)言清除網(wǎng)頁(yè)緩存方法匯總,包括了常見(jiàn)的html、asp、php與java,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Spark中的數(shù)據(jù)讀取保存和累加器實(shí)例詳解

    Spark中的數(shù)據(jù)讀取保存和累加器實(shí)例詳解

    這篇文章主要為大家介紹了Spark中的數(shù)據(jù)讀取保存和累加器實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 使用VSCode如何從github拉取項(xiàng)目的實(shí)現(xiàn)

    使用VSCode如何從github拉取項(xiàng)目的實(shí)現(xiàn)

    這篇文章主要介紹了使用VSCode如何從github拉取項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 詳解HTTP協(xié)議(很經(jīng)典)

    詳解HTTP協(xié)議(很經(jīng)典)

    HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡(jiǎn)捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。本文給介紹http 協(xié)議非常經(jīng)典,需要的朋友參考下吧
    2017-09-09
  • IDEA配置以及插件和快捷鍵超全總結(jié)

    IDEA配置以及插件和快捷鍵超全總結(jié)

    這篇文章主要給大家介紹了關(guān)于IDEA配置以及插件和快捷鍵的相關(guān)資料,學(xué)習(xí)軟件工程的同學(xué)基本上都要用到idea,并且它也是目前比較主流的開(kāi)發(fā)工具,需要的朋友可以參考下
    2023-07-07
  • 詳解https 加密完整過(guò)程

    詳解https 加密完整過(guò)程

    這篇文章主要介紹了詳解https 加密完整過(guò)程的相關(guān)資料,這里主要說(shuō)名https加密及通信的方法,需要的朋友可以參考下
    2017-07-07
  • 深入理解瀏覽器的各種刷新規(guī)則

    深入理解瀏覽器的各種刷新規(guī)則

    這篇文章給大家詳細(xì)介紹了PC瀏覽器的刷新方式,以及簡(jiǎn)單的介紹了WISE瀏覽器的刷新方式,文章介紹的很詳細(xì),有需要的朋友們可以一起來(lái)看看吧。
    2016-10-10
  • vscode使用remote-ssh免密連接服務(wù)器

    vscode使用remote-ssh免密連接服務(wù)器

    本文主要介紹了vscode使用remote-ssh免密連接服務(wù)器
    2024-03-03
  • 用戶權(quán)限管理設(shè)計(jì)[圖文說(shuō)明]

    用戶權(quán)限管理設(shè)計(jì)[圖文說(shuō)明]

    用戶管理權(quán)限設(shè)計(jì)一直是大家討論的熱點(diǎn),因?yàn)閹缀跎婕暗矫恳粋€(gè)開(kāi)發(fā)的業(yè)務(wù)系統(tǒng)。我找了很多很多的資料,大家的核心基本上都是一樣的:基于角色管理. 用戶,角色,模塊,權(quán)限的相互組合,就可以形成一個(gè)強(qiáng)大的權(quán)限管理系統(tǒng)。
    2008-12-12

最新評(píng)論