日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ffmpeg architecture(上)

發布時間:2023/11/28 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ffmpeg architecture(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ffmpeg architecture(上)

· 視頻-您看到的是什么!

· 如果您有一系列圖像序列,并以給定的頻率(例如每秒24張圖像)進行更改,則會產生運動的錯覺。總之,這是視頻背后的基本概念:一系列以給定速率運行的圖片/幀。

音頻-您在聽什么!

盡管靜音的視頻可以表達各種感覺,但是添加聲音可以為體驗帶來更多樂趣。

聲音是指壓力波通過空氣或任何其他傳輸介質(例如氣體,液體或固體)傳播的振動。

在數字音頻系統中,麥克風將聲音轉換為模擬電信號,然后通常使用脈沖編碼調制(PCM)的模數轉換器(ADC)將模擬信號轉換為數字信號。

編解碼器-縮小數據

CODEC是一種壓縮或解壓縮數字音頻/視頻的電子電路或軟件。它將原始(未壓縮的)數字音頻/視頻轉換為壓縮格式,反之亦然。 https://zh.wikipedia.org/wiki/Video_codec

但是,如果我們選擇將數百萬個圖像打包到一個文件中并稱為電影,那么最終可能會得到一個巨大的文件。讓我們做一下數學:

假設我們正在創建一個分辨率為1080 x 1920(高度x寬度)的視頻,并且我們將花費3 bytes每個像素(屏幕上的最小點)來編碼顏色(或24位顏色,這將為我們提供16,777,216種不同的顏色),視頻的播放時間24 frames per second很30 minutes長。

toppf = 1080 * 1920 // total_of_pixels_per_frame

cpp = 3 // cost_per_pixel

tis = 30 * 60 // time_in_seconds

fps = 24 //
frames_per_second
required_storage = tis * fps * toppf * cpp

該視頻大約需要250.28GB存儲或1.11Gbps帶寬!這就是為什么我們需要使用CODEC的原因。

容器-音頻和視頻的舒適場所

容器或包裝器格式是圖元文件格式,其規范描述了計算機文件中數據和元數據的不同元素如何共存。https://zh.wikipedia.org/wiki/Digital_container_format

甲包含所有流單個文件(主要是音頻和視頻),它也提供了同步和一般的元數據,例如標題,分辨率等

通常,我們可以通過查看文件的擴展名來推斷文件的格式:例如,a video.webm可能是使用container的視頻webm。

FFmpeg-命令行

完整的跨平臺解決方案,用于記錄,轉換和流傳輸音頻和視頻。

要使用多媒體,我們可以使用稱為FFmpeg的AMAZING工具/庫。您已經有可能直接或間接知道/使用它(是否使用Chrome?)。

它有一個名為的命令行程序ffmpeg,這是一個非常簡單但功能強大的二進制文件。例如,您可以通過輸入以下命令從轉換mp4為容器avi:

$ ffmpeg -i input.mp4 output.avi

我們只是在這里進行了重新混合,它正在從一個容器轉換為另一個容器。從技術上講,FFmpeg也可以進行轉碼,但我們稍后再討論。

FFmpeg命令行工具101

FFmpeg確實有一個文檔,可以很好地解釋其工作原理。

簡而言之,FFmpeg命令行程序期望以下參數格式執行其操作ffmpeg {1} {2} -i {3} {4} {5},其中:

  1. 全局選項

  2. 輸入文件選項

  3. 輸入網址

  4. 輸出文件選項

  5. 輸出網址

第2、3、4和5部分可以根據需要任意設置。實際上,更容易理解此參數格式:

#警告:此文件約為300MB$ wget -O bunny_1080p_60fps.mp4 http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_60fps_normal.mp4 $ ffmpeg -y \ #全局選項 -c:a libfdk_aac -c:v libx264 \ #輸入選項 -i bunny_1080p_60fps.mp4 \ #輸入URL -c:v libvpx-vp9 -c:a libvorbis \ #輸出選項 bunny_1080p_60fps_vp9.webm #輸出網址

此命令獲取mp4包含兩個流(使用aacCODEC 編碼的音頻和使用h264CODEC 編碼的視頻)的輸入文件,并將其轉換為webm,同時更改其音頻和視頻CODEC。

我們可以簡化上面的命令,但是請注意FFmpeg將采用或猜測您的默認值。例如,當您只鍵入使用ffmpeg -i input.avi output.mp4哪種音頻/視頻編解碼器來生成output.mp4?

Werner Robitza編寫了有關使用FFmpeg進行編碼和編輯的必讀/執行教程。

常見的視頻操作

在處理音頻/視頻時,我們通常會對媒體執行一系列任務。

轉碼

什么?將其中一個流(音頻或視頻)從一個編解碼器轉換為另一個的行為。

為什么?有時某些設備(電視,智能手機,控制臺等)不支持X,但Y和更新的CODEC提供更好的壓縮率。

怎么樣?將H264(AVC)視頻轉換為H265(HEVC)。

$ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libx265 \bunny_1080p_60fps_h265.mp4

什么?從一種格式(容器)轉換為另一種格式的行為。

為什么?有時某些設備(電視,智能手機,控制臺等)不支持X,但支持Y,有時更新的容器提供現代必需的功能。

怎么樣?將轉換mp4為webm。

$ ffmpeg -i bunny_1080p_60fps.mp4 -c復制\ #只是對ffmpeg說,跳過編碼 bunny_1080p_60fps.webm

轉換中

什么?更改比特率或產生其他再現的行為。

為什么?人們會嘗試2G使用功能較弱的智能手機在(邊緣)連接中觀看視頻,或者在fiber其4K電視上通過Internet連接觀看視頻,因此,您應該為同一視頻提供不止一個比特率的不同版本。

怎么樣?產生比特率在3856K和2000K之間的演繹。

$ ffmpeg -i bunny_1080p_60fps.mp4 -最小964K-最大3856K -bufsize 2000K \bunny_1080p_60fps_transrating_964_3856.mp4

通常,我們將使用帶有轉換的轉換。Werner Robitza寫了另一篇有關FFmpeg速率控制的必讀/執行的系列文章。

轉換中

什么?從一種分辨率轉換為另一種分辨率的行為。如前所述,轉換通常與轉換一起使用。

為什么?原因與移轉大致相同。

怎么樣?將轉換1080p為480p分辨率。

$ ffmpeg -i bunny_1080p_60fps.mp4 -vf scale = 480:-1 \bunny_1080p_60fps_transsizing_480.mp4

紅利回合:自適應流

什么?產生多種分辨率(比特率)并將媒體拆分為多個部分并通過http服務的行為。為什么?為了提供可以在低端智能手機或4K電視上觀看的靈活媒體,它還易于擴展和部署,但會增加延遲。

怎么樣?使用DASH創建自適應WebM。

#個視頻流$ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 160x90 -b:v 250k -keyint_min 150 -g 150 -an -f webm -dash 1 video_160x90_250k.webm $ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 320x180 -b:v 500k -keyint_min 150 -g 150 -an -f webm -dash 1 video_320x180_500k.webm $ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 640x360 -b:v 750k -keyint_min 150 -g 150 -an -f webm -dash 1 video_640x360_750k.webm $ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 640x360 -b:v 1000k -keyint_min 150 -g 150 -an -f webm -dash 1 video_640x360_1000k.webm $ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 1280x720 -b:v 1500k -keyint_min 150 -g 150 -an -f webm -dash 1 video_1280x720_1500k.webm #音頻流$ ffmpeg -i bunny_1080p_60fps.mp4 -c:a libvorbis -b:a 128k -vn -f webm -dash 1 audio_128k.webm #的DASH清單$ ffmpeg \ -f webm_dash_manifest -i video_160x90_250k.webm \ -f webm_dash_manifest -i video_320x180_500k.webm \ -f webm_dash_manifest -i video_640x360_750k.webm \ -f webm_dash_manifest -i video_640x360_1000k.webm \ -f webm_dash_manifest -i video_1280x720_500k.webm \ -f webm_dash_manifest -i audio_128k.webm \ -c復制-map 0 -map 1 -map 2 -map 3 -map 4 -map 5 \ -f webm_dash_manifest \ -adaptation_sets “ id = 0,streams = 0,1,2,3,4 id = 1,streams = 5 ” \ manifest.mpd

PS:我從指令中竊取了此示例,以使用DASH播放Adaptive WebM

超越

有許多和許多其他用途的FFmpeg的。我將它與iMovie結合使用,可以為YouTube制作/編輯一些視頻,您當然可以專業地使用它。

總結

以上是生活随笔為你收集整理的ffmpeg architecture(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。