一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

《FFmpeg Basics》中文版-23- 先進的技術點

 看見就非常 2021-02-01

寫在前面

如果您對音視頻技術感興趣,可以訂閱我的專題:音視頻專輯
也可以關注我的簡書賬戶: 張芳濤,我后期會發(fā)布更多的音視頻以及圖像處理方面的文章。

正文

加入音頻和視頻文件

有幾種加入媒體文件,它們在表格中描述:

類型 描述 針對音頻 針對視頻
級聯(lián) 編碼文件一個接一個; 第一個結束,第二個開始 Yes Yes
合并 將所有音頻流編碼為一個,例如2個單聲道到1個立體聲 Yes No
混合 將2個或更多音頻通道編碼為1,音量可以調節(jié) Yes No
多路復用 (mux) 將2個或更多文件編碼為1,例如1個音頻和1個視頻文件,如果存在更多相同類型的流,則選擇是在用戶 Yes Yes
覆蓋/畫中畫 (PiP) 2個或更多視頻一次顯示在另一個旁邊或一個在另一個之上 No Yes

連接與shell命令

媒體文件連接的先決條件

特殊文件格式 連接只能是某些文件格式:
音頻- MP3(第2個文件的頭將消失),未壓縮的像WAV, PCM,等視頻- MPEG-1, MPEG-2 TS, DV
格式的一致性 所有連接的文件都是相同的格式,這意味著可以加入2個MP3文件,但1個帶有1個WAV的MP3不能
流的一致性 所有連接文件:
- 包含相同數(shù)量的每種類型的流。
- 音頻流使用相同的編解碼器,采樣率和通道布局
- 視頻流使用相同的分辨率

為符合此要求,通常需要轉換輸入文件,使用-q 1或類似選項來保持初始質量,詳細信息請參閱格式間轉換

在Windows上,我們可以使用帶有/B標志的復制命令來指示二進制模式,在文件之間必須是一個加號。連接N文件的復制命令的一般形式是:

copy /B file1+file2+...+fileN-1+fileN outputFile

例如,連接文件videoclip1。mpg和videoclip2。mpg到文件視頻。mpg,我們可以使用以下命令:

copy /B videoclip1.mpg+videoclip2.mpg video.mpg

在Linux、Unix和OS X上,我們可以在表單中使用cat命令:cat file1 files2 > file3,因此我們可以修改前面的例子:

cat videoclip1.mpg videoclip2.mpg > video.mpg

鏈接concat協(xié)議

另一種選擇是使用concat協(xié)議,先決條件類似于復制命令。例如,要使用該協(xié)議修改前面的示例,我們可以使用以下命令:

ffmpeg -i concat:"videoclip1.mpg|videoclip2.mpg" -c copy video.mpg

我的測試命令:

ffmpeg -i concat:"/Users/zhangfangtao/Desktop/test.mp4|/Users/zhangfangtao/Desktop/test2.mp4" -c copy /Users/zhangfangtao/Desktop/test3.mp4 
  • 顯示效果:

生成了一個新的視頻,不過我感覺這個視頻和test1沒有什么差別。

連接concat過濾器

用于音頻和視頻拼接的特殊過濾器是在表中描述的concat過濾器:

描述 連接音頻和視頻文件一個接一個。該過濾器適用于同步視頻和音頻流的片段(文件),其中所有片段必須具有相同數(shù)量的每種類型的流,例如1個音頻和1個視頻,或2個音頻和1個視頻,等等
語法 concat=a=a_streams:v=v_streams:n=segments[:unsafe]
所有的參數(shù)都是可選的

參數(shù)的描述
a 輸出音頻流的數(shù)量,默認值為0
n 段數(shù),默認值為2
unsafe 安全模式激活,如果設置,連接將不會以不同格式的片段失敗
v 輸出視頻流的數(shù)量,默認值為1

適當篩選結果的先決條件:

  • 所有段必須從時間戳0開始。

  • 相應的流必須在所有段中使用相同的參數(shù),特別是視頻大小。

  • 建議是相同的幀速率,否則輸出將使用可變幀速率。
    Concat filter可以加入各種格式,有些例子是:

    ffmpeg -i input1.avi -i input2.avi -filter_complex concat output.avi 
    ffmpeg -i input1.avi -i input2.avi -filter_complex concat output.mp4
    ffmpeg -i input1.avi -i input2.mp4 -filter_complex concat output.webm
    ffmpeg -i input1.avi -i input2.mp4 -i input3.mkv -filter_complex ^ concat=n=3 output.flv
    ffmpeg -i input1.avi -i input2.avi -i input3.avi -i input4.avi ^ -filter_complex concat=n=4 output.mp4
    f -i 1.avi -vf movie=2.avi[a];[in][a]concat a.mp4
    

我的測試命令如下:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -i /Users/zhangfangtao/Desktop/test3.mp4 -filter_complex concat /Users/zhangfangtao/Desktop/test4.mp4
  • 顯示效果:
    生成了一個視頻,里面包含前兩段的是視頻內容,不過,有效時長只是第一段視頻的長度。后面有種無效的感覺。。。。

其他類型的拼接技術

移除掉logo

一些視頻包含公司標志,通常位于左上角,常見示例是錄制電視節(jié)目。 FFmpeg包含2個特殊濾鏡以去除徽標,而最終效果并不總是完美,不過在許多情況下這種移除logo的技術還是可以接受的。

delogo過濾器

描述 通過對周圍像素的簡單插值來隱藏一個電視臺的標志。用戶設置一個覆蓋該徽標的矩形,它通常會消失(但在某些情況下,標識更明顯)。過濾器接受參數(shù)作為表單“x:y:w:h:band”的字符串,或作為鍵=值對的列表,由“:”分隔
語法 delogo=x=0:y=0:w=width:h=height[:t=band:show={0,1}]
[]中的參數(shù)是可選的,顯示為0或1

參數(shù)的描述
x, y 標志的左上角的坐標
w, h 標志的寬度和高度
band or t 該標志矩形的模糊邊緣厚度,默認值為4
show 定位的參數(shù),默認值為0,如果設置為1,屏幕上的綠色矩形顯示為幫助查找正確的x、y、w和h參數(shù)

例如,我們首先從下圖所示的800x600像素大小視頻的右上角移除一個標志,我們通過顯示一個綠色矩形的顯示選項來估計logo的位置:

ffmpeg -i eagles.mpg -vf delogo=x=700:y=0:w=100:h=50:t=3:show=1 nologo.mpg

現(xiàn)在我們可以精確地指定位置和標識的存在幾乎是不可見的:

ffmpeg -i eagles.mpg -vf delogo=x=730:y=0:w=70:h=46:t=1 nologo.mpg

我的測試命令如下(沒有t參數(shù),我這邊不識別這個,報錯):

ffmpeg -i /Users/zhangfangtao/Desktop/ornage.jpeg -vf "delogo=x=15:y=678:w=218:h=20:show=1" /Users/zhangfangtao/Desktop/ornage2.jpeg
  • 顯示效果(有沒有看到一個綠色的框):


    有沒有看到一個綠色的框
    ffmpeg -i /Users/zhangfangtao/Desktop/ornage.jpeg -vf "delogo=x=10:y=700:w=300:h=35" /Users/zhangfangtao/Desktop/ornage3.jpeg 
    
  • 顯示效果(水印沒了):

水印沒了.jpeg

抖動視頻部分的固定

沒有三腳架或車輛拍攝的視頻的一些部分通常包括抖動 - 水平和垂直移動的小變化,在某些情況下可以使用去抖濾波器進行修正:


描述 修正水平和垂直位移的小變化,當視頻沒有三腳架或移動車輛時有用
語法 deshake=x:y:w:h:rx:ry:edge:blocksize:contrast:search:filename
所有的參數(shù)是可選的

參數(shù)的描述
x, y, w, h 矩形區(qū)域的坐標和大小,搜索運動向量,x和y是左上角的坐標,w是寬度,h是高度。這些參數(shù)與drawbox過濾器具有相同的含義,可用于可視化邊界框的位置。當物體在框架內同時運動時,運動矢量搜索可能會混淆攝像機的運動,這是很有用的。如果x, y, w和h都被設為-1那么整個框架就被使用了。這允許在不指定運動向量搜索的邊界框的情況下設置后續(xù)選項。默認-搜索整個框架。
rx, ry 在0 - 64像素范圍內指定x和y方向的最大運動范圍,默認值為16
edge 指定如何生成像素來填充框架邊緣的空白,值為從0到3的整數(shù):
0 -在空白位置填充零
1 -原始圖像在空白位置
2 -在空白位置的擠壓邊值
3 -鏡像邊緣在空白位置,默認值
blocksize 指定用于運動搜索的塊大小,其值為4 - 128像素,默認值為8
contrast 指定塊的對比度閾值。只有超過指定對比度的塊(最黑和最輕的像素之間的區(qū)別)才會被考慮。該值來自范圍1 - 255,默認值為125
search 指定搜索策略:
0 =徹底搜索,默認值
1 =不徹底搜索
filename 如果包含,則將動作搜索的詳細日志寫入指定的文件

參數(shù)可以按順序進入默認順序或以任何順序指定名稱:

ffmpeg -i travel.avi -vf deshake fixed_travel.avi
ffmpeg -i travel.avi -vf deshake=contrast=160 fixed.avi
ffmpeg -i travel.avi -vf deshake=blocksize=4:filename=log.txt fixed.avi

我的測試命令:

ffmpeg -i /Users/zhangfangtao/Desktop/1527143197.mp4  -vf deshake /Users/zhangfangtao/Desktop/1527143198.mp4 
ffmpeg -i /Users/zhangfangtao/Desktop/1527143197.mp4  -vf deshake=contrast=160 /Users/zhangfangtao/Desktop/1527143199.mp4
ffmpeg -i /Users/zhangfangtao/Desktop/1527143197.mp4 -vf deshake=blocksize=4:filename=/Users/zhangfangtao/Desktop/log.txt /Users/zhangfangtao/Desktop/1527143200.mp4
  • 顯示效果:其實,我并沒有看出來什么效果。。??赡芪矣檬謾C拍的抖得太厲害了。。。
    第三條指令打印出來的txt信息截圖如下:
log.txt

將顏色框添加到視頻

使用drawbox,我們可以在矩形區(qū)域找到精確的坐標,以在其中搜索運動矢量,它用于除霧過濾器。 其他用途包括各種圖表,方案等。

描述 在輸入的選定區(qū)域繪制指定顏色和指定大小的框
語法 drawbox[=x:y:width:height:color:thickness]

參數(shù)的描述
color, c 格式0xRRGGBB[AA]中的標準顏色名稱或十六進制值
height, h 框的高度,默認值為0
thickness, t 邊框邊緣的寬度以像素為單位,默認值為4
width, w 框的寬度,默認值為0
x, y 方框的左上角坐標,默認值為0

例如,要在SVGA大小的輸入上添加一個尺寸為600x400像素的黃色框,其大小為左側150像素和頂部0像素,我們可以使用以下命令:

ffmpeg -i ship.avi -vf drawbox=x=150:w=600:h=400:c=yellow ship1.avi

我的測試命令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf drawbox=x=150:w=600:h=400:c=yellow /Users/zhangfangtao/Desktop/test3.mp4
  • 顯示效果

檢測幀數(shù)

如果您需要知道有多少幀包含您的視頻文件,您可以使用以下命令:

ffmpeg -i input.mpg -f null /dev/null

顯示輸出的最后兩行是:

frame= 250 fps=0.0 q=0.0 Lsize= 0kB time=00:00:10.00 bitrate= 0.0kbits/s
video:16kB audio:0kB subtitle:0 global headers:0kB muxing overhead -100.000000%

幀數(shù)為250,表示視頻幀的總數(shù),也可以從幀速率和持續(xù)時間計算,但結果并不總是準確。

我的測試命如下:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -f null /dev/null
  • 顯示效果如下:

檢測廣告,部分轉換或損壞的編碼

從電視,互聯(lián)網(wǎng)等錄制的較長視頻可以包含帶有廣告,轉場,不完整幀和其他不需要內容的短片。 如果此部分包含黑色框架,則可以使用表中描述的黑色檢測過濾器檢測它們。

Description 檢測幾乎全黑的視頻部分,并輸出包含檢測到的黑色間隔的開始,結束和持續(xù)時間的行,以秒為單位表示。 如果日志級別設置為低于AV_LOG_INFO值,則不顯示行
語法 blackdetect[=d=duration:pic_th=pbr_threshold:pix_th=px_threshold]

參數(shù)的描述(所有的參數(shù)都是可選的)

參數(shù)名稱 單位 描述 默認值
black_min_duration, d 正浮點數(shù)確定視頻中黑色幀的最小持續(xù)時間 2.0
picture_black_ratio_th, pic_th 浮點數(shù)在0到1.0之間 例如,如果幀大小為400x300(總共12萬像素),12000像素不是黑色,那么這個比例是0.9 0.98
pixel_black_th, pix_th 浮點數(shù)在0到1.0之間 Treshold設置像素為黑色,它等于表達式:
(absolute_threshold–luminance_minimum_value) luminance_range_size)
0.1

例如,要從源mptestsrc中檢測黑幀,命令是(控制臺輸出如下):

ffmpeg -f lavfi -i mptestsrc -vf blackdetect -f sdl 'test'

我的測試命令:

ffmpeg -f lavfi -i mptestsrc -vf blackdetect -f sdl 'test'

*顯示效果:

用黑幀過濾器進行檢測

檢測黑幀的另一個過濾器是表中描述的黑幀過濾器:

描述 檢測幾乎為黑色的幀,并輸出包含:
- 檢測幀的幀數(shù)
- 黑色部分的百分比
- 如果已知則在文件中定位,否則為-1
- 時間戳
語法 blackframe[=amount:[treshold]]
所有的參數(shù)都是可選的

參數(shù)
amount 在閾值下的像素百分比,默認值為98
threshold 下面是被認為是黑色的像素,默認值是32

過濾器blackdetectblackframe類似,但每個顯示不同的信息。 圖像上顯示使用與黑檢測濾鏡相同的視頻源的黑幀濾鏡輸出:

ffmpeg -f lavfi -i mptestsrc -vf blackframe -f sdl 'test'

我的測試命令如下:

ffmpeg -f lavfi -i mptestsrc -vf blackframe -f sdl 'test'
  • 顯示效果:

只選擇指定的幀進行輸出

特殊的多媒體過濾器可以選擇音頻并選擇視頻啟用,以精確指定哪些幀將保留,哪些從輸出中排除。

描述 選擇輸出幀,對每個輸入幀評估表達式,如果表達式的值不為零,則選擇幀,否則跳過幀
語法 select=expression
expression默認值是1

可用的參數(shù)
n 從0開始的過濾幀的連續(xù)編號
selected_n 所選幀的序號,從0開始
prev_selected_n 如果未定義,則最后一個選定幀的序列號為NAN
TB 輸入時間戳的時基
pts 如果NAN未定義,那么經(jīng)過濾波的視頻幀的PTS(表示時間戳)以TB為單位表示
t 如果NAN未定義,則濾波的視頻幀的PTS以秒表示
prev_pts 先前過濾的視頻幀的PTS,如果未定義則為NAN
prev_selected_pts 如果NAN未定義,則最后一個先前過濾的視頻幀的PTS
prev_selected_t 如果NAN未定義,則最后選擇的最后一個視頻幀的PTS
start_pts 如果NAN未定義,視頻中第一個視頻幀的PTS
start_t 如果NAN未定義,第一個視頻幀的時間在視頻中
pict_type
(只局限在視頻中)
過濾幀的類型,可以采用以下值之一:
I ...幀內預測幀, P ... 前向預測幀, B ...雙向預測幀, S ...交換幀,SI ...切換I幀,SP ...切換P幀,BI ...特殊幀內幀,不是關鍵幀(VC-1視頻編解碼器)
interlace_type
(只局限在視頻中)
幀間型,可采用下列值之一:
PROGRESSIVE, TOPFIRST, BOTTOMFIRST
PROGRESSIVE 幀是漸進的(不是交錯的)
TOPFIRST 幀是top-field-first
BOTTOMFIRST 幀是bottom-field-first
key 如果經(jīng)過篩選的幀是一個關鍵幀,否則為0
pos 如果信息不可用(例如合成視頻),在過濾幀的文件中位置為-1
scene
(僅局限于視頻)
0和1之間的值表示一個新的場景;低值反映了當前幀引入新場景的低概率,而更高的值意味著當前幀更可能是一個
consumed_sample_n 在當前幀之前選擇的樣本數(shù)目
samples_n 當前幀中的樣本數(shù)目
sample_rate 輸入采樣率

由于select表達式的默認值為1,因此選擇過濾器使用的接下來的兩個示例會產(chǎn)生相同的結果 - 所有幀將被選擇為輸出(值如果是0將不會選擇任何內容):

ffmpeg -i input.avi -vf select output.avi
ffmpeg -i input.avi -vf select=1 output.avi

我的測試命令如下:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf select /Users/zhangfangtao/Desktop/test3.mp4 
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf select=1 /Users/zhangfangtao/Desktop/test3.mp4 
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf select=0 /Users/zhangfangtao/Desktop/test3.mp4
  • 實現(xiàn)效果,前兩個命令生成的是和原來一樣的視頻,最后一個命令,只有音頻信息,沒有界面。

要選擇20到25秒的部分,我們可以使用以下命令:

ffmpeg -i input.avi -vf select="gte(t\,20)*lte(t\,25)" output.avi

我的測試命令如下:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf select="gte\(t\,20\)*lte\(t\,25\)" /Users/zhangfangtao/Desktop/test3.mp4
  • 實現(xiàn)效果:
    時間的限制不是太準確,,,還是從頭給我播放到了最后。。。

若要選擇幀內僅為輸出,我們可以使用以下命令:

ffmpeg -i input.avi -vf select="eq(pict_type\,I)" output.avi

我的測試命令如下:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf select="eq\(pict_type\,I\)" /Users/zhangfangtao/Desktop/test3.mp4
  • 實現(xiàn)的結果:
    視頻長短沒有變,但是視頻的大小幾乎減少了一半。而且視頻少了很多細節(jié)。

通過改變縱橫比來縮放輸入

調整和伸縮視頻章節(jié)描述了縮放視頻幀的縮放過濾器。 另一種方法是使用改變顯示寬高比DAR和樣本寬高比SAR的setdar和setsar濾波器,它們的關系用公式表示(關于寬高比的細節(jié)在詞匯表中):

DAR = width/height * SAR
描述 setdar過濾器設置顯示縱橫比和setsar的樣本縱橫比
語法 setdar[=r=aspect_ratio[:max=number]]
setdar[=aspect_ratio[:number]]

參數(shù)的描述
r, ratio 縱橫比,值可以是浮點數(shù)或表達式,默認值為0
max 在將縱橫比設為一個有理數(shù)時,表示分子和分母的最大整數(shù)值,默認值為100

示例如何使用setdar和setsar過濾器:

ffplay -i input.avi -vf setdar=r=16/9
ffplay -i input.avi -vf setdar=16/9
ffplay -i input.avi -vf setsar=r=1.234
ffplay -i input.avi -vf setsar=1.234

我的測試命令如下:

ffplay -i /Users/zhangfangtao/Desktop/test.mp4 -vf setdar=r=16/9
ffplay -i /Users/zhangfangtao/Desktop/test.mp4 -vf setdar=16/9
ffplay -i /Users/zhangfangtao/Desktop/test.mp4 -vf setsar=r=1.234
ffplay -i /Users/zhangfangtao/Desktop/test.mp4 -vf setsar=1.234
  • 顯示效果如下:

屏幕抓取

為了將顯示輸出記錄到視頻文件中,例如創(chuàng)建一個教程,我們可以使用安裝了UScreenCapture直接顯示源過濾器的dshow輸入設備,下面是下載地址。
http://www./bin/UScreenCapture.zip
為了抓取全屏內容,我們可以使用以下命令:

ffmpeg -f dshow -i video="UScreenCapture" -t 60 screen.mp4

如果我們想抓取一個特定的屏幕區(qū)域。我們必須使用regedit Windows工具來修改某些注冊表項,相信信息在downloaded UScreenCapture.zip文件里面的README文件里面。

因為我用的MAC電腦,所以我的錄屏命令如下:

ffmpeg -f avfoundation -r 30  -i "1:0"  -t 20 /Users/zhangfangtao/Desktop/test2.mp4 
  • 顯示效果如下:

視頻幀的詳細信息

為了顯示每個視頻幀的信息,我們可以使用表格中描述的showinfo過濾器:

描述 顯示包含有關每個輸入視頻幀信息的行,數(shù)據(jù)采用鍵:值對的形式。 該過濾器沒有參數(shù),應與-report選項一起使用
語法 -vf showinfo

顯示參數(shù)的描述
n 輸入框的序號,從0開始
pts 輸入框的表示時間戳,表示為若干時間基單元;時間基單元依賴于過濾器輸入板
pts_time 輸入框的表示時間戳,表示為若干秒
pos 輸入流中幀的位置,如果該信息不可用或沒有意義(例如在合成視頻中)
fmt 像素格式名稱
sar 輸入幀的采樣寬高比,以分子/分母的形式表示
s 輸入框的大小,以寬*長的形式表示
i 隔行掃描模式:P表示漸進式,T表示前場第一,B表示后場第一
iskey 如果該幀是關鍵幀,則為1,否則為0
type 輸入幀的圖像類型:I代表I幀,P代表P幀,B代表B幀,? 對于未知類型(更多的信息見AVPictureType枚舉的文檔)
checksum 輸入幀的所有平面的Adler-32校驗和(十六進制)
plane_checksum 輸入幀的每個平面的Adler-32校驗和(十六進制),表示形式為[c0 c1 c2 c3]

例如,下一個命令會生成下面打印的信息,其中包括前三行:

ffmpeg -report -f lavfi -i testsrc -vf showinfo -t 10 showinfo.mpg

n:0 pts:0 pts_time:0 pos:-1 fmt:rgb24 sar:1/1 s:320x240 i:P iskey:1 type:I checksum:88C4D19A plane_checksum:[88C4D19A]
n:1 pts:1 pts_time:0.04 pos:-1 fmt:rgb24 sar:1/1 s:320x240 i:P iskey:1 type:I checksum:C4740AD1 plane_checksum:[C4740AD1]
n:2 pts:2 pts_time:0.08 pos:-1 fmt:rgb24 sar:1/1 s:320x240 i:P iskey:1 type:I checksum:B6DD3DEB plane_checksum:[B6DD3DEB]

我的測試命令如下:

ffmpeg -report -f lavfi -i testsrc -vf showinfo -t 10 /Users/zhangfangtao/Desktop/test.mp4
  • 顯示效果:

音頻頻譜

為了使音頻頻譜可視化,我們可以使用表中描述的示波器濾波器:


描述 將音頻輸入轉換為視頻輸出
語法 showspectrum[=s=widthxheight[:slide=number]]

參數(shù)的描述
size, s 輸出視頻大小,默認值為640x480
slide 設置頻譜是否沿窗口滑動,默認值為0

例如,下面的圖片顯示了該命令創(chuàng)建的聲譜:

ffmpeg -i audio.mp3 -vf showspectrum audio_spectrum.mp4

我的測試命令如下:

ffmpeg -i /Users/zhangfangtao/Desktop/DYZDJ.mp3 -lavfi showspectrum /Users/zhangfangtao/Desktop/test3.mp4
  • 效果圖

音頻波形可視化

描述 將輸入音頻轉換為包含音頻波表示的視頻
語法 showwaves[=n=number[:r=rate[:s=video_size]]]

參數(shù)的描述
n 打印在同一列上的樣本數(shù)量越大,數(shù)值越大會降低幀速率,因此不能與速率參數(shù)結合使用
rate, r 幀速率,默認值為25,不能與n參數(shù)組合使用
size, s 視頻大小,默認值是640x480

來自音頻輸入的波形可以通過表格中描述的showwaves濾波器進行可視化:


描述 將輸入音頻轉換為包含音頻波表示的視頻
語法 showwaves[=n=number[:r=rate[:s=video_size]]]

參數(shù)的描述
n 打印在同一列上的樣本數(shù)量越大,數(shù)值越大會降低幀速率,因此不能與速率參數(shù)結合使用
rate, r 幀速率,默認值為25,不能與n參數(shù)組合使用
size, s 視頻大小,默認值是640x480

例如,要將music.mp3文件中的波形可視化為waves.mp4文件,我們可以使用以下命令:

ffmpeg -i music.mp3 -vf showwaves waves.mp4

我的測試命令:

ffmpeg -i /Users/zhangfangtao/Desktop/NWDSL.mp3  -lavfi showwaves /Users/zhangfangtao/Desktop/test3.mp4
  • 顯示效果如圖:

語音合成

通過包含libflite外部庫,人聲可以與來自Flite(Festival Lite)(一種小型可嵌入TTS(文本到語音)引擎)的flite音頻源合成。 它由美國卡內基梅隆大學CMU Speech Group開發(fā)。 Flite完全用C語言編寫,重新實現(xiàn)了音樂節(jié)體系結構的核心部分,以實現(xiàn)為每個系統(tǒng)設計的聲音之間的兼容性。 愛丁堡大學的節(jié)日語音合成系統(tǒng)是構建語音合成系統(tǒng)的框架。 有關Flite的更多詳細信息,請訪問http://www.speech.cs./flite

描述 由于其大尺寸,使用未包含在官方Windows二進制文件中的libflite庫來合成具有選定語音類型的人類語音
語法 flite="text"[:v=voice[:n=n_samples]]
flite=textfile=filename[:v=voice[:n=n_samples]]

參數(shù)的描述
list_voices 如果設置為1,則顯示可用語音列表
n, nb_samples 每幀最大采樣數(shù),默認值為512
text 演講的源文本
textfile 包含文本的文件名
v, voice 可用的聲音:女 - slt,男 - awb,kal,kal16,rms; 默認語音為kal,其采樣率(頻率)為8000 Hz,其他語音使用16000 Hz

由于flite庫增加了10 MB以上的ffmpeg.exe文件,因此它不在官方二進制文件中,而Windows二進制文件可以從http:///flite.php下載(Linux和OS X用戶可以編譯它們)。 要顯示可用語音列表,我們可以使用以下命令:

ffmpeg -f lavfi -i flite=list_voices=1

要讓計算機使用女性聲音從Message.txt文件中讀取文本,該命令為:

ffplay -f lavfi -i flite=textfile=Message.txt:v=slt

例如,要將文字“Happy New Year to all”保存到wish.wav文件中,我們可以使用以下命令:

ffmpeg -f lavfi -i flite=text="Happy New Year to all":v=kal16 wish.wav

如果我們想減慢講話速度以獲得更好的聽力,我們可以使用以下命令:

ffmpeg -f lavfi -i flite=textfile=text.txt -af atempo=0.5 speech.mp3

一次將輸出保存為多種格式

雖然從第一章中解釋的命令語法可以清楚看出,但我們可以通過一個命令將處理結果保存為多種格式,例如我們可以將flite語音引擎的輸出保存為MP3,WAV和WMA 格式在一個命令中:

ffmpeg -f lavfi -i flite=textfile=speech.txt speech.mp3 speech.wav speech.wma

我們還可以結合音頻和視頻格式,如果我們從視頻輸入格式指定音頻格式,則只包含音頻流,下一個示例中的文件clip.mp3只包含音頻流:

ffmpeg -i clip.avi clip.flv clip.mov clip.mp3 clip.mp4 clip.webm

額外的媒體輸入到filtergraph

默認情況下,在任何具有-i選項的過濾器之前指定輸入文件,并且第一個輸入在帶有[in]鏈接標簽的過濾器圖中可用。 如果我們想要過濾額外的文件,我們可以使用amovie來源作為視頻文件的音頻和電影來源,它們在表格中描述:
描述 從媒體(電影)容器讀取音頻和/或視頻流。 必需參數(shù)是媒體文件的文件名,可選鍵=值對由冒號分隔
語法 movie=video_name[:options]
amovie=audio_name[:options]

Available key = 值選項參數(shù)中的值對
f, format_name 視頻容器或輸入設備的格式,如果未指定,則從擴展名確定或者探測
loop 按順序讀取數(shù)據(jù)流的次數(shù),如果為-1,則選擇最佳視頻(具有amovie的音頻)數(shù)據(jù)流
sp, seek_point 以秒為單位查找點,如果設置,則輸入從給定時間開始
s, streams - 要選擇的流,用+符號指定多個流,順序很重要
- 特殊名稱dv(電影)和da(amovie)指定默認(最佳)視頻/音頻流
- 第一章介紹了如何指定特定流的語法
si, stream_index 要讀取的流的索引,如果為-1,則選擇最佳流,這是默認值(不建議使用,s參數(shù)為首選)

例如,要在輸入視頻上顯示徽標,我們可以使用以下命令:

ffmpeg -i video.mpg -vf movie=logo.png[a];[in][a]overlay video1.mp4

我的測試命令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf "movie=/Users/zhangfangtao/Desktop/fruit.jpg[a];[in][a]overlay" /Users/zhangfangtao/Desktop/test3.mp4

*顯示效果(logo太大了,把視頻蓋住了):


例如,sp(seek_point)選項設置為5時,徽標將從開始5秒后顯示:

ffmpeg -i video.mpg -vf movie=logo.png:sp=5[a];[in][a]overlay video1.mp4

我的測試命令:

 ffmpeg -i /Users/zhangfangtao/Desktop/001.mp4 -vf "movie=/Users/zhangfangtao/Desktop/fruit.jpg:sp=0[a];[in][a]overlay" /Users/zhangfangtao/Desktop/test3.mp4
  • 報錯:

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    99日韩在线视频精品免费| 免费特黄一级一区二区三区| 极品少妇嫩草视频在线观看| 99久久精品国产日本| 九九视频通过这里有精品| 日本熟妇五十一区二区三区| 色好吊视频这里只有精| 欧美午夜伦理在线观看| 亚洲三级视频在线观看免费| 黄片在线观看一区二区三区| 91精品视频全国免费| 欧美日韩精品久久亚洲区熟妇人| 亚洲精品成人福利在线| 日韩精品一区二区三区含羞含羞草| 九九热在线视频观看最新| 在线免费国产一区二区| 欧美日韩国产另类一区二区| 色一情一乱一区二区三区码| 中文字日产幕码三区国产| 大香伊蕉欧美一区二区三区| 午夜精品国产一区在线观看| 千仞雪下面好爽好紧好湿全文| 国产91人妻精品一区二区三区| 国产农村妇女成人精品| 亚洲精品高清国产一线久久| 小草少妇视频免费看视频| 日韩一区二区三区嘿嘿| 国产视频福利一区二区| 白白操白白在线免费观看| 国产女同精品一区二区| 日韩精品一区二区不卡| 婷婷激情五月天丁香社区| 国产成人精品视频一二区| 国产成人午夜av一区二区| 欧美熟妇一区二区在线| 大香蕉久草网一区二区三区| 日韩高清一区二区三区四区 | 亚洲一区二区亚洲日本| 三级高清有码在线观看| 国产精品色热综合在线| 国产综合香蕉五月婷在线|