音視頻處理 FFmpeg相關內容介紹 以及八大

FFmpeg的介紹

  • ?FFmpeg由Fabrice Bellard于2000年創建,由C和匯編語言進行開發
  • FF -> Fast Forward 快進
  • mpeg -> 標準化組織 Moving Pictures Experts Group
  • 使用到FFmpeg的開源項目
  • gstreamer: a framework for streaming media
  • chromium
  • mpv: Command line video player
  • kdenlive: Free and open source video editor, based on MLT Framework and KDE Frameworks 5
  • synfig: Synfig Studio is a free and open-source 2D animation software, designed as powerful industrial-strength solution for creating film-quality animation using a vector and bitmap artwork.
  • FFmpegMediaMetadataRetriever: provides a unified interface for retrieving frame and meta data from an input media file
  • HandBrake: HandBrake is an open-source video transcoder available for Linux, Mac, and Windows
  • Nadeshiko: A Linux tool to cut short videos with ffmpeg
  • 更多項目可以參考projects.html

參考鏈接

  • GitHub - FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git
  • FFmpeg學習目錄 - 簡書
  • FFmpeg初識 - 簡書

命令行工具介紹

  • ffmpeg: 對音視頻、圖片數據進行編解碼、格式轉換、分割和合并
  • ffplay:媒體播放器 使用了ffmpeg和sdl庫
  • ffprobe:音視頻文件分析工具

播放器架構

  • 對文件進行解復用,分離音頻和視頻
  • 音頻通過MP3進行播放
  • 視頻通過YUV進行播放
  • 解復用分離音視頻 用到了FFmpeg技術
  • 播放的時候 需要注意 音視頻 同步

FFMpeg都能做啥

  • FFmpeg是一個非常優秀的多媒體框架,具有開源、免費、跨平臺的特性
  • 對音頻和視頻的處理需要對應的插件進行處理
  • 可以運行在Linux MAC Windows等諸多應用平臺上
  • 功能:編碼? 解碼 轉碼 復用 解復用 過濾音視頻數據 視頻錄制 媒體格式轉換?

FFmpeg文件介紹

  • libavformat? 對多媒體格式的解析和封裝,如MP4、FLV、TS等文件的封裝格式,RTMP、RTSP、HLS等網絡協議封裝格式
  • libavutil 常用的工具函數庫 包括隨機數生成器、數據結構、數學工具、核心多媒體工具
  • libavcodec 音頻編解碼,只負責調用插件,本身并不會自主執行
  • libavdevice? 對多媒體輸入和輸出設備的信息進行采集和呈現,包括Video4Linux2,VfW,DShow和ALSA
  • libavresample 對音頻重新采樣
  • libavfilter? 對音視頻的后期處理 濾鏡
  • libswresample 對音頻操作。提供了轉換音頻的采樣頻率、聲道格式或者樣本格式的功能
  • libswscale 對視頻的操作,高度優化的圖像比例縮放、圖像顏色空間/像素格式的轉換,如rgb和yuv之間的轉換

FFmpeg 常用命令 分類

  • 基本信息查詢
  • 錄制命令 音頻和視頻
  • 分解/復用命令
  • 處理原始數據命令 處理視頻/音頻采集的原始數據
  • 裁剪與合并命令?
  • 圖片和視頻互轉命令
  • 直播相關命令
  • 各種濾鏡命令

FFmpeg處理流程

  • 輸入文件 mp4 mov格式的文件,這是一個封裝,包含了音頻和視頻等數據
  • 對輸入文件進行demuxer得到編碼數據(視頻和音頻),編碼數據包是經過壓縮的
  • 對編碼數據包 進行 解碼 得到 數據幀,此刻的數據幀是 高度還原 原始數據信息,也就是使用麥克風直接采集到的數據,但是不是完全一樣的。對數據幀進行重新編碼,進行封裝

?FFmpeg基本信息查詢命令

  • -demuxers 和 -muxers 分解 和 封裝的格式
  • -devices 將其當做一個 輸入設備,音頻、視頻、桌面設備
  • -protocol 支持的網絡協議,將網絡文件作為輸入
  • -filters 加水印 去除水印
  • -pix_fmts 像素格式 rgm YUV
  • -sample_fmts 可用的采樣模式 每一個采樣點大小 ,使用多少字節存儲一個采用,8位 16位 浮點型還是整數型等
  • -layouts 顯示channel名稱,單聲道 多聲道 還是 立體聲?

?FFmpeg錄制命令

錄制視頻

  • ffmpeg -f avfoundation -i 1? -r? 30 out.yuv
    • -f:指定使用avfoundation進行數據采集
    • -i:指定輸入,從哪采集數據,他是一個文件的索引號,1 代表屏幕 0代表攝像頭
    • -r:指定幀率 25幀就算比較流暢,60幀以上高清
    • out.yuv 保存后的數據格式 yuv表示原始數據,比較大,無壓縮
  • ctrl + c 結束錄制
  • ffplay -s 2560x1600 -pix_fmt uyvy422 out.yuv
    • 因為yuv格式的文件未封裝,ffplay不知道如何播放
    • 但是ffmpeg在進行視頻錄制的過程中會保存相關的配置信息,播放時需要指定即可
    • -pix_fmt uyvy422 像素格式
  • ffmpeg -f avfoundation? -list_devices? true -i “”顯示設備列表
    • 視頻設備
      • [0] camera
      • [1] 屏幕錄制
    • 音頻設備
      • [0]? 虛擬音頻設備
      • [1] 設備內置 麥克風

錄制音頻

  • 視頻在冒號之前指定,音頻設備在冒號后面指定
  • ffmpeg -f avfoundation -i :0 out.wav
  • 播放 ffplay out.wav

??FFmpeg分解與復用

多媒體格式轉換

  • ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
    • -vcodec copy? v代表視頻,copy表示先前封裝不變,直接拷貝
    • -acodec copy? a代表音頻,copy表示先前封裝不變,直接拷貝
    • out.flv 表示另外一種輸出格式

??FFmpeg處理原始數據

例子一 FFmpeg提取YUV數據

  • ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
  • -an a表示音頻 n 表示不要,輸出視頻不包含 音頻
  • -c:v rawvideo 對原始視頻進行編碼
  • -pix_fmt yuv420p 對像素格式進行處理
  • 播放需要指定參數ffplay -s 638x358 out.yuv

例子二?FFmpeg提取PCM數據

  • ffmpeg -i out.mp4 -vn -ar 44100 -ac2 -f s16le out.pcm
  • -vn 不要視頻
  • -ar 44100 音頻采樣率
  • -ac2 c表示聲道 2 表示雙聲道
  • -f s16le s表示有符號 16表示每一個數值使用16位表示 l表示小 e表示end 小端存儲
  • 播放指定參數 ffplay -ar 44100 -ac 2 -f s16le out.pcm

??FFmpeg濾鏡

  • 濾鏡需要針對解碼數據進行操作,對其進行過濾,再次編碼

  • ?ffmpeg -i in.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4
  • -vf 視頻濾鏡
  • crop是濾鏡的名字
  • =in_w-200:in_h-200 是與crop相對應的參數
  • in_w 視頻本身的寬度,in_h視頻本身的高度
  • -200,即在原有的視頻高度和寬度的基礎上 裁剪200,實現視頻的裁剪
  • -c:v 視頻的編碼器是libx264
  • -c:a copy 音頻不處理 直接拷貝

??FFmpeg裁剪與合并命令

  • 音視頻裁剪
  • ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts
  • -ss 00:00:00 裁剪的起始時間 時:分:秒
  • -t 10 截取多長時間的視頻,以秒為單位
  • 音視頻合并
  • ffmpeg -f concat -i inputs,txt out,flv
  • concat 拼接
  • -i inputs.txt? 存儲想要合并的文件,也就是文件列表
    • inputs.txt內容為 file filename 每一行指定一個文件
    • 例子
    • file '1.ts'
    • file '2.ts'
  • out.flv 輸出結果

FFmpeg 圖片和視頻互轉命令

  • 視頻轉圖片
  • ffmpeg -i in.flv -r 1 -f image2 image-%3d.jpeg
  • -r 轉換圖片的速率 此時設置為1,表示每秒鐘轉換1張圖片
  • -f 將輸入文件 轉化為什么格式的,這里是image2
  • 輸出結果是?image-%3d.jpeg %3d動態的遞增,%3表示3個數字組成,即文件命名image-000.jpeg 開始 ,以image-999.jpeg 結束
  • 圖片轉視頻
  • ffmpeg -i image-%3d.jpeg out.mp4
  • 播放 ffplay out.mp4 播放視頻,幾張圖立刻播放完畢

FFmpeg 直播 推 / 拉流

  • 推流
  • ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/steamName
  • -re 減慢幀率
  • -i out.mp4 推出去的流媒體
  • -c 音視頻
  • -v 視頻
  • -a 音頻
  • -f 推出去流媒體的格式?
  • rtmp://server/live/steamName 服務器
  • 拉流
  • ffmpeg -i?rtmp://server/live/steamName -c copy dump.flv
  • -c 音視頻 copy不進行編碼
  • dump.flv 將其轉換為 flv格式

簡單命令

  • ?修改圖片和視頻的分辨率
    • ffmpeg -i input -vf scale=iw/2:-1 output
    • iw: 輸入幀寬 此處將幀寬縮短為先前的1/2
    • -1: 要求scale filter保持縱橫比
  • ffplay 播放文件
    • ffplay test.mp4
  • 播放網絡文件
    • ffplay rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov //大白熊
  • 以json字符串的形式輸出數據視頻和音頻流的詳細信息
    • ffprobe -print_format json -show_streams test.mp4
    • 結果示例
chy-cpabe@ubuntu:~/ffmpeg-source/ffmpeg$ ./ffprobe -print_format json -show_streams /home/chy-cpabe/Videos/test.mp4 
ffprobe version N-106797-g580fb6a8c9 Copyright (c) 2007-2022 the FFmpeg developersbuilt with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)configuration: --prefix=/home/chy-cpabe/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/chy-cpabe/ffmpeg_build/include --extra-ldflags=-L/home/chy-cpabe/ffmpeg_build/lib --extra-libs='-lpthread -lm' --ld=g++ --bindir=/home/chy-cpabe/bin --enable-gpl --enable-gnutls --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libsvtav1 --enable-libdav1d --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfreelibavutil      57. 24.101 / 57. 24.101libavcodec     59. 27.100 / 59. 27.100libavformat    59. 23.100 / 59. 23.100libavdevice    59.  6.100 / 59.  6.100libavfilter     8. 37.100 /  8. 37.100libswscale      6.  6.100 /  6.  6.100libswresample   4.  6.100 /  4.  6.100libpostproc    56.  5.100 / 56.  5.100
{
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/chy-cpabe/Videos/test.mp4':Metadata:major_brand     : M4V minor_version   : 1compatible_brands: isomavc1mp42creation_time   : 2021-02-14T02:11:02.000000ZDuration: 00:00:23.36, start: 0.000000, bitrate: 6313 kb/sStream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 6147 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)Metadata:creation_time   : 2021-02-14T02:11:02.000000Zhandler_name    : ETI ISO Video Media Handlervendor_id       : [0][0][0][0]encoder         : Elemental H.264Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)Metadata:creation_time   : 2021-02-14T02:11:02.000000Zhandler_name    : ETI ISO Audio Media Handlervendor_id       : [0][0][0][0]"streams": [{"index": 0,"codec_name": "h264","codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10","profile": "High","codec_type": "video","codec_tag_string": "avc1","codec_tag": "0x31637661","width": 1920,"height": 1080,"coded_width": 1920,"coded_height": 1080,"closed_captions": 0,"film_grain": 0,"has_b_frames": 1,"sample_aspect_ratio": "1:1","display_aspect_ratio": "16:9","pix_fmt": "yuv420p","level": 40,"color_range": "tv","color_space": "bt709","color_transfer": "bt709","color_primaries": "bt709","chroma_location": "left","field_order": "progressive","refs": 1,"is_avc": "true","nal_length_size": "4","id": "0x1","r_frame_rate": "24000/1001","avg_frame_rate": "24000/1001","time_base": "1/24000","start_pts": 0,"start_time": "0.000000","duration_ts": 560560,"duration": "23.356667","bit_rate": "6147092","bits_per_raw_sample": "8","nb_frames": "560","extradata_size": 60,"disposition": {"default": 1,"dub": 0,"original": 0,"comment": 0,"lyrics": 0,"karaoke": 0,"forced": 0,"hearing_impaired": 0,"visual_impaired": 0,"clean_effects": 0,"attached_pic": 0,"timed_thumbnails": 0,"captions": 0,"descriptions": 0,"metadata": 0,"dependent": 0,"still_image": 0},"tags": {"creation_time": "2021-02-14T02:11:02.000000Z","language": "und","handler_name": "ETI ISO Video Media Handler","vendor_id": "[0][0][0][0]","encoder": "Elemental H.264"}},{"index": 1,"codec_name": "aac","codec_long_name": "AAC (Advanced Audio Coding)","profile": "LC","codec_type": "audio","codec_tag_string": "mp4a","codec_tag": "0x6134706d","sample_fmt": "fltp","sample_rate": "48000","channels": 2,"channel_layout": "stereo","bits_per_sample": 0,"id": "0x2","r_frame_rate": "0/0","avg_frame_rate": "0/0","time_base": "1/48000","start_pts": 0,"start_time": "0.000000","duration_ts": 1118656,"duration": "23.305333","bit_rate": "160137","nb_frames": "1094","extradata_size": 2,"disposition": {"default": 1,"dub": 0,"original": 0,"comment": 0,"lyrics": 0,"karaoke": 0,"forced": 0,"hearing_impaired": 0,"visual_impaired": 0,"clean_effects": 0,"attached_pic": 0,"timed_thumbnails": 0,"captions": 0,"descriptions": 0,"metadata": 0,"dependent": 0,"still_image": 0},"tags": {"creation_time": "2021-02-14T02:11:02.000000Z","language": "und","handler_name": "ETI ISO Audio Media Handler","vendor_id": "[0][0][0][0]"}}]
}
chy-cpabe@ubuntu:~/ffmpeg-source/ffmpeg$ 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446046.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446046.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446046.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python開發wince軟件_Wince6.0應用開發:二、模擬器的使用

上一篇我們只是搭建我們的開發平臺,那么下面我們結合之前安裝的Wince6.0模擬器進行簡單的開發,來了解一個操作流程一直寫的東西都是很直白的,(*^__^*) 嘻嘻……一、連接上我們的模擬器1、打開vs2008,選擇工具---->設備仿真器管…

python預測股票價格tushare_用tushare對股票進行簡單分析

用tushare對股票進行簡單分析(僅供交流學習)import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport tushare as ts#使用tushare 獲取每只股票的行情數據df ts.get_k_data(‘600519’,start‘2008-01-01’)print(type(df))df.to_csv(‘600519.csv’)df …

音視頻處理 基礎開發 語言基礎

基礎開發內容 Vim編譯器C語言回顧,重點介紹指針的概念Linux/MAC C語言的編譯和調試Linux/MAC 常用開發工具介紹 Vim編譯器 命令模式 拷貝 刪除 粘貼等,通過i / a 等切換到編輯模式編輯模式 編輯字符,通過ESC進行切換常用命令 創建文件 vim …

python 人氣高的項目_給大家推薦:五個Python小項目,Github上的人氣很高的!

1.深度學習框架 PytorchPyTorch 是一個 Torch7 團隊開源的 Python 優先的深度學習框架,提供兩個高級功能:● 強大的 GPU 加速 Tensor 計算(類似 numpy)● 構建基于 tape 的自動升級系統上的深度神經網絡● 你可以重用你喜歡的 python 包,如 n…

音視頻處理 ffmpeg下載、編譯和安裝

創建文件夾 ffmpeg_sources 存放源文件ffmpeg_build 構建文件并安裝庫bin 存放二進制可執行文件 安裝依賴環境 整體安裝 sudo apt-get update -qq && sudo apt-get -y install \autoconf \automake \build-essential \cmake \git-core…

CLion配置 鼠標滾輪 放大和縮小

操作 點擊File -> Settings點擊Appearance & Behavior -> Keymap在搜索框搜索 font 選擇 Decrease FontSize ,右鍵點擊,選擇add Mouse Shortcut,按住ctrl,同時向下滑動滾輪;同理,操作 Increase…

struts2通配符_基于Struts2框架的名片管理系統

本篇博文將分享一款基于Struts2框架的名片管理系統,JSP引擎為Tomcat9.0,數據庫采用的是MySQL5.5,集成開發環境為Eclipse IDE for Java EE Developers。名片管理系統主要包括用戶管理和名片管理功能。用戶功能主要包括:用戶注冊、用…

音視頻處理 Clion搭建ffmpeg開發環境

參考鏈接 Ubuntu 20.04 搭建 CLion FFmpeg 開發環境_TYYJ-洪偉的博客-CSDN博客 安裝CLion 首先到 jetbrains 官網 https://www.jetbrains.com/clion/ 下載 CLion 安裝包 CLion-2021.1.tar.gz使用finalshell和ubuntu之間配置ssh鏈接將Clion-2022.1.tar.gz 使用move移動到 /hom…

python安裝好的界面_手把手教你配置最漂亮的PyCharm界面,Python程序員必備!

高逼格超美的IDE界面,是每個程序員的夢想!隨著人工智能/機器學習的興起,Python作為一門“漂亮的語言”,再次獲得廣大程序員的關注。而JetBrains出品的PyCharm無疑是最好用的Python IDE之一。俗話說“工欲善其事,必先利…

音視頻處理 ffmpeg中級開發 H264編碼

開發介紹 libavcodec/avcodec.h常用的數據結構 AVCodec 編碼器結構體AVCodecContext 編碼器上下文AVFrame 解碼后的幀結構體內存的分配和釋放 av_frame_alloc 申請av_frame_free() 釋放avcodec_alloc_context3() 創建編碼器上下文avcodec_free_context() 釋放編碼器上下文解碼…

微信公眾號python人工智能回復_python實現微信機器人: 登錄微信、消息接收、自動回復功能...

安裝wxpypip install -u wxpy登錄微信# 導入模塊from wxpy import *# 初始化機器人,掃碼登陸bot bot()運行以上代碼,會生成一個二維碼,通過圖片掃描二維碼即可登錄微信。如果是在服務器上運行代碼,無法顯示圖片的時候&#xff0c…

音視頻處理 ffmpeg中級開發 視頻轉圖片

操作流程 目的:使用FFmpeg將視頻的每一幀數據轉換為圖片1,打開輸入的多媒體文件,檢索多媒體文件中的流信息2,查找視頻流的索引號,通過索引號獲取數據流;通過解析視頻流中的編碼參數得到解碼器ID&#xff0…

python非阻塞多線程socket_Python實現web服務器之 單進程單線程非阻塞實現并發及其原理...

在Python實現web服務器入門學習多進程、多線程實現并發HTTP服務器中,我們知道可以分別通過多進程、多線程的方式實現并發服務器,那么,是否可以通過單進程單線程的程序實現類似功能呢?實際上,在Python多任務學習分別通過yield關鍵…

企業知識庫與知識管理:如何統一戰略與實踐

在知識密集型的現代企業中,知識已經成為了一種寶貴的資產。如何有效地管理和利用這一資產,成為企業持續發展與創新的關鍵。企業知識庫與知識管理作為知識經濟的兩大支柱,它們的重要性不言而喻。但很多時候,我們發現企業的知識管理…

音視頻處理 ffmpeg中級開發 AAC編碼

介紹 編碼流程類似于視頻編碼,1,查找編碼器;2,設定參數,打開編碼器;3,數據編碼編碼函數 avcodec_encode_audio2 已經被棄用FFmpeg 過時 Api 匯總整理 - 灰色飄零 - 博客園 未成功使用 舊版本i…

虛擬機為Ubuntu分配空間

當虛擬機里面的創建的ubuntu鏡像需要更大的空間,將ubuntu關掉之后,對應調整硬盤的空間大小,由先前的20G上調至50G,但是先前的20G內存空間映射的位置是/dev/sda,后面增加的這段內存空間30G映射到/dev/sda1因此&#xff…

為什么人會擺高姿態_Yo , 你為什么喜歡沖浪?

“你為什么喜歡沖浪?” 那天木木突然問我。我愣住了。此時一道碧波恰從防潑堤(jetty)的那頭升起,木木轉頭望去,視線追著那道浪緩緩向西,直至它破碎成白色的浪花。我瞥見他眼神中的光亮,就和小孩…

音視頻處理 ffmpeg初級開發 命令行工具-實用命令

參考鏈接 ffmpeg Documentation作者:smallest_one 鏈接:FFmpeg命令行工具-實用命令 - 簡書 目錄 1,help命令使用 1.1 ffmpeg命令的語法結構1.2 獲取詳細的help信息1.3 打印幫助或者支持能力的信息1.4 全局選項1.5 文件選項1.6 視頻/音頻/字…

不同的電腦打印預覽不同怎么解決_條碼打印軟件中標簽預覽正常打印無反應怎么解決...

在使用條碼打印軟件制作標簽時,有客戶反饋,標簽打印預覽正常的,但是打印無反應,咨詢是怎么回事?今天針對這個情況,可以參考以下方法進行解決。一、預覽正常情況下,打印沒反應(1)在條碼打印軟件中設計好標簽之后&#…

python安裝scrapy_Python安裝Scrapy的種種

這幾天沒什么事,決定把自己抓代理的小工具用scrapy改寫。然而安裝的時候卻出現以下問題,反復失敗:Unable to find vcvarsall.bat經過一番查找,找到了這個文件:\Lib\distutils\_msvccompiler.py它里邊長這樣&#xff1a…