FFmpeg常見命令行(一):FFmpeg工具使用基礎(chǔ)

前言

在Android音視頻開發(fā)中,網(wǎng)上知識點過于零碎,自學(xué)起來難度非常大,不過音視頻大牛Jhuster提出了《Android 音視頻從入門到提高 - 任務(wù)列表》。本文是Android音視頻任務(wù)列表的其中一個, 對應(yīng)的要學(xué)習(xí)的內(nèi)容是:FFmpeg常見命令行(一):FFmpeg工具使用基礎(chǔ)


1.1 FFmpeg簡介

1.1.1 FFmpeg的定義

FFmpeg是一個開源的跨平臺多媒體處理工具集,它可以用于處理音頻、視頻和其他多媒體數(shù)據(jù)。FFmpeg提供了一組功能強大的命令行工具,用于音頻和視頻的編解碼、轉(zhuǎn)換、處理、流媒體傳輸?shù)热蝿?wù)。

FFmpeg支持多種音頻和視頻格式,包括常見的MP3、AAC、FLAC、H.264、H.265等。它可以進行音頻和視頻的編碼(將數(shù)據(jù)壓縮為特定格式)、解碼(將數(shù)據(jù)解壓為原始格式)、轉(zhuǎn)碼(在不同格式之間進行轉(zhuǎn)換)、剪輯、合并、提取音頻或視頻流、添加字幕、調(diào)整音量、應(yīng)用濾鏡效果等操作。

FFmpeg是一個非常靈活和強大的工具集,廣泛應(yīng)用于多媒體處理領(lǐng)域。它被許多軟件、平臺和服務(wù)所使用,包括視頻編輯軟件、流媒體服務(wù)器、音頻播放器、視頻轉(zhuǎn)碼服務(wù)等。由于其開源的特性,F(xiàn)Fmpeg也得到了廣泛的社區(qū)支持和貢獻,使其不斷發(fā)展和改進。


1.1.2 FFmpeg的基本組成

FFmpeg由多個核心組件組成,它們共同構(gòu)成了這個多媒體處理工具集的基礎(chǔ)。以下是FFmpeg的基本組成:

  1. libavcodec:這是FFmpeg的核心編解碼庫,提供了音頻和視頻編解碼器的實現(xiàn)。它支持各種格式的音頻和視頻編碼,包括常見的MP3、AAC、FLAC、H.264、H.265等。libavcodec負責(zé)將音頻和視頻數(shù)據(jù)從一種格式轉(zhuǎn)換為另一種格式。
  2. libavformat:這個組件處理音頻和視頻的容器格式(例如MP4、AVI、MKV等)。它能夠解析和封裝多種容器格式,使得FFmpeg可以讀取和寫入不同的音頻和視頻文件。
  3. libavfilter:這是FFmpeg的濾鏡庫,用于實現(xiàn)各種音頻和視頻的濾鏡效果,如調(diào)整亮度、對比度、色彩平衡,添加水印,去噪等。libavfilter允許用戶在處理音頻和視頻時應(yīng)用各種視覺和音頻效果。
  4. libavutil:這是一個輔助庫,提供了一些常用的工具函數(shù),用于處理音頻、視頻和其他多媒體數(shù)據(jù)。它包含了數(shù)據(jù)結(jié)構(gòu)、數(shù)學(xué)運算、時間管理、內(nèi)存管理等功能,為其他組件提供了基礎(chǔ)支持。
  5. libswscale:這個組件用于圖像的縮放和顏色空間轉(zhuǎn)換。它能夠?qū)⒉煌直媛屎筒煌伾臻g的圖像進行轉(zhuǎn)換,以適應(yīng)不同的顯示設(shè)備或編碼要求。

除了上述核心組件外,F(xiàn)Fmpeg還包含許多其他的輔助工具和庫,用于處理音頻、視頻和其他多媒體任務(wù)。例如,命令行工具FFmpegffprobe是常用的工具,用于執(zhí)行音視頻轉(zhuǎn)碼、分析多媒體文件等操作。

總之,F(xiàn)Fmpeg的基本組成是由編解碼庫、容器處理庫、濾鏡庫、工具庫等多個組件構(gòu)成,它們協(xié)同工作,提供了豐富的功能和靈活性,使得FFmpeg成為一個強大的多媒體處理工具集。


1.1.3 FFmpeg的編解碼工具FFmpeg

FFmpeg的編解碼工具命令行是FFmpeg中最常用和最重要的工具之一,用于執(zhí)行音頻和視頻的編解碼、轉(zhuǎn)換、處理等任務(wù)。

使用FFmpeg工具,你可以通過指定輸入文件和輸出文件的參數(shù),對音頻和視頻進行各種操作。以下是一些常見的用法示例:

  1. 音視頻轉(zhuǎn)碼:將一個音頻或視頻文件轉(zhuǎn)換為不同的編碼格式。
ffmpeg -i input.mp4 output.avi

上述命令將輸入文件input.mp4轉(zhuǎn)碼為輸出文件output.avi

  1. 剪輯和裁剪:截取音頻或視頻的一部分,或者裁剪音頻或視頻的尺寸。
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4

上述命令從input.mp4文件中提取從第10秒開始持續(xù)30秒的內(nèi)容,并將其保存為output.mp4文件。

  1. 添加水印:在視頻上添加文字或圖像水印。
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4

上述命令將名為watermark.png的水印添加到input.mp4視頻的右下角,并生成output.mp4文件。

  1. 調(diào)整音頻和視頻參數(shù):調(diào)整音頻和視頻的比特率、幀率、分辨率等參數(shù)。
ffmpeg -i input.mp4 -b:v 1M -r 30 -s 1280x720 output.mp4

上述命令將輸入文件input.mp4的視頻比特率設(shè)置為1 Mbps,幀率設(shè)置為30幀/秒,分辨率設(shè)置為1280x720,并輸出為output.mp4文件。

這只是一些FFmpeg工具的常見用法示例,它具有非常豐富的功能和選項,可以執(zhí)行各種復(fù)雜的音頻和視頻處理任務(wù)。你可以通過查閱FFmpeg的文檔或在命令行中輸入FFmpeg --help來獲取更多詳細的用法和選項信息。


1.1.4 FFmpeg的播放器ffplay

FFmpeg提供了一個命令行播放器工具,名為ffplay,它用于播放音頻和視頻文件。ffplay具有簡單的界面,可以實時播放音頻和視頻,并支持基本的播放控制。

下面是一些使用ffplay的示例:

  1. 播放音頻文件
ffplay input.mp3

上述命令將播放名為input.mp3的音頻文件。

  1. 播放視頻文件
ffplay input.mp4

上述命令將播放名為input.mp4的視頻文件。

  1. 調(diào)整播放速度
ffplay -vf "setpts=0.5*PTS" input.mp4

上述命令將以0.5倍速度播放input.mp4視頻文件。

  1. 跳轉(zhuǎn)到指定時間
ffplay -ss 00:01:30 input.mp4

上述命令將從input.mp4視頻文件的1分30秒處開始播放。

  1. 全屏模式
ffplay -fs input.mp4

上述命令將以全屏模式播放input.mp4視頻文件。

ffplay還支持一些其他的選項和快捷鍵,例如調(diào)整音量、截圖、設(shè)置字幕等。你可以通過在命令行中輸入ffplay --help來查看詳細的選項和用法信息。

需要注意的是,盡管ffplay是一個方便的命令行播放器工具,但它的功能相對簡單,不如專業(yè)的媒體播放器那樣完善和高級。如果你需要更復(fù)雜的播放需求,可以考慮使用其他媒體播放器軟件,如VLC媒體播放器。


1.1.5 FFmpeg的多媒體分析器ffprobe

FFmpeg提供了一個多媒體分析器工具,名為ffprobe。ffprobe用于分析音頻和視頻文件的詳細信息,包括編解碼格式、比特率、分辨率、幀率、音頻通道、元數(shù)據(jù)等。

以下是一些使用ffprobe的示例:

  1. 查看文件信息
ffprobe input.mp4

上述命令將顯示input.mp4視頻文件的詳細信息,包括視頻流、音頻流、格式信息等。

  1. 輸出JSON格式
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

上述命令將以JSON格式輸出input.mp4視頻文件的信息,包括格式信息和流信息。

  1. 查看特定流的信息
ffprobe -show_streams -select_streams a input.mp4

上述命令將顯示input.mp4視頻文件中的音頻流信息。

  1. 提取元數(shù)據(jù)
ffprobe -show_format -loglevel error -of default=noprint_wrappers=1:nokey=1 -sexagesimal input.mp4

上述命令將提取input.mp4視頻文件的元數(shù)據(jù)信息,如時長、創(chuàng)建時間等。

ffprobe支持許多其他的選項和用法,可以通過在命令行中輸入ffprobe --help來查看詳細的信息。

通過使用ffprobe,你可以快速了解音頻和視頻文件的各種屬性和參數(shù),以便進行后續(xù)的處理和分析。它在媒體文件的調(diào)試、調(diào)優(yōu)、元數(shù)據(jù)提取等方面非常有用。


1.2 FFmpeg常用命令

1.2.1 FFmpeg的封裝轉(zhuǎn)換

下面是一些FFmpeg常用的命令,用于封裝轉(zhuǎn)換:

  1. 視頻格式轉(zhuǎn)換:
FFmpeg -i input.mp4 output.avi

這個命令將輸入的input.mp4文件轉(zhuǎn)換成output.avi文件,可以根據(jù)需要修改輸入輸出的文件名和路徑。

  1. 視頻封裝:
FFmpeg -i input.mp4 -c copy output.mkv

這個命令將輸入的input.mp4文件進行封裝,轉(zhuǎn)換成Matroska封裝格式(.mkv)。使用-c copy選項可以直接復(fù)制視頻和音頻流,加快轉(zhuǎn)換速度而不進行重新編碼。

  1. 音頻格式轉(zhuǎn)換:
FFmpeg -i input.mp3 output.ogg

這個命令將輸入的input.mp3音頻文件轉(zhuǎn)換成output.ogg文件,可以根據(jù)需要修改輸入輸出的文件名和路徑。

  1. 視頻轉(zhuǎn)換并調(diào)整分辨率和比特率:
FFmpeg -i input.mp4 -s 1280x720 -b:v 2M output.mp4

這個命令將輸入的input.mp4視頻文件轉(zhuǎn)換成output.mp4文件,并將視頻分辨率調(diào)整為1280x720,視頻比特率為2 Mbps。你可以根據(jù)需要修改分辨率和比特率的值。

  1. 視頻轉(zhuǎn)換并裁剪:
FFmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c:v copy -c:a copy output.mp4

這個命令將輸入的input.mp4視頻文件從第10秒裁剪到第30秒,并將裁剪后的視頻保存為output.mp4文件。使用-c:v copy-c:a copy選項可以直接復(fù)制視頻和音頻流,加快裁剪速度而不進行重新編碼。

  1. 視頻轉(zhuǎn)換并添加水?。?/li>
FFmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

這個命令將輸入的input.mp4視頻文件添加名為watermark.png的水印,并將水印位置設(shè)置為距離視頻左上角10個像素的位置,然后保存為output.mp4文件。你可以調(diào)整overlay濾鏡中的位置參數(shù)來更改水印位置。

以上是一些常用的FFmpeg命令,用于封裝轉(zhuǎn)換音視頻文件。


1.2.2 FFmpeg的轉(zhuǎn)碼參數(shù)

FFmpeg提供了許多參數(shù)和選項,可以進行音視頻的轉(zhuǎn)碼操作。下面是一些常用的轉(zhuǎn)碼參數(shù)示例:

  1. 指定輸出編碼格式:

    -c:a <編碼器>:設(shè)置音頻編碼器
    -c:v <編碼器>:設(shè)置視頻編碼器
    
    

    例如,使用AAC音頻編碼器和H.264視頻編碼器進行轉(zhuǎn)碼:

    FFmpeg -i input.mp4 -c:a aac -c:v libx264 output.mp4 
    
    
  2. 指定輸出碼率(比特率):

    -b:a <音頻比特率>:設(shè)置音頻比特率
    -b:v <視頻比特率>:設(shè)置視頻比特率
    
    

    例如,設(shè)置音頻比特率為128kbps,視頻比特率為1000kbps:

    FFmpeg -i input.mp4 -b:a 128k -b:v 1000k output.mp4
    
    
  3. 指定輸出分辨率:

    -s <寬度x高度>:設(shè)置輸出分辨率
    
    

    例如,將視頻轉(zhuǎn)碼為720p分辨率:

    FFmpeg -i input.mp4 -s 1280x720 output.mp4
    
    
  4. 指定輸出幀率:

    -r <幀率>:設(shè)置輸出幀率
    
    

    例如,將視頻轉(zhuǎn)碼為30幀/秒:

    FFmpeg -i input.mp4 -r 30 output.mp4
    
    

這些是常見的轉(zhuǎn)碼參數(shù)示例,F(xiàn)Fmpeg還提供了許多其他參數(shù)和選項,可以根據(jù)具體需求進行調(diào)整和配置。


1.2.3 FFmpeg的基本轉(zhuǎn)碼原理

FFmpeg的基本轉(zhuǎn)碼原理涉及音視頻編解碼、封裝格式和過濾器的處理。下面簡要介紹FFmpeg的基本轉(zhuǎn)碼原理:

  1. 音視頻編解碼
    音視頻編解碼是將原始的音視頻數(shù)據(jù)(例如MP4、AVI文件)轉(zhuǎn)換成不同的編解碼格式(例如H.264視頻、AAC音頻)。編碼是將原始數(shù)據(jù)壓縮成較小的尺寸以節(jié)省空間,而解碼是將壓縮的數(shù)據(jù)還原為原始數(shù)據(jù)以進行播放或處理。

  2. 解封裝和封裝
    解封裝是將音視頻文件中的音視頻流提取出來,使其成為獨立的音頻和視頻數(shù)據(jù)流。封裝是將音頻和視頻數(shù)據(jù)流組合成一個容器格式文件(如MP4、AVI、MKV),使其能夠在播放器或編輯軟件中正常播放。

  3. 過濾器
    過濾器是一種對音視頻數(shù)據(jù)進行處理的工具。在轉(zhuǎn)碼過程中,過濾器可以用來進行音頻增益、視頻裁剪、添加水印等操作。FFmpeg內(nèi)置了豐富的過濾器,也支持自定義過濾器。

  4. 轉(zhuǎn)碼流程
    FFmpeg的轉(zhuǎn)碼流程通常包括以下步驟:

    • 打開輸入文件:FFmpeg打開輸入文件,并解析其中的音視頻流信息。
    • 找到正確的解碼器:根據(jù)輸入文件中的音視頻編碼格式,F(xiàn)Fmpeg會自動選擇正確的解碼器來解碼音視頻流。
    • 解碼音視頻數(shù)據(jù):FFmpeg將音視頻數(shù)據(jù)解碼成原始的未壓縮數(shù)據(jù)。
    • 應(yīng)用過濾器(可選):如果有需要,可以應(yīng)用過濾器來對音視頻數(shù)據(jù)進行處理。
    • 選擇正確的編碼器:根據(jù)輸出文件的需求,F(xiàn)Fmpeg會自動選擇正確的編碼器來編碼音視頻數(shù)據(jù)。
    • 編碼音視頻數(shù)據(jù):FFmpeg將處理后的音視頻數(shù)據(jù)編碼成目標編碼格式。
    • 封裝數(shù)據(jù):將編碼后的音視頻數(shù)據(jù)封裝成輸出文件。

值得注意的是,轉(zhuǎn)碼過程可能涉及多個解碼器和編碼器的調(diào)用,以及對音視頻數(shù)據(jù)的處理和轉(zhuǎn)換,因此轉(zhuǎn)碼可能是一項復(fù)雜的任務(wù)。正確選擇合適的編解碼參數(shù)和過濾器對于得到高質(zhì)量的轉(zhuǎn)碼結(jié)果至關(guān)重要。


1.3 ffprobe常用命令

ffprobe是FFmpeg的伴侶工具,用于分析和提取音視頻文件的元數(shù)據(jù)信息。它可以提供有關(guān)音視頻文件的詳細信息,如編解碼器、分辨率、幀率、比特率、時長等。以下是一些常用的ffprobe命令示例:

  1. 獲取音視頻文件的基本信息:

    ffprobe -i input.mp4
    
    

    這個命令將輸出音視頻文件input.mp4的基本信息,包括容器格式、流的詳細信息、編碼器信息等。

  2. 獲取音視頻流的詳細信息:

    ffprobe -i input.mp4 -show_streams
    
    

    使用該命令,ffprobe將顯示音視頻文件input.mp4中所有流的詳細信息,包括流的索引、編碼格式、比特率、分辨率、幀率等。

  3. 獲取特定流的信息:

    ffprobe -i input.mp4 -show_streams -select_streams a:0
    
    

    上述命令將顯示音視頻文件input.mp4的第一個音頻流的詳細信息。你可以使用"-select_streams"參數(shù)選擇特定的流,例如"a:0"表示音頻流的索引為0。

  4. 輸出JSON格式的信息:

    ffprobe -i input.mp4 -show_format -print_format json
    
    

    使用該命令,ffprobe將以JSON格式輸出音視頻文件input.mp4的格式信息,包括容器格式、時長、比特率等。

  5. 自定義輸出信息:

    ffprobe -i input.mp4 -show_format -show_entries format=duration,size
    
    

    上述命令將顯示音視頻文件input.mp4的時長和文件大小。你可以使用"-show_entries"參數(shù)來指定要顯示的信息,通過使用逗號分隔不同的項。

這些是一些常用的ffprobe命令示例,用于獲取音視頻文件的元數(shù)據(jù)信息。ffprobe提供了許多其他選項和參數(shù),可以進一步定制輸出信息的格式和內(nèi)容。


1.4 ffplay常用命令

1.4.1 ffplay常用參數(shù)

ffplay是FFmpeg的一個簡單播放器工具,可以用于實時播放音視頻文件。它提供了一些常用的參數(shù),用于控制播放過程和顯示效果。以下是一些常用的ffplay參數(shù)示例:

  1. 播放音視頻文件:

    ffplay input.mp4
    
    

    這個命令將使用ffplay播放音視頻文件input.mp4。

  2. 跳過文件頭部:

    ffplay -skip_initial_bytes 512 input.mp4
    
    

    使用該參數(shù),ffplay將跳過輸入文件的前512字節(jié)。這在某些情況下可能有助于解決一些播放問題。

  3. 指定起始時間:

    ffplay -ss 30 input.mp4
    
    

    上述命令將從音視頻文件input.mp4的30秒處開始播放。可以使用"-ss"參數(shù)指定起始時間,以秒為單位。

  4. 指定播放窗口大?。?/p>

    ffplay -x 800 -y 600 input.mp4
    
    

    使用該命令,ffplay將在一個800x600的窗口中播放音視頻文件input.mp4。可以使用"-x"和"-y"參數(shù)分別指定寬度和高度。

  5. 音量控制:

    ffplay -volume 50 input.mp4
    
    

    上述命令將以50%的音量播放音視頻文件input.mp4??梢允褂?-volume"參數(shù)指定音量大小,范圍從0到100。

  6. 調(diào)整播放速度:

    ffplay -vf "setpts=0.5*PTS" input.mp4
    
    

    使用該命令,ffplay將以原來速度的兩倍快速播放音視頻文件input.mp4。可以使用"-vf"參數(shù)結(jié)合濾鏡來調(diào)整播放速度。

這些是一些常用的ffplay參數(shù)示例,用于控制播放過程和顯示效果。ffplay還提供了其他參數(shù)和選項,可以進一步定制播放器的行為。


1.4.2 ffplay高級參數(shù)

除了常用參數(shù)外,ffplay還提供了一些高級參數(shù)和選項,用于更細致地控制播放過程和顯示效果。以下是一些ffplay的高級參數(shù)示例:

  1. 視頻濾鏡:

    ffplay -vf "scale=640:480,rotate=90" input.mp4
    
    

    使用該命令,ffplay將在播放音視頻文件input.mp4時應(yīng)用視頻濾鏡。上述示例中的濾鏡將視頻縮放為640x480,并將其旋轉(zhuǎn)90度。你可以使用各種視頻濾鏡來調(diào)整視頻的尺寸、旋轉(zhuǎn)、亮度、對比度等。

  2. 音頻濾鏡:

    ffplay -af "volume=2" input.mp4
    
    

    上述命令將在播放音視頻文件input.mp4時應(yīng)用音頻濾鏡。示例中的音頻濾鏡將音量增加兩倍。你可以使用各種音頻濾鏡來調(diào)整音頻的音量、均衡器、混響等。

  3. 幀精準定位:

    ffplay -ss 00:01:30.500 input.mp4
    
    

    使用該命令,ffplay將在音視頻文件input.mp4中精確定位到1分30.5秒的位置開始播放??梢允褂?-ss"參數(shù)指定起始時間,支持以時:分:秒.毫秒的格式。

  4. 自動循環(huán)播放:

    ffplay -loop 0 input.mp4
    
    

    上述命令將在播放音視頻文件input.mp4時自動循環(huán)播放,即播放完畢后會自動重新開始??梢允褂?-loop"參數(shù)指定循環(huán)播放的次數(shù),0表示無限循環(huán)。

  5. 設(shè)置窗口標題:

    ffplay -window_title "My Player" input.mp4
    
    

    使用該命令,ffplay將在播放窗口的標題欄上顯示自定義的標題??梢允褂?-window_title"參數(shù)來設(shè)置窗口標題。

這些是一些ffplay的高級參數(shù)示例,用于更細致地控制播放過程和顯示效果。ffplay還有許多其他選項和參數(shù),可以根據(jù)具體需求進行調(diào)整和配置。


1.4.3 ffplay的數(shù)據(jù)可視化分析應(yīng)用

ffplay提供了一些數(shù)據(jù)可視化分析應(yīng)用,可以幫助你分析和檢查音視頻文件的特性和質(zhì)量。以下是一些ffplay的數(shù)據(jù)可視化分析應(yīng)用的示例:

  1. 波形顯示:

    ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a] showwaves=colors=red:scale=sqrt [out0]"
    
    

    上述命令將在ffplay中顯示音頻文件input.mp4的波形圖。通過使用showwaves濾鏡,你可以可視化音頻波形,指定顏色、尺度等參數(shù)。

  2. 頻譜顯示:

    ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a] showspectrum=mode=combined:color=intensity:scale=log [out0]"
    
    

    使用該命令,ffplay將在播放器中顯示音頻文件input.mp4的頻譜圖。通過使用showspectrum濾鏡,你可以可視化音頻頻譜,指定顏色、模式、尺度等參數(shù)。

  3. 視頻直方圖:

    ffplay -vf "split=2[a][b],[a]histogram,format=yuva444p[hh],[b][hh]overlay" input.mp4
    
    

    上述命令將在播放器中顯示視頻文件input.mp4的直方圖。通過使用histogram濾鏡,你可以可視化視頻幀的亮度分布,然后將其與原視頻進行疊加顯示。

這些是一些ffplay的數(shù)據(jù)可視化分析應(yīng)用示例,用于分析音視頻文件的特性和質(zhì)量。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容