寫在前面如果您對音視頻技術感興趣,可以訂閱我的專題:音視頻專輯 正文加入音頻和視頻文件有幾種加入媒體文件,它們在表格中描述:
連接與shell命令媒體文件連接的先決條件
在Windows上,我們可以使用帶有/B標志的復制命令來指示二進制模式,在文件之間必須是一個加號。連接N文件的復制命令的一般形式是:
例如,連接文件videoclip1。mpg和videoclip2。mpg到文件視頻。mpg,我們可以使用以下命令:
在Linux、Unix和OS X上,我們可以在表單中使用cat命令:cat file1 files2 > file3,因此我們可以修改前面的例子:
鏈接concat協(xié)議另一種選擇是使用concat協(xié)議,先決條件類似于復制命令。例如,要使用該協(xié)議修改前面的示例,我們可以使用以下命令:
我的測試命令:
生成了一個新的視頻,不過我感覺這個視頻和test1沒有什么差別。 連接
|
描述 | 連接音頻和視頻文件一個接一個。該過濾器適用于同步視頻和音頻流的片段(文件),其中所有片段必須具有相同數(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
一些視頻包含公司標志,通常位于左上角,常見示例是錄制電視節(jié)目。 FFmpeg包含2個特殊濾鏡以去除徽標,而最終效果并不總是完美,不過在許多情況下這種移除logo的技術還是可以接受的。
描述 | 通過對周圍像素的簡單插值來隱藏一個電視臺的標志。用戶設置一個覆蓋該徽標的矩形,它通常會消失(但在某些情況下,標識更明顯)。過濾器接受參數(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
顯示效果(水印沒了):
沒有三腳架或車輛拍攝的視頻的一些部分通常包括抖動 - 水平和垂直移動的小變化,在某些情況下可以使用去抖濾波器進行修正:
描述 | 修正水平和垂直位移的小變化,當視頻沒有三腳架或移動車輛時有用 |
---|---|
語法 | 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
使用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
如果您需要知道有多少幀包含您的視頻文件,您可以使用以下命令:
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 |
過濾器blackdetect
和blackframe
類似,但每個顯示不同的信息。 圖像上顯示使用與黑檢測濾鏡相同的視頻源的黑幀濾鏡輸出:
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
要選擇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
若要選擇幀內僅為輸出,我們可以使用以下命令:
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
調整和伸縮視頻章節(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
描述 | 從媒體(電影)容器讀取音頻和/或視頻流。 必需參數(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
|