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

使用Golang獲取音視頻時(shí)長(zhǎng)信息的示例代碼

 更新時(shí)間:2024年03月25日 11:24:28   作者:杰哥的技術(shù)雜貨鋪  
這篇文章主要介紹了如何使用Golang獲取音視頻時(shí)長(zhǎng)信息,文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

一、工具簡(jiǎn)介

這些工具都是與多媒體處理和流媒體相關(guān)的開(kāi)源工具,它們都屬于 FFmpeg 多媒體框架。

  • FFmpeg

是一個(gè)用于處理多媒體內(nèi)容(音頻、視頻、圖像等)的命令行工具。它可以執(zhí)行各種各樣的操作,包括轉(zhuǎn)碼、剪輯、合并、分離、編碼、解碼等。FFmpeg 是一個(gè)功能強(qiáng)大且廣泛使用的工具,可以在多種平臺(tái)上運(yùn)行。

  • FFplay

是 FFmpeg 提供的一個(gè)簡(jiǎn)單的媒體播放器,它可以播放各種格式的音頻和視頻文件。FFplay 是基于 FFmpeg 庫(kù)構(gòu)建的,它提供了一個(gè)輕量級(jí)的命令行界面,可用于快速播放多媒體文件,適用于測(cè)試和簡(jiǎn)單的播放任務(wù)。

  • FFprobe

是一個(gè)用于分析多媒體文件的工具。它提供了詳細(xì)的信息,包括多媒體文件的編解碼器、格式、流信息等。FFprobe 可以幫助用戶了解多媒體文件的特性,例如分辨率、幀率、比特率等,這對(duì)于診斷和處理多媒體文件非常有用。

  • FFserver

是一個(gè)流媒體服務(wù)器,可以用于實(shí)時(shí)轉(zhuǎn)碼和分發(fā)音頻/視頻流。它可以接受來(lái)自各種來(lái)源(如攝像頭、音頻接口等)的多媒體流,并將其轉(zhuǎn)碼為不同的格式和分辨率,然后通過(guò)網(wǎng)絡(luò)分發(fā)給客戶端。FFserver 可以用于構(gòu)建自己的流媒體平臺(tái),例如音視頻直播服務(wù)或視頻點(diǎn)播服務(wù)。

二、使用golang獲取時(shí)間長(zhǎng)

package main

import (
	"bufio"
	"fmt"
	"os/exec"
	"strconv"
)

// getDuration 通過(guò)調(diào)用 ffprobe 來(lái)獲取音視頻文件的時(shí)長(zhǎng)

// 函數(shù)接收一個(gè)字符串參數(shù) filePath,表示音視頻文件的路徑。
// 函數(shù)返回兩個(gè)值:一個(gè)整數(shù)表示時(shí)長(zhǎng)(秒),一個(gè) error 表示可能發(fā)生的錯(cuò)誤。
func getDuration(filePath string) (int, error) {

	// 使用 exec.Command 創(chuàng)建一個(gè)新的命令,調(diào)用 ffprobe 并帶上一系列參數(shù)來(lái)指示它只輸出文件的時(shí)長(zhǎng)。
	cmd := exec.Command("/Users/lijie/workspace/ffmpeg-lijie/ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", filePath)

	//通過(guò) StdoutPipe 方法獲取命令的標(biāo)準(zhǔn)輸出流,以便我們可以讀取 ffprobe 的輸出。
	stdout, err := cmd.StdoutPipe()
	//如果在獲取輸出流時(shí)發(fā)生錯(cuò)誤,則返回錯(cuò)誤。
	if err != nil {
		return 0, err
	}

	//啟動(dòng) ffprobe 命令。如果啟動(dòng)失敗,則返回錯(cuò)誤。
	if err := cmd.Start(); err != nil {
		return 0, err
	}

	//創(chuàng)建一個(gè)新的 bufio.Scanner 來(lái)讀取 ffprobe 的標(biāo)準(zhǔn)輸出。
	scanner := bufio.NewScanner(stdout)

	//使用 Scan 方法讀取輸出的第一行(即文件的時(shí)長(zhǎng))。
	if scanner.Scan() {
		//scanner.Text() 獲取讀取到的字符串。
		durationStr := scanner.Text()
		//使用 strconv.ParseFloat 將時(shí)長(zhǎng)字符串轉(zhuǎn)換為浮點(diǎn)數(shù)。
		duration, err := strconv.ParseFloat(durationStr, 64)
		//如果轉(zhuǎn)換失敗,則返回錯(cuò)誤。
		if err != nil {
			return 0, err
		}
		//將浮點(diǎn)數(shù)時(shí)長(zhǎng)轉(zhuǎn)換為整數(shù)(秒),并返回,沒(méi)有錯(cuò)誤。
		return int(duration), nil
	}
	return 0, fmt.Errorf("no duration found")

}

// formatDurationSeconds 函數(shù)將秒數(shù)轉(zhuǎn)換為分秒格式的字符串。
// 函數(shù)接收一個(gè)整數(shù)參數(shù) seconds,表示時(shí)長(zhǎng)(秒)。
// 函數(shù)返回一個(gè)字符串,表示時(shí)分秒格式的時(shí)長(zhǎng)。
func formatDurationSeconds(seconds int) string {
	//計(jì)算時(shí)鐘數(shù),通過(guò)將總秒數(shù)除以3600。
	hours := seconds / 3600
	//計(jì)算分鐘數(shù),通過(guò)將總秒數(shù)除以60。
	minutes := (seconds % 3600) / 60
	//計(jì)算剩余的秒數(shù),通過(guò)取總秒數(shù)除以60的余數(shù)。
	seconds = seconds % 60

	//根據(jù)秒數(shù)自動(dòng)判斷是否包含小時(shí),并相應(yīng)地格式化輸出
	if hours > 0 {
		//根據(jù)秒數(shù)自動(dòng)判斷是否包含分鐘,并相應(yīng)地格式化輸出
		if minutes > 0 {
			//使用 fmt.Sprintf 格式化分鐘和秒數(shù)為 "MM:SS" 格式的字符串,并確保分鐘和秒數(shù)都是兩位數(shù)(不足兩位時(shí)前面補(bǔ)0)。
			return fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds)
		} else {
			return fmt.Sprintf("%02d:%02d", hours, seconds)
		}
	} else if minutes > 0 {
		return fmt.Sprintf("%02d:%02d", minutes, seconds)
	} else {
		return fmt.Sprintf("00:%02d", seconds)
	}

}
func main() {
   //定義音視頻文件的路徑,并替換為實(shí)際的文件路徑。
	filePath := "/opt/www/nginx/html/pages/resource/input.mp3"

	//調(diào)用 getDuration 函數(shù)獲取文件的時(shí)長(zhǎng)(秒)。
	durationSeconds, err := getDuration(filePath)
	//如果在獲取時(shí)長(zhǎng)時(shí)發(fā)生錯(cuò)誤,則打印錯(cuò)誤并退出程序。
	if err != nil {
		fmt.Println("Error getting duration:", err)
		return
	}
	fmt.Println("Duration:", durationSeconds)
	//調(diào)用 formatDurationSeconds 函數(shù)將時(shí)長(zhǎng)(秒)轉(zhuǎn)換為時(shí)分秒格式的字符串。
	durationFormatted := formatDurationSeconds(durationSeconds)
	fmt.Printf("Duration: %s\n", durationFormatted)
}

到此這篇關(guān)于使用Golang獲取音視頻時(shí)長(zhǎng)信息的示例代碼的文章就介紹到這了,更多相關(guān)Golang獲取時(shí)間長(zhǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言學(xué)習(xí)技巧之如何合理使用Pool

    Go語(yǔ)言學(xué)習(xí)技巧之如何合理使用Pool

    這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言學(xué)習(xí)技巧之如何合理使用Pool的相關(guān)資料,Pool用于存儲(chǔ)那些被分配了但是沒(méi)有被使用,而未來(lái)可能會(huì)使用的值,以減小垃圾回收的壓力。文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • Go語(yǔ)言Zap庫(kù)Logger的定制化和封裝使用詳解

    Go語(yǔ)言Zap庫(kù)Logger的定制化和封裝使用詳解

    這篇文章主要介紹了Go語(yǔ)言Zap庫(kù)Logger的定制化和封裝使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go有效獲取變量類(lèi)型多種方法探索

    Go有效獲取變量類(lèi)型多種方法探索

    這篇文章主要介紹了Go有效獲取變量類(lèi)型的多種方法探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02
  • go語(yǔ)言interface接口繼承多態(tài)示例及定義解析

    go語(yǔ)言interface接口繼承多態(tài)示例及定義解析

    這篇文章主要為大家介紹了go語(yǔ)言interface接口繼承多態(tài)示例及定義解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 在Golang中使用iota案例詳解

    在Golang中使用iota案例詳解

    在Go語(yǔ)言中,iota是一個(gè)預(yù)定義的標(biāo)識(shí)符,用于在常量聲明中生成連續(xù)的遞增值,iota的值從0開(kāi)始,每次在常量聲明中使用時(shí)遞增,本就給大家講解一下Golang中iota的使用案例,感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-07-07
  • 解析Go 標(biāo)準(zhǔn)庫(kù) http.FileServer 實(shí)現(xiàn)靜態(tài)文件服務(wù)

    解析Go 標(biāo)準(zhǔn)庫(kù) http.FileServer 實(shí)現(xiàn)靜態(tài)文件服務(wù)

    http.FileServer 方法屬于標(biāo)準(zhǔn)庫(kù) net/http,返回一個(gè)使用 FileSystem 接口 root 提供文件訪問(wèn)服務(wù)的 HTTP 處理器。下面通過(guò)本文給大家介紹Go 標(biāo)準(zhǔn)庫(kù) http.FileServer 實(shí)現(xiàn)靜態(tài)文件服務(wù)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2018-08-08
  • golang 實(shí)現(xiàn)tcp server端和client端,并計(jì)算RTT時(shí)間操作

    golang 實(shí)現(xiàn)tcp server端和client端,并計(jì)算RTT時(shí)間操作

    這篇文章主要介紹了golang 實(shí)現(xiàn)tcp server端和client端,并計(jì)算RTT時(shí)間操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang二進(jìn)制反匯編問(wèn)題

    Golang二進(jìn)制反匯編問(wèn)題

    這篇文章主要介紹了Golang二進(jìn)制反匯編問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 解析Golang和Java的優(yōu)勢(shì)與劣勢(shì)

    解析Golang和Java的優(yōu)勢(shì)與劣勢(shì)

    Golang和Java是兩種流行的編程語(yǔ)言,它們?cè)诤芏喾矫嬗兄嗨浦?但也存在一些重要的區(qū)別,本文將對(duì)Golang和Java進(jìn)行對(duì)比,探討它們的特點(diǎn)和適用場(chǎng)景,需要的朋友可以參考下
    2023-10-10
  • go 異常處理panic和recover的簡(jiǎn)單實(shí)踐

    go 異常處理panic和recover的簡(jiǎn)單實(shí)踐

    在Go語(yǔ)言中,異常處理主要通過(guò)panic和recover這兩個(gè)內(nèi)建函數(shù)來(lái)實(shí)現(xiàn),本文主要介紹了go異常處理panic和recover的簡(jiǎn)單實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04

最新評(píng)論