国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹

這篇具有很好參考價值的文章主要介紹了【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹,音視頻流媒體,實時音視頻

ffmpeg中文文檔
常見測試視頻
ffmpeg 大神筆記

一、ffmpeg

ffmpeg -h
ffmpeg -h long
ffmpeg -h full #可重定向到文件查看
ffmpeg -h full | grep h264 # 按關(guān)鍵字grep
ffmpeg -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf/protocol

1.1 安裝

ffmpeg 的 release 是 Linux Static Build ,即靜態(tài)庫(各庫已被打包到可執(zhí)行程序中),而不是動態(tài)鏈接庫(共享機器上的 so),所以非常方便部署(sqlite 也是這樣),這是ffmpeg官網(wǎng)下載地址

1.2 基本參數(shù)

-threads 并行線程數(shù)(如ffmpeg -threads 4 -i input.mp4 output.mp4)

二、ffprobe

2.1 查編碼格式

ffprobe a.mp4 -show_streams -select_streams v -print_format json | jq

{ 
    "streams": [ 
      { 
       "index": 0, 
       "codec_name": "h264", 
       "codec_long_name": "H.264/AVC/MPEG-4 AVC/MPEG-4 part 10", 
       "profile": "Main", 
       "codec_type": "video"
       }
    ]
}

2.2 查視頻時長

# 容器時長 container duration (和播放軟件看到的時長一樣)
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i input.mp4 # 輸出單位是秒

# 音視頻流時長 stream duration
ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

# 容器時長和音視頻流時長略有差異
# 一個媒體文件里邊有多個音視頻流,各個流的時長也未必一樣,一般播放器會以video stream的時長作為播放時長
# 另外,并不是所有格式的視頻,會在音視頻流級別保存了時長,這時可能會拿不到時長


# 解碼后的文件播放時長(get duration by decoding), 是最準確的, 但因需解碼所以耗時較長
ffmpeg -i input.mp4 -f null - | grep time # 輸出形如time=00:02:02.33

五、視頻轉(zhuǎn)流

rtsp-simple-server用法

ffmpeg -i a.mp4 -an -c h264 a_h264.mp4
ffplay 可播放本地文件
windows 下的格式工廠可修復視頻文件格式

5.1 MP4轉(zhuǎn)H264

ffmpeg -i input.mp4 -vcodec copy -bf 0 -an -bsf: h264_mp4toannexb -f h264 input.h264 # mp4轉(zhuǎn)h264
# -vcodec copy 使用原視頻的編碼
# -bf 0 移除b幀
# -an 移除音頻
# -bsf bitstream_filters  A comma-separated list of bitstream filters。其中 h264_mp4toannexb 是mp4解封裝時必須加的參數(shù)(PS: 而封裝為mp4時不需要加)
# -f h264 指定格式

注意,該命令會找時間點附近的 i 幀,所以如果視頻本身有 i 幀丟失的話(警告如下),截取的視頻會比期望的長:
【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹,音視頻流媒體,實時音視頻

按時間截取H264,且各段以i幀開頭

ffmpeg -i input.h264 -ss 0:05 -to 0:40 -c:v copy -c:a copy a.h264

查看首幀是否為i幀

ffprobe -v quiet -show_frames -select_streams v a.h264 | grep pict_type

將各小h264拼接為大h264

# 寫程序?qū)崿F(xiàn),讀各h264到內(nèi)存,內(nèi)存拼接,寫文件
# 或者用 ffmpeg
echo "file '1.h264'\nfile '2.h264'" > videos.txt
ffmpeg -y -safe 0 -f concat -i videos.txt -c copy o.h264 # -y 無需交互式確認, -c copy指定不需重新編碼, -safe 0 指定不檢查各文件名稱(防止報錯無意義的Unsafe file name)

5.2 H264轉(zhuǎn)MP4

ffmpeg -f h264 -i a.h264 -vcodec copy output.mp4

如果報錯Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly則無需理會,因為 ffmpeg 的這個警告不久以后將會被移除。參考

5.3 AVI轉(zhuǎn)MP4

ffmpeg -i 4k-01.avi -c:v h264 4k-01.mp4

5.4 MP4轉(zhuǎn)H265

如果原始視頻就是 H265,則我們通過 -v copy 沿用其視頻編碼格式,防止非常耗時的編解碼,所以我們希望把 H265 編碼的 MP4 直接轉(zhuǎn)為 H265 裸流。

ffmpeg -i a.mp4 -vcodec copy -bf 0 -an -bsf: hevc_mp4toannexb -f hevc input.h265
# -bsf: hevc_mp4toannexb: 從mp4拷貝到annexB封裝

六、視頻文件

6.1 播放

ffplay -rtsp_transport tcp rtsp://192.168.2.99/mystream

6.2 filter 過濾器

# 每個 filter 的各參數(shù)用冒號分隔。各 filter 之間用逗號分隔。形如下例: 
-vf "scale=256:256,transpose=1"

6.2.1 crop

ffmpeg -i a.mp4 -c:v libx264 -vf crop="400:400:100:100" output.mp4 # crop="w:h:x:y" 從視頻的x,y處截取w和h的畫面。-c:v libx264 是以 h264 重新編碼視頻

【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹,音視頻流媒體,實時音視頻

ffmpeg -i a.mp4 -c:v libx264 -vf "crop=iw/3:ih/3" o.mp4 # iw指input width, 設置為了原視頻的三分之一。ih 同理

【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹,音視頻流媒體,實時音視頻

6.3 視頻截取

ffmpeg -i input.mp4 -ss 1:05 -t 10 output.mp4 
# -ss(即position) 5指定從輸入視頻第1:05秒開始截取,-t(即duration) 10指明最多截取10秒
# -ss在-i后則會精確定位到1:05秒開始,而且會播放到第1:05后才執(zhí)行使得更慢運行完
# -t可使用秒數(shù)(如-t 10),也可用-t 02:00:10

ffmpeg -ss 1:05 -i input.mp4 -t 10 -c:v copy -c:a copy output.mp4
# 把-ss 1:05放到-i前面則會在第1:05附近的i幀開始,而且會直接找到1:05秒使得更快運行完
# -c:v 和 -c:a分別指定視頻和音頻的編碼格式。
# -c:v copy -c:a copy標示視頻與音頻的編碼不發(fā)生改變,而是直接復制,這樣會大大提升速度。

ffmpeg -ss 1:05 -i input.mp4 -t 10 -c:v copy -c:a aac output.mp4 # 指定音頻為 aac 編碼格式

6.3.1 案例:音頻 pcm_alow 格式不對

【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹,音視頻流媒體,實時音視頻
輸入的視頻,時長為 01:09:08.08 秒

封裝為 MP42,MP42 是一種封裝格式,它通常用于存儲視頻和音頻數(shù)據(jù)。它是基于 MPEG-4 Part 2 標準的一種格式,支持較高的壓縮比和良好的視頻質(zhì)量。MP42 封裝格式常用于存儲和傳輸視頻文件,它可以容納不同編碼格式的視頻和音頻數(shù)據(jù),并提供了一種統(tǒng)一的方式來播放這些數(shù)據(jù)。

compatible_brand 是用于指定封裝格式的兼容品牌(compatible brand)。這個選項可以在將媒體文件封裝為特定格式時使用,它定義了所生成的封裝文件與哪些品牌的解碼器兼容。

compatible_brand 選項的值通常是一個四個字符的字符串,表示兼容的品牌。這些字符串可以是標準的品牌標識符,例如 “isom”(表示 ISO Base Media File Format),“mp42”(表示 MPEG-4 Part 14 封裝格式)等。通過指定 compatible_brand,你可以確保所生成的封裝文件可以被相應品牌的解碼器所識別和解碼。

所以 mp42isomHKMI 是海康的解碼器。

Stream 0 是視頻,用 hevc(即 h265)編碼,yuv420p 顏色編碼格式。像素為 2560 x 1440,比特率 1987 kb/s,碼率 25 fps
Stream 1 是音頻,用 pcm_alaw 編碼,8000 Hz,1 通道,比特率 64 kb/s。

報錯信息是:codec 編解碼器暫不支持 pcm_alaw 音頻格式。
解決方案:使用 aac 編碼,如 ffmpeg -ss 1:05 -i input.mp4 -t 10 -c:v copy -c:a aac output.mp4。詳見 https://stackoverflow.com/questions/47495713/could-not-find-tag-for-codec-pcm-alaw-in-stream-1-codec-not-currently-supporte

6.4 視頻拼接

echo "file '1.mp4'\nfile '2.mp4'" > videos.txt
ffmpeg -f concat -i videos.txt -c copy o.mp4 # -c copy指定不需重新編碼

6.5 獲取分辨率

ffmpeg -hide_banner -rtsp_transport tcp -i rtsp://192.168.2.99/a 2>&1 | grep Video: | grep -Po '\d{3,5}x\d{3,5}' #正則的{m,n}指: 最少匹配 n 次且最多匹配 m 次

# 可能的流分辨率如下:
1920*1080 或 1920 * 1088, 即200w(即1080P)
2560 * 2048, 即400w(即2K), 即2倍1080P的算力
3072 * 2048, 即3倍1080P的算力
3840 * 2160, 即800w(即4K), 即4倍1080P的算力
4096 * 2160, 即5倍1080P的算力

七、視頻和圖

7.1 視頻抽幀

ffmpeg -i a.mp4 -vf "fps=1/10,scale=-2:720" thumbnail-03%d.jpg
# -vf 指定過濾器(filter)
# fps設置輸出幀率為十分之一,即每十秒輸出一幀
# scale設置輸出文件的大小,-2 即 width 自動計算出匹配的偶數(shù), 720 即 指定的 height

ffmpeg -i 666051400.mp4 -r 1 -q:v 2 ./%08d.jpg # 指定幀率1

【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹,音視頻流媒體,實時音視頻

7.2 視頻加圖片水印

ffmpeg -i a.mp4 -i lenna.png -filter_complex "overlay=100:100" output.mp4
# overlay=100:100 指定將 圖放在視頻的 100:100 像素的位置

【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹,音視頻流媒體,實時音視頻

7.3 生成 gif

注意:gif 自身格式限制了,視頻不要太長

ffmpeg -i a.mp4 -ss 0 -t 5 -acodec copy -vcodec copy output.mp4 # 截取視頻
ffmpeg -i output.mp4 -s 640x480 -f gif output.gif # -s指定圖片分辨率

7.4 視頻幀預覽

# 預覽首幀
ffmpeg -rtsp_transport tcp -i rtsp://192.168.2.99:3355/mystream -frames:v 1 -q:v 1 -y a.jpg

八、視頻和音頻

8.1 音量

ffmpeg -i a.mp4 -an o.mp4 # 刪除音頻軌(-vn 刪除視頻軌、-sn 刪除字幕、-db 刪除數(shù)據(jù)流)
ffmpeg -i a.mp4 -af "volume=1.5" o.mp4 # 設置音量大小為 1.5 倍(親測 99.0 倍也可生效)
ffmpeg -i a.mp4 -af "loudnorm=I=-5:LRA=1" o.mp4 # 統(tǒng)一視頻音量
ffmpeg -i a.mp4 -af "equalizer=f=1000:width_type=h:width=200:g=-1" o.mp4 # 添加equalizer(均衡器)

參考文章來源地址http://www.zghlxwxcb.cn/news/detail-716734.html

到了這里,關(guān)于【音視頻流媒體】 3、ffmpeg、ffplay、ffprobe 超詳細介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 音視頻流媒體開發(fā)難以學習?今天教你如何“絲滑”入門

    Android平臺最常用的渲染工具就是鼎鼎大名的 OpenGL ,程序員多多少少都有聽過它,目前市面上眾多3A游戲引擎很多就是由OpenGL編寫的,而與此同時,對咱們Android開發(fā)來說,為什么要學習Opengl呢?其實就倆字: 高薪 ! 今天就帶大家來了解了解 OpenGL ! OpenGL到底是什么呢?很多人

    2023年04月08日
    瀏覽(19)
  • Qt/C++音視頻開發(fā)51-推流到各種流媒體服務程序

    Qt/C++音視頻開發(fā)51-推流到各種流媒體服務程序

    最近將推流程序完善了很多功能,尤其是增加了對多種流媒體服務程序的支持,目前支持mediamtx、LiveQing、EasyDarwin、nginx-rtmp、ZLMediaKit、srs、ABLMediaServer等,其中經(jīng)過大量的對比測試,個人比較建議使用mediamtx和ZLMediaKit,因為這兩者支持的格式眾多,不僅同時支持rtsp/rtmp推流,

    2024年02月09日
    瀏覽(29)
  • JavaCV音視頻開發(fā)寶典:使用javacv讀取GB28181、??荡笕A平臺和網(wǎng)絡攝像頭sdk回調(diào)視頻碼流并轉(zhuǎn)碼推流rtmp流媒體服務

    JavaCV音視頻開發(fā)寶典:使用javacv讀取GB28181、??荡笕A平臺和網(wǎng)絡攝像頭sdk回調(diào)視頻碼流并轉(zhuǎn)碼推流rtmp流媒體服務

    《JavaCV音視頻開發(fā)寶典》專欄目錄導航 《JavaCV音視頻開發(fā)寶典》專欄介紹和目錄 本篇文章用于解決javacv接入h264/hevc裸流或者接入ps/ts流等字節(jié)流的非流媒體協(xié)議視頻源接入并推流到rtmp流媒體服務。 本篇文章適用于gb28181/海康大華網(wǎng)絡攝像機設備sdk對接以及??荡笕A等視頻平

    2023年04月09日
    瀏覽(36)
  • 音視頻 ffplay命令播放媒體

    播放本地文件 播放網(wǎng)絡流 強制解碼器 禁用音頻或視頻 播放YUV數(shù)據(jù) 播放RGB數(shù)據(jù) 播放PCM數(shù)據(jù) 推薦一個零聲學院項目課,個人覺得老師講得不錯,分享給大家: 零聲白金學習卡(含基礎架構(gòu)/高性能存儲/golang云原生/音視頻/Linux內(nèi)核) https://xxetb.xet.tech/s/VsFMs

    2024年02月10日
    瀏覽(28)
  • 音視頻開發(fā):ffplay使用ffmpeg濾鏡實現(xiàn)倍速播放

    曾經(jīng)為實現(xiàn)倍速播放使用過ffmpeg,對音頻使用atempo濾鏡即可實現(xiàn)變速不變調(diào)。但是當時效果并不是特別好,和soundtouch相比處理后的音質(zhì)有明顯的區(qū)別。最近用新版本的ffmpeg濾鏡重新實現(xiàn)了倍速播放,發(fā)現(xiàn)效果變好,已經(jīng)達到可接受的程度,所以在此分享具體實現(xiàn)。 ffmpeg倍速

    2024年02月03日
    瀏覽(72)
  • 使用EasyDarwin + ffmpeg 搭建流媒體服務器,實現(xiàn)多臺智能電視同步播放宣傳視頻

    使用EasyDarwin + ffmpeg 搭建流媒體服務器,實現(xiàn)多臺智能電視同步播放宣傳視頻

    近期單位用戶提出需求,需要在單位內(nèi)部的9臺安卓智能電視(小米電視)上同步播放用戶提供的宣傳視頻,希望能夠做到所有電視音視頻同步播放(電視均位于食堂內(nèi)部,使用內(nèi)置揚聲器,各電視間音頻延遲不同會導致混響) 。 由于電視在安裝時只預留了電源線,使用HDM

    2024年02月10日
    瀏覽(107)
  • 使用nginx和ffmpeg搭建HTTP FLV流媒體服務器(攝像頭RTSP視頻流->RTMP->http-flv)

    使用nginx和ffmpeg搭建HTTP FLV流媒體服務器(攝像頭RTSP視頻流->RTMP->http-flv)

    名詞解釋 ? RTSP (Real-Time Streaming Protocol) 是一種網(wǎng)絡協(xié)議,用于控制實時流媒體的傳輸。它是一種應用層協(xié)議,通常用于在客戶端和流媒體服務器之間建立和控制媒體流的傳輸。RTSP允許客戶端向服務器發(fā)送請求,如播放、暫停、停止、前進、后退等,以控制媒體流的播放和

    2024年02月16日
    瀏覽(34)
  • Docker RTMP服務器搭建與視頻流推送示例(流媒體服務器tiangolo/nginx-rtmp,推流客戶端ffmpeg)

    Docker RTMP服務器搭建與視頻流推送示例(流媒體服務器tiangolo/nginx-rtmp,推流客戶端ffmpeg)

    在這篇文章中,我將詳述如何搭建一個RTMP(Real-Time Messaging Protocol)服務器,并使用ffmpeg技術(shù)進行本地視頻的推流。最后,我們將使用VLC播放器來播放這個RTMP流。 首先,我們需要搭建一個RTMP服務器。為了方便起見,我們將選擇Docker作為服務器的環(huán)境。Docker的輕量化和可移植

    2024年01月17日
    瀏覽(18)
  • FFmpeg流媒體處理的收流與推流

    FFmpeg流媒體處理的收流與推流

    1. 簡介 流媒體是使用了流式傳輸?shù)亩嗝襟w應用技術(shù)。如下是維基百科關(guān)于流媒體概念的定義: 流媒體 (streaming media) 是指將一連串的媒體數(shù)據(jù)壓縮后,經(jīng)過網(wǎng)絡分段發(fā)送數(shù)據(jù),在網(wǎng)絡上即時傳輸影音以供觀賞的一種技術(shù)與過程,此技術(shù)使得數(shù)據(jù)包得以像流水一樣發(fā)送;如果不

    2024年02月11日
    瀏覽(30)
  • FFmpeg 的使用與Docker安裝流媒體服務器

    FFmpeg 的使用與Docker安裝流媒體服務器

    本文闡述的均為命令行的使用方式,并不牽扯FFmpeg 的 C++音視頻開發(fā)內(nèi)容,補充一句,C++的資料真的少,能把C++學好的人,我真的是覺得巨佬。 我主要是使用FFmpeg 推流方面的知識,案例大都是靠近這方面。 一、FFmpeg 介紹 本文讀者會比較小眾~ 看到此文的朋友,大概率是需要

    2024年01月17日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包