ffmpeg入門教程之ffmpeg命令行實戰------音頻濾鏡

ffmpeg入門教程https://www.jianshu.com/p/042c7847bd8a

本文將會持續更新,敬請關注

視頻播放器原理

———————————————— 版權聲明

此處摘抄部分爲CSDN博主「雷霄驊」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/leixiaohua1020/article/details/18893769

視音頻技術主要包含以下幾點:封裝技術,視頻壓縮編碼技術以及音頻壓縮編碼技術。如果考慮到網絡傳輸的話,還包括流媒體協議技術。

視頻播放器播放一個互聯網上的視頻文件,需要經過以下幾個步驟:解協議,解封裝,解碼視音頻,視音頻同步。如果播放本地文件則不需要解協議,爲以下幾個步驟:解封裝,解碼視音頻,視音頻同步。他們的過程如圖所示。

在這裏插入圖片描述

解協議的作用

就是將流媒體協議的數據,解析爲標準的相應的封裝格式數據。視音頻在網絡上傳播的時候,常常採用各種流媒體協議,例如HTTP,RTMP,或是MMS等等。這些協議在傳輸視音頻數據的同時,也會傳輸一些信令數據。這些信令數據包括對播放的控制(播放,暫停,停止),或者對網絡狀態的描述等。解協議的過程中會去除掉信令數據而只保留視音頻數據。例如,採用RTMP協議傳輸的數據,經過解協議操作後,輸出FLV格式的數據。

解封裝的作用

就是將輸入的封裝格式的數據,分離成爲音頻流壓縮編碼數據和視頻流壓縮編碼數據。封裝格式種類很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是將已經壓縮編碼的視頻數據和音頻數據按照一定的格式放到一起。例如,FLV格式的數據,經過解封裝操作後,輸出H.264編碼的視頻碼流和AAC編碼的音頻碼流。

解碼的作用

就是將視頻/音頻壓縮編碼數據,解碼成爲非壓縮的視頻/音頻原始數據。音頻的壓縮編碼標準包含AAC,MP3,AC-3等等,視頻的壓縮編碼標準則包含H.264,MPEG2,VC-1等等。解碼是整個系統中最重要也是最複雜的一個環節。通過解碼,壓縮編碼的視頻數據輸出成爲非壓縮的顏色數據,例如YUV420P,RGB等等;壓縮編碼的音頻數據輸出成爲非壓縮的音頻抽樣數據,例如PCM數據。

視音頻同步的作用

就是根據解封裝模塊處理過程中獲取到的參數信息,同步解碼出來的視頻和音頻數據,並將視頻音頻數據送至系統的顯卡和聲卡播放出來。

命令行詳解可參考ffmpeg入門教程或者參考官網文檔

https://www.jianshu.com/p/042c7847bd8a

實例來源於《FFmpeg從入門到精通》

聲道

聲道(Sound Channel) 是指聲音在錄製或播放時在不同空間位置採集或回放的相互獨立的音頻信號,所以聲道數也就是聲音錄製時的音源數量或回放時相應的揚聲器數量。

聲卡所支持的聲道數是衡量聲卡檔次的重要指標之一,從單聲道到最新的環繞立體聲。

雙聲道合併單聲道

在這裏插入圖片描述
圖片來源於《FFmpeg從入門到精通》

ffmpeg -y -i C:\Users\Administrator\Desktop\video.aac -ac 1 C:\Users\Administrator\Desktop\video_filtered.aac

輸出如下:

Input #0, aac, from 'C:\Users\Administrator\Desktop\video.aac':
  Duration: 00:00:07.08, bitrate: 127 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 127 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
Output #0, adts, to 'C:\Users\Administrator\Desktop\video_filtered.aac':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Audio: aac (LC), 44100 Hz, mono, fltp, 69 kb/s
    Metadata:
      encoder         : Lavc58.59.100 aac
size=      47kB time=00:00:06.94 bitrate=  55.6kbits/s speed= 131x
video:0kB audio:45kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.554030%
[aac @ 0000000c31c37e40] Qavg: 19424.391

雙聲道合併成單聲道後,聽起來感覺沒什麼區別,音質當然有所下降

雙聲道提取多單聲道

在這裏插入圖片描述
圖片來源於《FFmpeg從入門到精通》

ffmpeg -y -i C:\Users\Administrator\Desktop\video.aac -map_channel 0.0.0 left.aac -map_channel 0.0.1 right.aac

輸出如下

Input #0, aac, from 'C:\Users\Administrator\Desktop\video.aac':
  Duration: 00:00:07.08, bitrate: 127 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 127 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> aac (native))
  Stream #0:0 -> #1:0 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
-map_channel is forwarded to lavfi similarly to -af pan=0x4|c0=c0.
[pan @ 0000004950a04cc0] Pure channel mapping detected: 0
Output #0, adts, to 'left.aac':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Audio: aac (LC), 44100 Hz, mono, fltp, 69 kb/s
    Metadata:
      encoder         : Lavc58.59.100 aac
-map_channel is forwarded to lavfi similarly to -af pan=0x4|c0=c1.
[pan @ 0000004952814ec0] Pure channel mapping detected: 1
Output #1, adts, to 'right.aac':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #1:0: Audio: aac (LC), 44100 Hz, mono, fltp, 69 kb/s
    Metadata:
      encoder         : Lavc58.59.100 aac
size=      46kB time=00:00:06.94 bitrate=  54.2kbits/s speed=  81x
video:0kB audio:90kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

雙聲道提取爲2個單聲道後,單聲道文件一個是高音,一個是低音,不再有立體聲的感覺(當然只是小編感覺,也許是錯的)

雙聲道轉雙音頻流

在這裏插入圖片描述
圖片來源於《FFmpeg從入門到精通》

ffmpeg -y -i C:\Users\Administrator\Desktop\video.aac -filter_complex channelsplit=channel_layout=stereo
 C:\Users\Administrator\Desktop\video.mka

輸出如下:

Input #0, aac, from 'C:\Users\Administrator\Desktop\video.aac':
  Duration: 00:00:07.08, bitrate: 127 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 127 kb/s
Stream mapping:
  Stream #0:0 (aac) -> channelsplit
  channelsplit:FL -> Stream #0:0 (libvorbis)
  channelsplit:FR -> Stream #0:1 (libvorbis)
Press [q] to stop, [?] for help
Output #0, matroska, to 'C:\Users\Administrator\Desktop\video.mka':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Audio: vorbis (libvorbis) (oV[0][0] / 0x566F), 44100 Hz, 1 channels (FL), fltp
    Metadata:
      encoder         : Lavc58.59.100 libvorbis
    Stream #0:1: Audio: vorbis (libvorbis) (oV[0][0] / 0x566F), 44100 Hz, 1 channels (FR), fltp
    Metadata:
      encoder         : Lavc58.59.100 libvorbis
size=      91kB time=00:00:06.93 bitrate= 107.2kbits/s speed=62.6x
video:0kB audio:79kB subtitle:0kB other streams:0kB global headers:6kB muxing overhead: 14.446838%

單聲道轉雙聲道

在這裏插入圖片描述
圖片來源於《FFmpeg從入門到精通》

ffmpeg -y -i C:\Users\Administrator\Desktop\right.aac -ac 2 C:\Users\Administrator\Desktop\video.mka

輸出如下:

Input #0, aac, from 'C:\Users\Administrator\Desktop\right.aac':
  Duration: 00:00:05.24, bitrate: 74 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, mono, fltp, 74 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> vorbis (libvorbis))
Press [q] to stop, [?] for help
Output #0, matroska, to 'C:\Users\Administrator\Desktop\video.mka':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Audio: vorbis (libvorbis) (oV[0][0] / 0x566F), 44100 Hz, stereo, fltp
    Metadata:
      encoder         : Lavc58.59.100 libvorbis
size=      51kB time=00:00:06.95 bitrate=  60.6kbits/s speed=68.7x
video:0kB audio:45kB subtitle:0kB other streams:0kB global headers:4kB muxing overhead: 14.680476%

2個音頻源合併爲雙聲道

在這裏插入圖片描述

ffmpeg -y -i C:\Users\Administrator\Desktop\left.aac -i C:\Users\Administrator\Desktop\right.aac 
-filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" C:\Users\Administrator\Desktop\video.mka

輸出如下:

Input #1, aac, from 'C:\Users\Administrator\Desktop\right.aac':
  Duration: 00:00:05.24, bitrate: 74 kb/s
    Stream #1:0: Audio: aac (LC), 44100 Hz, mono, fltp, 74 kb/s
Stream mapping:
  Stream #0:0 (aac) -> amerge:in0
  Stream #1:0 (aac) -> amerge:in1
  amerge -> Stream #0:0 (libvorbis)
Press [q] to stop, [?] for help
[Parsed_amerge_0 @ 000000d1e787afc0] No channel layout for input 1
[Parsed_amerge_0 @ 000000d1e787afc0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
Output #0, matroska, to 'C:\Users\Administrator\Desktop\video.mka':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Audio: vorbis (libvorbis) (oV[0][0] / 0x566F), 44100 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavc58.59.100 libvorbis
size=      73kB time=00:00:06.95 bitrate=  86.4kbits/s speed=61.2x
video:0kB audio:67kB subtitle:0kB other streams:0kB global headers:4kB muxing overhead: 9.862594%

5.1聲道

儘管雙聲道立體聲的音質和聲場效果大大好於單聲道,但在家庭影院應用方面,它的侷限性也暴露了出來。雙聲道立體聲系統只能再現一個二維平面的空間感,即整個聲場是平平地擺在我們面前,並不能讓我們有置身其中的現場感。當然,由於在音樂會現場,觀衆原本就是坐在臺下的,而樂隊演奏人員則位於舞臺之上,立體聲所能再現的這種簡單的聲場方位感與現場音樂會的方位感是基本符合的,因而它仍能滿足欣賞需求。但是,在欣賞影片時,整體聲場全方位的三維空間感無疑可以給觀衆一種鮮活的,置身於其中的臨場感,因此,多聲道技術也開始發展起來。

5.1聲道是指中央聲道,前置左、右聲道,後置左、右環繞聲道,及所謂的0.1聲道重低音聲道。一套系統總共可連接6個喇叭。5.1聲道已廣泛運用於各類傳統影院和家庭影院中,一些比較知名的聲音錄製壓縮格式,譬如杜比AC-3(Dolby Digital)、DTS等都是以5.1聲音系統爲技術藍本的,其中“0.1”聲道,則是一個專門設計的超低音聲道,這一聲道可以產生頻響範圍20~120Hz的超低音。

千萬不要以爲5.1已經是環繞立體聲的頂峯了,更強大的7.1系統已經出現了。它在5.1的基礎上又增加了中左和中右兩個發音點,以求達到更加完美的境界。由於成本比較高,沒有廣泛普及。

此處轉載於百度百科:https://baike.baidu.com/item/5.1%E5%A3%B0%E9%81%93/3442580

在這裏插入圖片描述
圖片來源於《FFmpeg從入門到精通》

多個音頻合併爲多聲道

ffmpeg -y 
-i C:\Users\cy\Desktop\left.aac 
-i C:\Users\cy\Desktop\left.aac 
-i C:\Users\cy\Desktop\left.aac 
-i C:\Users\cy\Desktop\left.aac 
-i C:\Users\cy\Desktop\left.aac 
-i C:\Users\cy\Desktop\left.aac 
-filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a]amerge=inputs=6[aout]" -map "[aout]"
 C:\Users\cy\Desktop\a5.1.aac

輸出如下:

[aac @ 000001aea22d1940] Estimating duration from bitrate, this may be inaccurate
Input #0, aac, from 'C:\Users\cy\Desktop\left.aac':
  Duration: 00:00:04.94, bitrate: 76 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, mono, fltp, 76 kb/s
[aac @ 000001aea2306440] Estimating duration from bitrate, this may be inaccurate
Input #1, aac, from 'C:\Users\cy\Desktop\left.aac':
  Duration: 00:00:04.94, bitrate: 76 kb/s
    Stream #1:0: Audio: aac (LC), 44100 Hz, mono, fltp, 76 kb/s
[aac @ 000001aea22f8140] Estimating duration from bitrate, this may be inaccurate
Input #2, aac, from 'C:\Users\cy\Desktop\left.aac':
  Duration: 00:00:04.94, bitrate: 76 kb/s
    Stream #2:0: Audio: aac (LC), 44100 Hz, mono, fltp, 76 kb/s
[aac @ 000001aea40a9300] Estimating duration from bitrate, this may be inaccurate
Input #3, aac, from 'C:\Users\cy\Desktop\left.aac':
  Duration: 00:00:04.94, bitrate: 76 kb/s
    Stream #3:0: Audio: aac (LC), 44100 Hz, mono, fltp, 76 kb/s
[aac @ 000001aea40bc1c0] Estimating duration from bitrate, this may be inaccurate
Input #4, aac, from 'C:\Users\cy\Desktop\left.aac':
  Duration: 00:00:04.94, bitrate: 76 kb/s
    Stream #4:0: Audio: aac (LC), 44100 Hz, mono, fltp, 76 kb/s
[aac @ 000001aea22d9e40] Estimating duration from bitrate, this may be inaccurate
Input #5, aac, from 'C:\Users\cy\Desktop\left.aac':
  Duration: 00:00:04.94, bitrate: 76 kb/s
    Stream #5:0: Audio: aac (LC), 44100 Hz, mono, fltp, 76 kb/s
Stream mapping:
  Stream #0:0 (aac) -> amerge:in0
  Stream #1:0 (aac) -> amerge:in1
  Stream #2:0 (aac) -> amerge:in2
  Stream #3:0 (aac) -> amerge:in3
  Stream #4:0 (aac) -> amerge:in4
  Stream #5:0 (aac) -> amerge:in5
  amerge -> Stream #0:0 (aac)
Press [q] to stop, [?] for help
[Parsed_amerge_0 @ 000001aea45c4f00] No channel layout for input 1
[Parsed_amerge_0 @ 000001aea45c4f00] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
Output #0, adts, to 'C:\Users\cy\Desktop\a5.1.aac':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Audio: aac (LC), 44100 Hz, 5.1, fltp, 341 kb/s (default)
    Metadata:
      encoder         : Lavc58.59.100 aac
size=     222kB time=00:00:06.96 bitrate= 261.4kbits/s speed=16.2x
video:0kB audio:220kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.934240%
[aac @ 000001aea40d5f40] Qavg: 19602.068

繪製音頻波形

單聲道波形圖

ffmpeg -y -i C:\Users\Administrator\Desktop\video.aac -filter_complex "showwavespic=s=1920x1080" 
-frames:v 1 C:\Users\Administrator\Desktop\wave.png

在這裏插入圖片描述
5.1聲道的波形圖

ffmpeg -y -i C:\Users\Administrator\Desktop\a5.1.aac -filter_complex "showwavespic=s=1920x1080:split_channels=1" 
-frames:v 1 C:\Users\Administrator\Desktop\a5.1.png

在這裏插入圖片描述

atempo音頻倍速處理

半速處理:

ffmpeg -y -i C:\Users\Administrator\Desktop\video.aac -filter_complex "atempo=tempo=0.5" 
-acodec aac C:\Users\Administrator\Desktop\videotempo.aac

輸出如下:

Input #0, aac, from 'C:\Users\Administrator\Desktop\video.aac':
  Duration: 00:00:07.08, bitrate: 127 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 127 kb/s
Stream mapping:
  Stream #0:0 (aac) -> atempo
  atempo -> Stream #0:0 (aac)
Press [q] to stop, [?] for help
Output #0, adts, to 'C:\Users\Administrator\Desktop\videotempo.aac':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc58.59.100 aac
size=     162kB time=00:00:13.83 bitrate=  96.1kbits/s speed=1.76x
video:0kB audio:158kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.577307%

2倍速處理:

ffmpeg -y -i C:\Users\Administrator\Desktop\video.aac -filter_complex "atempo=tempo=2" 
-acodec aac C:\Users\Administrator\Desktop\videotempo.aac

輸出如下:

Input #0, aac, from 'C:\Users\Administrator\Desktop\video.aac':
  Duration: 00:00:07.08, bitrate: 127 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 127 kb/s
Stream mapping:
  Stream #0:0 (aac) -> atempo
  atempo -> Stream #0:0 (aac)
Press [q] to stop, [?] for help
Output #0, adts, to 'C:\Users\Administrator\Desktop\videotempo.aac':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc58.59.100 aac
size=      40kB time=00:00:03.45 bitrate=  95.8kbits/s speed=0.784x
video:0kB audio:39kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.601521%

本文將會持續更新,敬請關注

歡迎分享、轉載、聯繫、指正、批評、撕逼

Github:https://github.com/AnJiaoDe

簡書:https://www.jianshu.com/u/b8159d455c69

CSDN:https://blog.csdn.net/confusing_awakening

ffmpeg入門教程:https://www.jianshu.com/p/042c7847bd8a

微信公衆號
這裏寫圖片描述

QQ羣

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章