音視頻學習 - ffmpeg 編譯與調試

編譯

環境

macOS Ventrua 13.4
ffmpeg 7.7.1
Visual Studio Code Version: 1.99.0 (Universal)

操作

FFmpeg 下載源碼

$ cd ffmpeg-x.y.z
$ ./configure
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.# 聽勸 + 考慮到后面需要調試
$ mkdir build
$ ./configure --prefix=./build --disable-x86asm --enable-debug --disable-stripping
$ make 

編譯成功后結果如下圖

2025-04-16 16.33.06.png

ffmpeg

常用庫簡介

來自參考1

介紹
avcodec音視頻編解碼核心庫
avformat音視頻容器格式的封裝和解析
avutil核心工具庫
swscal圖像格式轉換的模塊
swresample音頻重采樣
avfilter音視頻濾鏡庫,如視頻加水印、音頻變聲
avdevice輸入輸出設備庫,提供設備數據的輸入與輸出,和硬件設備交互

2025-04-17 14.40.49.png

準備
獲取媒體信息

可以通過ffmpeg包含的工具命令ffprobe

# 獲取mp3的信息
$ ffprobe -show_format 天空之城.mp3

輸出結果如下,可知這個音頻文件采樣率是44.1KHz,雙聲道,碼率是128kb

一個采樣率為44.1KHz,采樣大小為16bit,雙聲道的 PCM編碼的WAV文件,它的數據速率則為44.1K×16×2=1411.2Kb/s。我們常說128K的MP3,對應的WAV的參數,就是這個 1411.2Kb/s,這個參數也被稱為數據帶寬,它和ADSL中的帶寬是一個概念。

Input #0, mp3, from '天空之城.mp3':Duration: 00:03:00.35, start: 0.025057, bitrate: 128 kb/sStream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/sMetadata:encoder         : LAME3.99rSide data:replaygain: track gain - -3.300000, track peak - unknown, album gain - unknown, album peak - unknown,
[FORMAT]
filename=天空之城.mp3
nb_streams=1
nb_programs=0
format_name=mp3
format_long_name=MP2/3 (MPEG audio layer 2/3)
start_time=0.025057
duration=180.349388
size=2886135
bit_rate=128024
解封裝

將mp3文件轉成pcm,選擇雙聲道,采樣率44100

# -y 允許覆蓋
# -i 源文件
# -acodec pcm_s16le 編碼器
# -f s16le 強制文件格式
# -ac 2 雙聲道
# -ar 44100 采樣率
$ ffmpeg -y -i 天空之城.mp3 -acodec pcm_s16le -f s16le -ac 2 -ar 44100 天空之城.pcm

mp3壓縮率差不多在1:10到1:12,原來大小是2.9M,轉換成31.8M,

下載VLC來播放pcm文件

$ /Applications/VLC.app/Contents/MacOS/VLC --demux=rawaud --rawaud-channels 2 --rawaud-samplerate 44100 天空之城.pcm

2025-04-17 11.30.09.png

調試ffmpeg

本文在mac環境上使用vscode來調試ffmpeg

用vscode打開ffmpeg目錄,選中ffmpeg_g

2025-04-17 15.23.23.png

點擊左側的調試功能,在出現的界面創建一個launch.json file

2025-04-17 15.23.14.png

在出現的下拉選擇框中選擇Install extension

2025-04-17 15.23.36.png

選擇CodeLLDB

2025-04-17 15.24.29.png

安裝完成后再次點擊,配置launch.json

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "ffmpeg","type": "cppdbg","request": "launch","program": "${workspaceFolder}/ffmpeg_g","args": ["-f", "avfoundation", "-list_devices", "true", "-i", "\"\""],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "lldb"}]
}

設置斷點,點擊調試

2025-04-17 16.07.09.png

與在Xcode中調試不一樣的是在交互窗口輸入命令前要加一個 -exec

參考

  1. ffmpeg 各庫的介紹、解碼流程、常用結構體
  2. ffmpeg處理pcm和mp3互轉
  3. mac:VLC播放YUV文件和pcm文件(命令行)
  4. The macOS platform uses vscode to debug ffmpeg
  5. https://ffmpeg.xianwaizhiyin.net/base-knowledge/base-knowledge.html

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

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

相關文章

golang-常見的語法錯誤

https://juejin.cn/post/6923477800041054221 看這篇文章 Golang 基礎面試高頻題詳細解析【第一版】來啦~ 大叔說碼 for-range的坑 func main() { slice : []int{0, 1, 2, 3} m : make(map[int]*int) for key, val : range slice {m[key] &val }for k, v : …

音視頻之H.265/HEVC預測編碼

H.265/HEVC系列文章: 1、音視頻之H.265/HEVC編碼框架及編碼視頻格式 2、音視頻之H.265碼流分析及解析 3、音視頻之H.265/HEVC預測編碼 預測編碼是視頻編碼中的核心技術之一。對于視頻信號來說,一幅圖像內鄰近像素之間有著較強的空間相關性,相鄰圖像之…

基于政務問答的dify接口請求測試

Dify 的智能體后端服務 API 為開發者提供便捷方式,能讓前端應用直接調用大語言模型能力。在請求時,需先前往應用左側導航的 “API Access” 部分,在此可查看文檔和管理訪問憑據。為保障安全,API 密鑰應通過后端調用,避…

VMware Workstation 保姆級 Linux(CentOS) 創建教程(附 iso)

文章目錄 一、下載二、創建 一、下載 CentOS-7.9-x86_64-DVD-2009.iso 二、創建 VMware Workstation 保姆級安裝教程(附安裝包) VMware Workstation 保姆級安裝教程(附安裝包) VMware Workstation 保姆級安裝教程(附安裝包)

擴增子分析|基于R語言microeco包進行微生物群落網絡分析(network網絡、Zi-Pi關鍵物種和subnet子網絡圖)

一、引言 microeco包是福建農林大學姚敏杰教授團隊開發的擴增子測序集成分析。該包綜合了擴增子測序下游分析的多種功能包括群落組成、多樣性、網絡分析、零模型等等。通過簡單的幾行代碼可實現復雜的分析。因此,microeco包發表以來被學界廣泛關注,截止2…

GO語言-數據類型

文章目錄 變量定義1. 整數類型2. 浮點類型3. 字符類型4. 布爾類型5. 字符串類型5.1 字符串的本質5.2 常用字符串處理函數(strings包)5.3 修改字符串的方式 6. 數據默認值7. 類型轉換 變量定義 代碼如下: package mainimport "fmt"var i1 1000 var i2 i…

線性代數 | 知識點整理 Ref 2

注:本文為 “線性代數 | 知識點整理” 相關文章合輯。 因 csdn 篇幅合并超限分篇連載,本篇為 Ref 2。 略作重排,未整理去重。 圖片清晰度限于引文原狀。 如有內容異常,請看原文。 【數學】線性代數知識點總結 阿巴 Jun 于 2024-…

JavaSE學習(前端初體驗)

文章目錄 前言一、準備環境二、創建站點(創建一個文件夾)三、將站點部署到編寫器中四、VScode實用小設置五、案例展示 前言 首先了解前端三件套:HTML、CSS、JS HTML:超文本標記語言、框架層、描述數據的; CSS&#xf…

java + spring boot + mybatis 通過時間段進行查詢

前端傳來的只有日期內容&#xff0c;如&#xff1a;2025-04-17 需要在日期內容的基礎上補充時間部分&#xff0c;代碼示例&#xff1a; /*** 日志查詢&#xff08;分頁查詢&#xff09;* param recordLogQueryDTO 查詢參數對象* return 日志列表*/Overridepublic PageBean<…

解決ubuntu自帶火狐瀏覽器無法播放視頻問題

TIPS:一般執行完1 就可以了 首先安裝必要的媒體編解碼器和插件&#xff1a; # 安裝常用媒體編解碼器和插件 sudo apt update sudo apt install -y ubuntu-restricted-extras# 安裝額外的編解碼器 sudo apt install -y ffmpeg# 安裝其他視頻相關包 sudo apt install -y libavc…

計算機網絡:流量控制與可靠傳輸機制

目錄 基本概念 流量控制&#xff1a;別噎著啦&#xff01; 可靠傳輸&#xff1a;快遞必達服務 傳輸差錯&#xff1a;現實中的意外 滑動窗口 基本概念 換句話說&#xff1a;批量發貨排隊驗收 停止-等待協議 SW&#xff08;發1份等1份&#xff09; 超時重傳&#xff1a;…

Android組件刷新

Android中刷新View的方法有以下幾種&#xff1a; 調用invalidate()方法&#xff0c;該方法會使View樹中的所有視圖無效或臟&#xff0c;等待下一次繪制時重新繪制。例如&#xff1a; mCustomView.invalidate(); 調用postInvalidate()方法&#xff0c;該方法類似于invalidate()…

Pycharm(十四)函數

一、函數概述 函數也叫方法,可以用function(函數,功能),method(方法)來表示。函數是把具有獨立功能的代碼封裝到一起,使其成為具有獨立功能的代碼集。 它的好處:1.提高代碼的復用性;2.模塊化編程。 1.1 定義格式 def 函數名(形式參數1,形式參數2...): 函數體,就是邏…

Oracle測試題目及筆記(多選)

所有題目來自于互聯網搜索 在以下概要文件的陳述中&#xff0c;哪兩個是正確的&#xff1f; &#xff08;D 和 E&#xff09; A&#xff0e; 概要文件不能被用來為賬戶加鎖 B&#xff0e; 概要文件不能被用來控制資源使用 C&#xff0e; 數據庫管理員可以使用概要文件更改用戶密…

DDoS攻防實戰指南——解析企業級防護五大解決方案

一、流量清洗中心的智能化演進 云清洗服務已從被動響應轉向主動防御。基于全球Anycast網絡的分布式清洗節點&#xff0c;可在攻擊發生時將流量牽引至專用清洗集群。阿里云2023年實測數據顯示&#xff0c;其新一代清洗設備對SYN Flood的識別準確率達99.97%&#xff0c;誤殺率控…

Ubuntu多用戶VNC遠程桌面環境搭建:從零開始的完整指南

引言: 在當今遠程工作盛行的時代,搭建一個安全、高效的多用戶遠程桌面環境變得越來越重要。本文將為您提供一個從零開始的完整指南,教您如何在Ubuntu系統上搭建多用戶VNC遠程桌面環境。無論您是系統管理員、開發團隊負責人,還是想要為家庭成員提供遠程訪問的技術愛好者,這…

數據結構專題 - 線性表

線性表是數據結構中最基礎、最常用的數據結構之一&#xff0c;它在實際應用中非常廣泛。無論是操作系統中的內存管理&#xff0c;還是數據庫中的索引結構&#xff0c;線性表都扮演著重要角色。 一、線性表的概念與抽象數據類型 1.1 線性表的邏輯結構 線性表是由n&#xff08…

使用wpa_cli和wpa_supplicant配置Liunx開發板的wlan0無線網

目錄 1 簡單介紹下wpa_cli和wpa_supplicant 1.1 wpa_supplicant 簡介 1.2 wpa_cli 簡介 1.3 它們之間的關系 2 啟動wpa_supplicant 3 使用rz工具把wpa_cli命令上傳到開發板 4 用wpa_cli配置網絡 參考文獻&#xff1a; 1 簡單介紹下wpa_cli和wpa_supplicant 1.1 wpa_su…

篩選條件在on和where中的區別(基于hivesql)

理解篩選條件在on和where中的區別&#xff0c;最好先理解sql的執行順序&#xff0c;盡管實際執行時不同的物理執行引擎可能會有特定的優化&#xff0c;但是邏輯執行順序必須遵循&#xff1a; 1&#xff09;from&#xff1a;確定數據源是什么&#xff0c;from后可以是單表&#…

springboot 項目 jmeter簡單測試流程

測試內容為 主機地址隨機數 package com.hainiu.example;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotat…