pos機入門系統(tǒng),FFmpeg 入門

 新聞資訊  |   2023-04-24 09:44  |  投稿人:pos機之家

網(wǎng)上有很多關(guān)于pos機入門系統(tǒng),FFmpeg 入門的知識,也有很多人為大家解答關(guān)于pos機入門系統(tǒng)的問題,今天pos機之家(m.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機入門系統(tǒng)

pos機入門系統(tǒng)

FFmpeg 簡介ffmpeg命令行工具ffplay 播放的時候還有一些快捷鍵操作,比如快進 ->ffplay -showmode 默認是 video, 還可以選 rdft(逆實數(shù)離散傅立葉變換)和waves(來自濾波器顯示波的音頻波

ffplay -f lavfi -i testsrc -vf pad='400:300:(ow-iw)/2:(oh-ih)/2:orange'

FFmpeg軟件庫

FFmpeg庫被納入Chrome,以支持HTML5音頻和視頻元素。 其他使用FFmpeg的瀏覽器還包括Chromium和Orygin網(wǎng)絡瀏覽器常見 ffmepg 中的名詞/縮寫d/e/a/v/s: decoder【解碼器】/encoder【編碼器】/audio【音頻】/video【視頻】/subtitle【字幕】dar/sar/par: 圖像和視頻的縱橫比/ 圖像或視頻幀的長寬比,取決于視頻源 / 像素寬度與其高度之比, 一般是 1:1, DAR = PAR x SARiw/ow/ih/oh: input/ouput width="360px",height="auto" />

【todo 添加更多,持續(xù)更新】

已經(jīng)給大家準備好了安裝環(huán)境和各種視頻資料,資料放在自己的群里面:832218493(需要自?。?/strong>

正在跳轉(zhuǎn)

ffmpeg 命令

ffmpeg [global_options] {[input_file_options] -i INPUT_FILE} ... {[output_file_options] OUTPUT_FILE}...// 比如: ffmpeg [參數(shù)1]global_options [參數(shù)2]input_file_options -i [參數(shù)3]INPUT_FILE [參數(shù)4]output_file_options [參數(shù)5]OUTPUT_FILE調(diào)試請參考這里, 比如使用 -debug, -fdebug, -debug_ts, 設置 -loglevel命令的一些說明ffmpeg 是一個非??斓囊曨l/音頻轉(zhuǎn)換器,也可以抓取音頻/視頻源,并在任意采樣率、尺寸之間調(diào)整視頻,以及提供多種高品質(zhì)的過濾 filter 系統(tǒng)。ffmpeg 從任意數(shù)量/形式的輸入文件中進行讀取(可以是普通文件,管道,網(wǎng)絡流,設備源等等),通過輸入文件選項對輸入文件進行設定,通過 -i 進行標記,并寫入到任意數(shù)量/形式的輸出文件中,任何在命令行中不能被解釋為選項的字符串信息(當然也不是被-i指定為輸入文件的信息)都被作為一個輸出文件。原則上每個輸入或輸出文件都可包含數(shù)量不同的數(shù)據(jù)流(視頻/音頻/字幕/附件/數(shù)據(jù)….),具體文件中包含的數(shù)量和/或數(shù)據(jù)類型是文件的容器格式限定的,具體選擇那些流從輸入文件到輸出文件則可能是自動或者依據(jù) -map 選項來指定,【學會使用 stream specifiler 對于學習 ffmpeg 命令很重要】。作為一般規(guī)則,選項用于指定緊接著的文件,因此命令中順序很重要,你可以在命令中多次重復相同的選項,每次都可以應用于緊接著的下一個輸入或者輸出文件。例外的是全局選項(例如過程信息輸出詳細程度的選項),這些選項必須首先進行指定,會全局使用。為了明確指定輸入文件,你必須采用從 0 開始的數(shù)字索引法,即第1個輸入文件由0索引,第2個則是1。同樣的,在一個文件中指定數(shù)據(jù)流也是通過同樣規(guī)則的索引法,即2:3表示第3個輸入文件的第4個數(shù)據(jù)流。ffmpeg 調(diào)用 libavformat 庫(包含 demuxer)讀取輸入文件,分離出各類編碼的數(shù)據(jù)包(流),當有多個輸入文件時,ffmpeg 試圖跟蹤最低時間戳實現(xiàn)任意輸入流同步。編碼數(shù)據(jù)包(除非是指定為流式拷貝,相關(guān)內(nèi)容請參考特性描述對流式拷貝的說明)通過解碼器解碼出非壓縮的數(shù)據(jù)幀(raw視頻/PCM格式音頻…),這些數(shù)據(jù)幀可以被濾鏡進一步處理。經(jīng)過濾鏡處理的數(shù)據(jù)被重新編碼為新的數(shù)據(jù)包(流),然后經(jīng)過混合器混合(例如按一定順序和比例把音頻數(shù)據(jù)包和視頻數(shù)據(jù)包交叉組合),寫入到輸出文件,具體處理流程見下面的圖。ffmpeg 的 help 輸出比較復雜,某些字母的存在意味著該選項適用于編碼(E)、解碼(D)、視頻(V)、音頻(A)或字幕(S)可以在 FFmpeg 中使用的 SI 前綴:指的是再 ffmepg 里面制定數(shù)字可以使用這樣的形式: 1500000 => 1500K => 1.5M => 0.0015G在FFmpeg的命令中可以使用大量的變量,不同的命令可以使用的變量不同,比如 filter crop 里面的 x, y 位置:x的默認值為(iw - ow)/2, y的默認值為(ih - oh)/2,除了 iw,ih ,ow, oh 還可以使用變量: a, sal 等

_______ ______________| | | || input | demuxer | encoded data | decoder| file | ---------> | packets | -----+|_______| |______________| | v _________ | | | decoded | | frames | |_________| ________ ______________ || | | | || output | <-------- | encoded data | <----+| file | muxer | packets | encoder|________| |______________|顯示輸出預覽FFplay媒體播放器預覽: ffplay -i input_file ... test_options使用SDL輸出設備預覽: ffmpeg -f lavfi -i rgbtestsrc -pix_fmt yuv420p -f sdl ExampleFilters, filterchains,filtergraphs在多媒體處理中,術(shù)語過濾器是指在編碼到輸出之前修改輸入的軟件工具。過濾器分為音頻和視頻過濾器。FFmpeg內(nèi)置了許多多媒體過濾器,可以通過多種方式組合它們。FFmpeg的過濾API(應用程序編程接口)是 libavfilter 軟件庫,它允許過濾器有多個輸入和輸出。過濾器包括在輸入和輸出之間使用 -vf 選項的視頻過濾器-af 選項音頻過濾器。

# 順時針旋轉(zhuǎn) 90°:使用轉(zhuǎn)置過濾器ffplay -f lavfi -i testsrc -vf transpose=1# 使用atempo音頻過濾器將輸入音頻的速度降低到80%:ffmpeg -i input.mp3 -af atempo=0.8 output.mp3在編碼前,ffmpeg可以對raw(真實/原)音頻和視頻使用libavfilter庫中的濾鏡進行處理。在ffmpeg看來只有2種濾鏡:簡單過濾器,復合過濾器.簡單濾鏡filter filtergraph就是只有1個輸入和輸出的濾鏡,濾鏡兩邊的數(shù)據(jù)都是同一類型的,可以理解為在非壓縮數(shù)據(jù)幀到再次編碼前簡單附加了一步復合濾鏡-filter_complex filtergraph是那些不能簡單描述為一個線性處理過程應用到一個流的情況,例如當過程中有多個輸入和/或輸出,或者輸出流類型不同于輸入時.復合過濾器通常使用 -lavfi 或者 -filter_complex, 兩者是等價的. 【這里有個容易混淆的 fflay -f lavfi 給 virtual device 提供輸入】filter_complex 有一些規(guī)則:input 用 [file_index:stream_specifier] 表示 label, 可以在 -map 中引用;如果 stream_specifier 匹配多個 stream,使用第一個沒有 label 的input 會自動使用第一個沒有被使用的 stream; 如果輸出沒有 label 會自動輸出到第一個 output詳細的語法參考這里

_________ ______________| | | || decoded | | encoded data || frames |\\ _ | packets ||_________| \\ /||______________| \\ __________ / simple _\\|| | / encoder filtergraph | filtered |/ | frames | |__________| _________| || input 0 |\\ __________|_________| \\ | | \\ _________ /| output 0 | \\ | | / |__________| _________ \\| complex | /| | | |/| input 1 |---->| filter |\\|_________| | | \\ __________ /| graph | \\ | | / | | \\| output 1 | _________ / |_________| |__________|| | /| input 2 |/|_________|過濾器通常用于 filterchains(逗號分隔的過濾器序列) 和 filtergraphs(分號分隔的filterchains序列)。在filtergraphs中,可以使用表示所選filterchain輸出的鏈接標簽,并可以在以下的filtergraphs中使用。例如,我們希望將輸入視頻與hqdn3d過濾器輸出的輸出進行比較。如果沒有filtergraphs,我們必須至少使用兩個命令,例如:

# -vf <=> -filter:vffmpeg -i input.mpg -vf hqdn3d,pad=2*iw output.mp4ffmpeg -i output.mp4 -i input.mpg -filter_complex overlay=w compare.mp4

使用帶有鏈接標簽的filtergraph,就只有一個命令:

# 分割過濾器將輸入分為2個輸出標簽[a]和[b],然后將[a]鏈接用作第二個filterchain的輸入,它為標記[a]的比較創(chuàng)建了一個pad。[b]鏈接被用作第三個filterchain的輸入,它創(chuàng)建一個標記為[b]的輸出。最后一個filterchain使用[A]和[B]標簽作為覆蓋過濾器的輸入,從而產(chǎn)生最終的比較。ffplay -i i.mpg -vf 'split[a][b];[a]pad=2*iw[A];[b]hqdn3d[B];[A][B]overlay=w'

下圖是另一個例子: ffplay -f lavfi -i rgbtestsrc -vf "split[a][b];[a]pad=2*iw[1];[b]vflip[2];[1][2]overlay=w"

選擇媒體流默認情況下,ffmpeg把輸入文件每種類型(視頻、音頻和字幕)僅僅采用一個流轉(zhuǎn)換輸出到輸出文件中,就是把最好效果的流進行輸出:對于視頻就是質(zhì)量最高的流,對于音頻就是包含最多聲道的,對于字幕則是第一個字幕軌道,如果有多個同型同率(同樣類型,碼率相同)則選用索引號最小的流??梢越媚J設置,而采用-vn/-an/-sn/-dn 選項進行專門的指定排除,如果要進行完全的手動控制,則是以-map選項,它將禁止默認值而選用指定的配置. -map 選項的參數(shù)格式為 -map [-]input_file_id[:stream_specifier][?][,sync_file_id[:stream_specifier]] | [linklabel] (output), 舉例:-map 0選擇所有類型的所有流。-map i:v從文件中選擇所有的視頻流,用i (index), -map i:a選擇所有的音頻流,-map i:s選擇所有字幕流,等等特殊選項- - -vn, -sn分別排除所有音頻、視頻或字幕流一般來說流的選擇和流的處理無關(guān)【字幕除外】【codec 用于指定流的處理,如果沒有指定,ffmepg 會選擇默認的】,如果字幕 encoder 被指定了,第一個字幕流會被 include.除了特定的-map選項,流指定符還與許多其他選項一起使用:

流的形式說明符

-codec:a:1 ac3 對 a:1 使用 ac3 codec, -codec: copy 或者 -codec copy 則對所有 stream 使用 codec copy為了設置音頻和視頻的使用-b選項的比特率,我們可以使用命令: ffmpeg -i input.mpg -b:a 128k -b:v 1500k output.mp4

# 下面這個命令中 out1.mkv out2.wav 將包含 A.avi, B.mp4 中最佳的 video/audio 和第一個 subtitle# 而 out3.mov 只會有 B.mp4 中的 audio, 而且不會處理,只是 copyffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov# 下面的命令中 out1.mkv 只會有 audio/video 因為默認的字幕 encoder 是 Matroska muxer 是 text-based,但是 C.mkv 里面的的字幕是 image-based# 所以字幕不會被選擇;而 out2.mkv 只有 video/subtitle 因為 audio 被 -an 操作排除了ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv# 下面這個命令中 overlay 需要兩個輸入,但是沒有指定,所以自動選擇 A.avi 和 C.mkv 中的 video 生成 out1.mp4, 同時 out1.mp4 會有 A,C 中最佳# audio, 但是不會有字幕,因為 mp4 沒有默認字幕 encoder,又沒主動設置。out2.srt 將選擇 A,C 中第一個 text-based 字幕流ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt# 下面的命令使用 labeled filtergraph, 這里要注意, 對于 label outv1, outv2 都要**有且僅有一次的使用**,如果沒有 label 默認輸出到第一個輸出# outv1, overlay, aresample 都會輸出到 out1.mp4, -an 不會抑制 filtergraphs 的輸出;out2.mkv 由 automatic stream selection 決定輸出# out3.mkv 輸入內(nèi)容為 hue filter 的一份輸出 + B.mp4 的第一個 audioffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \\ -map '[outv1]' -an out1.mp4 \\ out2.mkv \\ -map '[outv2]' -map 1:a:0 out3.mkvLavfi虛擬設備

Lavfi通常用于顯示測試模式,例如帶有命令的SMPTE條:

ffplay -f lavfi -i smptebars這里 -f 的意思是強制輸入輸出格式,一般是通過后綴可以推斷 其他經(jīng)常使用的源是可以用命令顯示的顏色源:

ffplay -f lavfi -i color=c=blue顏色名稱一些視頻過濾器和源有一個顏色參數(shù),需要指定需要的顏色,并且有4種顏色規(guī)范的方法(默認值為黑色):顯示幫助和功能FFmpeg工具有一個很大的控制臺幫助,可以完整顯示或關(guān)于特定元素 - 解碼器,編碼器等。ffmpeg -? or ffmpeg -h; ffmpeg -h long or ffmpeg -h full; ffmpeg –? topic or ffmpeg -h topic

例如,要顯示關(guān)于FLV解碼器的信息,我們可以使用以下命令:

ffmpeg -h decoder=flv其他幫助比特率/幀率/文件大小幀率(頻率)的介紹幀速率是編碼成視頻文件的每秒幀數(shù)(FPS或fps),人眼需要至少約15 fps來觀看連續(xù)運動。 幀率也稱為幀頻,其單位是赫茲(Hz),LCD顯示器通常具有60 Hz的頻率。有兩種幀速率 - 隔行(在fps編號后表示為i)和逐行(在FPS編號后表示為p)。在電視中使用隔行幀率幀率設置要設置視頻幀速率,我們在輸出文件之前使用-r選項,語法是: ffmpeg -i input -r fps output另一種設置幀速率的方法是使用fps過濾器,這在過濾鏈中尤其有用. 語法為: fps=fps=number_of_frames除了數(shù)值,設置幀率的兩種方法都接受下一個預定義的文本值:

# 改變視頻的幀率。avi文件從25到30 fpsffmpeg -i input.avi -r 30 output.mp4# 要更改剪輯的輸入幀速率。mpg文件到值25ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm# 設置幀速率為29.97 fpsffmpeg -i input.avi -r ntsc output.mpg比特率

比特率是決定整體音頻或視頻質(zhì)量的參數(shù)。 它規(guī)定了每時間單位處理的位數(shù),在FFmpeg中,比特率以每秒位數(shù)表示。

比特率決定了存儲1秒編碼流的位數(shù),它使用-b選項設置, -b【encoding,audio/video】, -ba 【encoding,audio】, -bt 【encoding,video】比特率的類型:可以設置輸出文件大小為一個值,自動計算比特率: ffmpeg -i input.avi -fs 10MB output.mp4根據(jù)比特率大概可以算出文件大小(不包括muxing開銷和文件元數(shù)據(jù)等): file_size = (video_bitrate + audio_bitrate) * time_in_seconds / 8調(diào)整和伸縮視頻調(diào)整視頻輸出視頻的寬度和高度可以在輸出文件名之前設置 -s 選項【等價于在 最后加了一個 filter scale】。視頻分辨率以WxH格式輸入,其中w為像素寬度,h為像素高度-s 如果設置在輸入之前,= video_size視頻幀大小也有一些預設值,比如 vga == 640x480, hd720=1280x720, sxga=1280x1024, hd1080=1920x1080視頻通常被調(diào)整為比來源更小的分辨率,這被稱為下采樣。在較小的尺寸中,一些細節(jié)將會丟失,這一事實解釋了奈奎斯特-Shannon采樣定理:為了完全重構(gòu)采樣信號,我們必須使用比信源頻率高至少2倍的頻率。 這意味著要將小細節(jié)保留在縮小的視頻中,它們的原始尺寸必須高于縮放比例除以2。另一個相關(guān)的命令為 -aspect 調(diào)整橫縱比

# 下面兩個命令等價ffmpeg -i input.avi -s 640x480 output.aviffmpeg -i input.avi -s vga output.avi#例如,800x600(SVGA)分辨率的視頻包含2像素寬的細節(jié)。 當縮放到640x480(VGA)分辨率時,縮放比率為0.8,并且2像素再縮放為2像素:640 pixels / 800 pixels = 0.82 pixels * 0.8 = 1.6 ≈ 2 pixels# 但是當這個視頻被縮放到160x120 (QQVGA)分辨率時,細節(jié)就丟失了:160 pixels / 800 pixels = 0.22 pixels * 0.2 = 0.4 ≈ 0 pixels擴大濾波器將視頻調(diào)整為更大的幀大小比較少見, 用于平滑放大的源的特殊濾波器是super2xsai濾波器:

# 將128x96視頻話放大到分辨率256x192像素ffmpeg -i phone_video.3gp -vf super2xsai output.mp4高級縮放技能要管理縮放過程開始的位置,可以直接使用縮放過濾器。scale=width="360px",height="auto" />

; 有一些變量可用,比如:iw or in_w: 輸入的寬度; ih or in_h: 輸入的高度a: 縱橫比,與iw/ih相同。sar: 輸入樣本縱橫比,與dar/a相同;dar:輸入顯示縱橫比,與*sar相同。

# 按比例縮放視頻輸入ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4# 擴展到預定義的寬度或高度: 等比縮放ffmpeg -i input.avi -vf scale=400:400/a裁剪視頻使用 video filter crop, 語法: crop=ow[:oh[:x[:y[:keep_aspect]]]]; 可用變量:x, y: 對x的計算值(從左上角水平方向的像素個數(shù))和y(垂直像素的數(shù)量),對每個幀進行評估,x的默認值為(iw - ow)/2, y的默認值為(ih - oh)/2in_w, iw: 輸入的寬度; in_h, ih: 輸入的高度out_w, ow: 輸出(裁剪)寬度,默認值= iw; out_h, oh: 輸出(裁剪)高度,默認值= iha: 縱橫比,與iw/ih相同; sar: 輸入樣本比例; dar: 輸入顯示寬比,等于表達式a*sarhsub, vsub: 水平和垂直的色度子樣本值,對于像素格式y(tǒng)uv422p, hsub的值為2,vsub為1n: 輸入框的數(shù)目,從0開始pos: 位置在輸入框的文件中,如果不知道NANt: 時間戳以秒表示,如果輸入時間戳未知裁剪框中心:按照上面的命令說明,可以看出如果不設置 x.y 那么會自動設置中心進行剪裁,比如 ffmpeg -i input_file -vf crop=w:h output_file 會剪裁中間的 w:h 區(qū)域自動檢測裁剪區(qū)域: 使用 cropdetect 過濾器,語法為:cropdetect[=limit[:round[:reset]]], limit 參數(shù)表示對灰度值 < limit 的進行剪裁填充視頻使用 filter pad, 語法為 pad=width="360px",height="auto" />

例子

ffplay -f lavfi -i testsrc -vf pad=380:360:30:30:pink -t 50# 從4:3到16:9的填充視頻ffmpeg -i input -vf pad=ih*16/9:ih:(ow-iw)/2:0:color output# 從16:9到4:3的填充視頻ffmpeg -i input -vf pad=iw:iw*3/4:0:(oh-ih)/2:color output翻轉(zhuǎn)和旋轉(zhuǎn)視頻水平翻轉(zhuǎn), 使用 filter hflip, 語法: -vf hflip垂直翻轉(zhuǎn), 使用 filter vlfip, 語法: -vf vflip旋轉(zhuǎn), 使用 filter transpose, 語法: transpose={0, 1, 2, 3}, 參數(shù)含義見下面的 例子中的 help

例子

ffplay -f lavfi -i testsrc -vf hflip# 一個看 help 的例子> ffmpeg -h filter=transposeFilter transpose Transpose input video. slice threading supported Inputs: #0: default (video) Outputs: #0: default (video)transpose AVOptions: dir <int> ..FV....... set transpose direction (from 0 to 7) (default cclock_flip) cclock_flip 0 ..FV....... rotate counter-clockwise with vertical flip clock 1 ..FV....... rotate clockwise cclock 2 ..FV....... rotate counter-clockwise clock_flip 3 ..FV....... rotate clockwise with vertical flip passthrough <int> ..FV....... do not apply transposition if the input matches the specified geometry (from 0 to INT_MAX) (default none) none 0 ..FV....... always apply transposition portrait 2 ..FV....... preserve portrait geometry landscape 1 ..FV....... preserve landscape geometry模糊,銳化和去噪模糊使用 filter boxblur, 語法: boxblur=luma_r:luma_p[:chroma_r:chroma_p[:alpha_r:alpha_p]] filter expects 2 or 4 or 6 parameters, r =半徑, p = 權(quán)重,程度,功率另一個模糊 filter 為 smartblur, 語法: smartblur=luma_r:luma_s:luma_t[:chroma_r:chroma_s:chroma_t] r = radius, p = power, t = threshold銳化使用 filterm, 語法: l_msize_x:l_msize_y:l_amount:c_msize_x:c_msize_y:c_amount all parameters are optional, if not set, the default is 5:5:1.0:5:5:0.0降噪 可以使用過濾器 denoise3d, 它是mp過濾器的一部分, 語法: mp=denoise3d[=luma_spatial[:chroma_spatial[:luma_tmp[:chroma_tmp]]]]另一個降噪過濾器: hqdn3d, 他是 denoise3d過濾器的高級版本,語法為 hqdn3d=[luma_spatial[:chroma_spatial[:luma_tmp[:chroma_tmp]]]]使用 nr 選項也可以降噪,它的值是一個從0到100000的整數(shù),其中0是默認值, 比如 ffplay -i input.avi -nr 500overlayoverlay 使用 fliter overlay, 語法為 overlay[=x:y[[:rgb={0, 1}]] 參數(shù)x和y是可選的,其默認值為0 rgb參數(shù)是可選的,其值為0或1;這個 filter 的意思是在指定位置上覆蓋第一個輸入. 比如 ffmpeg -i input1 -i input2 -filter_complex overlay=x:y output注意,不是使用-vf選項,而是使用-filter_complex選項, 因為此時有兩個輸入如果希望 overlay 顯示在某個時刻,可以使用 itsoffset: ffmpeg -i video_with_timer.mp4 -itsoffset 5 -i logo.png -filter_complex overlay timer_with_logo.mp4

# overlay 里面重要等變量為:# main_w or W主要輸入寬度; main_h or H主要輸入高度# overlay_w or woverlay輸入寬度; overlay_h or hoverlay輸入高度# 下面這個命令會把 overlay 放在右上角ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w pair2.mp4為視頻添加文字添加文字使用 filter drawtext, 從文本文件或字符串在視頻中添加文本,并使用各種參數(shù)進行修改。 文本從文本文件參數(shù)指定的文件中加載,或直接使用文本參數(shù)輸入。 其他必需參數(shù)是指定選定字體的字體文件。 文本位置由x和y參數(shù)設置。語法為:drawtext=fontfile=font_f:text=text1[:p3=v3[:p4=v4[...]]] p3,p4 ...表示參數(shù)#3,參數(shù)#4等; 這個 filter 的參數(shù)比較多,可以用 ffmpeg -h filter=drawtext 查看位置中使用 t 變量,就可以制造出運動的文字效果

ffplay -f lavfi -i color=white -vf drawtext=fontfile=/Library/Fonts/Baskerville.ttc:text=Welcome# 橫向運動的文字ffmpeg -f lavfi -i color=orange -vf drawtext="text=hello:x=w-t*50:y=h-th:fontcolor=blue:fontsize=30" -t 50 test.mp4編碼解碼編解碼的功能比較復雜,主要是編解碼器的種類繁多,參數(shù)繁多;首先要了解文件格式 和 編解碼器 的區(qū)別文件格式 對應于 多媒體容器,是一種包裝格式,使用 fmpeg -formats 可以看到所有支持的文件格式(容器),比如 mp4, mp3 等等編解碼器是編解碼的算法類型,使用 ffmpeg -codecs 可以看到所有的編解碼器,命令行上的編解碼器是由-c或-codec選項指定的,語法是:-codec[:stream_specifier] codec_name如果只更改容器并保留編解碼器,我們可以使用-c copy或-c:a copy或-c:v copy選項:ffmpeg -i input.avi -q 1 -c copy output.mov可以為輸入和輸出文件指定編解碼器,如果輸出包含多個流,則每個流可以使用不同的編解碼器。 如果我們在沒有編解碼器的情況下指定輸出格式,則ffmpeg會選擇默認編解碼器,比如 .avi 格式的默認編解碼器為 mpeg4, .mkv/mov/mp4 格式的編解碼器為 h264參數(shù)非常多,用 ffmpeg -h encoder={name} 和 ffmpeg-formats 文檔 來查看幫助

# 語法如下,用在 input 前面就是 decoder, 用在 output 前面就是 encoder-c[:stream_specifier] codec (input/output,per-stream)-codec[:stream_specifier] codec (input/output,per-stream)# 一個 stream 前面可能應用了很多 codec, 以 last matching c option 為準# 比如下面這個命令會 用 libx264 encode 第一個 video, libvorbis encode 第 137 個 audio, 其他 stream copy ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT時間操作一般時間都接受兩種參數(shù)風格: [-]HH:MM:SS[.m…] 和 [-]S+[.m…], 其中,HH 表示小時,MM 表示分鐘,SS 或 S 表示秒數(shù),m 表示毫秒.如果要設置視頻的時長【裁剪后面的】,可以使用 -t 參數(shù)控制時間或者 -frames 【-aframes <=> -frames:a 適用于 audio 同理有 -dframes/ -vframes】 參數(shù)控制幀數(shù)想要從某個時間點開始記錄輸入文件 【裁剪前面的】,可以使用 -ss (seek from start)參數(shù), 注意組合使用 -ss 和 -t 表示從 ss 開始輸入 t 時間輸入流做延遲,使用 -itsoffset + -map使用 -timestamp 選項可以在視頻中記錄時間戳時間戳和時間基音頻視頻速度修改: 視頻速度修改使用 setpts filter (set presentation timestamp), 語法為 setpts=expression; 音頻速度改變使用 filter atempoasyncts audio filter 可以使用時間戳來同步音頻數(shù)據(jù)

ffmpeg -i music.mp3 -t 180 music_3_minutes.mp3ffmpeg -i video.avi -vframes 15000 video_10_minnutes.aviffmpeg -i input.avi -ss 10 output.mp4# 從 video.mpg 中保存第5分鐘的部分ffmpeg -i video.mpg -ss 240 -t 60 clip_5th_minute.mpg# 音頻比視頻要快了 1.5 秒 做同步, 這里 -c 表示 -codec[:stream_specifier] codec <=> -c[:stream_specifier] codec (input/output,per-stream)ffmpeg -i input.mpv -map 0:v -map 0:a -itsoffset 1.5 -c:a copy -c:v copy output.mov# 視頻快了 5 秒 做同步 ffmpeg -i input.mov -map 0:v -itsoffset 5 -map 0:a -c:a copy -c:v copy output.mov# 兩個文件,將音頻流延遲 3 秒ffmpeg -i v.mpg -itsoffset 3 -i a.mp3 -map 0:v:0 -map 1:a:0 output.mp4# 3 倍速來觀看視頻ffplay -f lavfi -i testsrc -vf setpts=PTS/3# 2 倍速來播放輸入音頻ffplay -i speech.mp3 -af atempo=2# 使用時間戳來同步 music.mpg 文件中的數(shù)據(jù)ffmpeg -i music.mpg -af asyncts=compensate=1 -f mpegts music.ts數(shù)學函數(shù)許多FFmpeg選項都需要數(shù)值作為參數(shù),其中一些可以是表達式形式,可以包含算術(shù)運算符、常量和各種數(shù)學函數(shù)。函數(shù)通常用于音頻和視頻過濾器和源, 比如 aevalsrc【音頻源】,boxblur/overlay/crop/drawtext/scale【視頻過濾器】等等; 還可以使用一些內(nèi)置多數(shù)學函數(shù),比如: abs, asin(x), eq(x, y), gte(x, y), if(expr1, expr2), min(x, y), while(cond, expr) 等等

# 產(chǎn)生頻率為523.251 Hz的C5音調(diào)(中音高C)的音調(diào)ffplay -f lavfi -i aevalsrc='sin(523.251*2*PI*t)'元數(shù)據(jù)和字幕媒體文件中的元數(shù)據(jù)包含藝術(shù)家,作者,日期,流派,發(fā)布者,標題等附加信息,不會顯示在視頻幀中。而字幕是文本數(shù)據(jù),顯示在視頻幀底部附近,通常包含在單獨的文件中,盡管一些容器文件格式(如VOB)支持包含字幕文件。查看元數(shù)據(jù): 使用 ffprobe, 或者 ffplay 的時候都會顯示元數(shù)據(jù)創(chuàng)建元數(shù)據(jù): 使用 -metadata k1=v1 -metadata k2=v2保存元數(shù)據(jù)到文件:-f ffmetadata; 加載文件元數(shù)據(jù)到文件 -i x -i y刪除元數(shù)據(jù): -map_metadata -1字幕:字幕也有很多格式,比如 ass, srt 等等,使用后綴可以識別出對應的編解碼器 ssa/srt 進行編解碼一部分 filter 支持將字幕編碼到視頻流中,語法為 subtitles=filename[:original_size], 例子: ffmpeg -i video.avi -vf subtitles=titles.srt video.mp4

# 查看一個 mp3 文件的元數(shù)據(jù)> ffprobe '~/Downloads/Jack Johnson - Imagine.mp3'... 省略部分內(nèi)容Input #0, mp3, from '~/Downloads/Jack Johnson - Imagine.mp3': Metadata: encoder : Lavf56.4.101 disc : 1 track : 11 artist : Jack Johnson comment : 163 key(Don't modify):L64FU3W4YxX3ZFTmbZ+8/UnVjCnqpKdEibASol9of8KaPX//btdBYF+VVRkXkEDD/iGR355GeUXxh0IUGR/GwBNi9G4ezN6Z7cPYKcJ3G01aqRPkU1umKYjjZLXvNFMCMLrmf5mGqVQo+hTaZlpidWU9kf8oTXfXHN4cj2PKPLh7HFCdJ/oKzLj3tB/BKqQJjZ1moy59PXmgevX6IGXydNfGHhxwts+3ZlZ/1FBko title : Imagine album : The Mango Tree # 新建元數(shù)據(jù)ffmpeg -i '~/Downloads/Jack Johnson - Imagine.mp3' -metadata "k1=v1" -metadata "k2=v2" -y ~/Downloads/test.mp3# 保存元數(shù)據(jù)到文件ffmpeg -i ~/Downloads/test.mp3 -f ffmetadata ~/Downloads/test.txt# 加載文件元數(shù)據(jù)到文件 ffmpeg -i ~/Downloads/test.txt -i ~/Downloads/test.mp3 ~/Downloads/test2.mp3# 刪除元數(shù)據(jù)ffmpeg -i input.avi -map_metadata -1 output.mp4

下圖不一定準確,可以參考一下常見的 predefined metadata 有哪些 key

圖像處理

雖然FFmpeg工具的主要用途與音頻和視頻有關(guān),但ffmpeg可以對各種圖像格式進行解碼和編碼,并且許多圖像相關(guān)任務可以快速完成

支持的格式包括: Y.U.V, BMP, GIF, JPG ....略創(chuàng)建圖像:從視頻截圖:ffmpeg -i input -ss t image.type ss 表示從哪開始, t 表示 時刻,這是 ffmpeg 一致的參數(shù)從視頻截 gif: 直接轉(zhuǎn) .gif【todo 補充更多實用例子】使用內(nèi)置的視頻源創(chuàng)建圖像: color/ mptestsrc/ rgbtestsrc/ smptebars/ testsrc, 比如 color,使用的參數(shù)為 color[=c=clr[:d=time[:r=fps[:sar=value[:s=resolution]]]]]抽幀: ffmpeg -i clip.avi frameM.jpg 【todo 補充更多實用例子】調(diào)整大小,裁剪和填充圖像: 和視頻類似翻轉(zhuǎn),旋轉(zhuǎn)和疊加圖像 和視頻類似圖像類型之間的轉(zhuǎn)換:ffmpeg -i image.type1 image.type2從圖像創(chuàng)建視頻:來自一個圖片:ffmpeg -loop 1 -i photo.jpg -t 10 photo.mp4來自多個圖片:ffmpeg -f image2 -i img%d.jpg -r 25 video.mp4

# 截圖ffmpeg -i in1.mp4 -ss 3 -frames:v 1 snap.jpg# gif ffmpeg -i in1.mp4 -pix_fmt rgb24 in1.gif# 從內(nèi)置視頻源生成圖片,比如生成一個單色的圖片ffmpeg -f lavfi -i color=c=#008080:s=728x90 -frames:v 1 leaderboard.jpg數(shù)字音頻

數(shù)字音頻是一種技術(shù),用于捕獲、記錄、編輯、編碼和復制聲音,這些聲音通常由脈沖編碼調(diào)制(PCM)進行編碼。FFmpeg支持許多音頻格式,包括AAC、MP3、Vorbis、WAV、WMA等

音頻基礎音頻量化: 由于人類聽覺系統(tǒng)的生理限制,壓力波的連續(xù)值可以用有限的一系列值代替, 使用二進制存儲音頻的位數(shù)稱為 音頻位深度, 量化常見的位深度有:8 bit: 用于電話,舊設備12 bit: DV(數(shù)字視頻)的標準,用于數(shù)碼相機等14 bit: 用于NICAM壓縮,電視立體聲,等等16 bit: 標準音頻CD和DAT(數(shù)字音頻磁帶)20 bit: 附加標準的超級音頻CD和DVD音頻24 bit/32 bit: 略音頻采樣:量化是縱坐標的表示,橫坐標就是采樣,采樣常見的頻率有:8000 Hz: 用于電話、無線網(wǎng)絡和麥克風等11025/16000/22050/32000 HZ: 略44100 HZ:音頻CD標準,用于MPEG-1, PAL電視等48000 HZ:專業(yè)使用標準費率,為消費者提供DV、DVD、數(shù)字電視等96000 HZ: 標準的DVD-音頻,藍光光盤,HD DVD等192000/352800 HZ:略音頻文件格式:分幾類:未壓縮: ALAC/AU/BWF/PCM (raw, without header)/WAV (PCM)無損壓縮: AIFF (PCM)/ALS/ATRAC/FLAC/WavPack/WMA有損壓縮: AAC/AC-3/ AMR/ MP2, MP3/ Musepack/Speex/Vorbis (OGG)音頻操作聲音合成: 可以用內(nèi)置的 音頻源 aevalsrc 來創(chuàng)建聲音, 語法為 aevalsrc=exprs[::options] exprs:是一個冒號分隔的表達式列表,每個新表達式都指定了新通道; options:鍵=值對的冒號分隔列表;exprs 中可用: n: 評估樣本的數(shù)量; t: 以秒為單位的時間,從0開始; s: 采樣率;options 重可用: c or channel_layout: 通道布局,通道數(shù)量必須等于表達式的數(shù)量; d or duration: max 持續(xù)時間,如果沒有指定,或者是負數(shù),音頻將生成直到程序停止; n or nb_samples: 每個通道每個輸出幀的樣本數(shù)量,默認為1024個樣本; s or sample_rate: 采樣率,默認值為44100 Hz使用-layout選項可以創(chuàng)建多聲道聲音立體聲的特殊類型是雙耳音(節(jié)拍) - 兩個頻率差約30Hz或更小的音,兩個音的頻率必須低于1000Hz音量設置: 使用 -vol [0-256], 如果值<1, 那么 output_volume = vol * input_volume, 如果有后綴 dB, output_volume = 10 ^(卷/ 20)* input_volume混合多個聲音: 使用語法 amix=inputs=ins[:duration=dur[:dropout_transition=dt]]將立體聲調(diào)至單聲道,環(huán)繞立體聲:使用 pan=layout:channel_def[:channel_def[:channel_def...]]音頻分析: 使用 filter ashowinfo, 可以對每一個音頻幀顯示參數(shù)信息調(diào)整耳機聽音: 使用 filter earwax-map_channel 選項可以更改各種音頻參數(shù),其語法為: -map_channel [in_file_id.stream_spec.channel_id|-1][:out_file_id.stream_spec]將兩個音頻流合并到一個多通道流: 使用 filter amerge音頻流轉(zhuǎn)發(fā)與緩沖buffet order控制: 使用 filter astreamsync

# 產(chǎn)生音符A4,音高的調(diào)優(yōu)標準,將tone_height設置為440 Hz:ffplay -f lavfi -i aevalsrc='sin(440*2*PI*t)' -t 2# 多聲道【立體聲】ffplay -f lavfi -i aevalsrc='sin(495*2*PI*t)|cos(505*2*PI*t):c=FL+FR'# 音頻分析ffmpeg -report -i ~/Downloads/test.mp3 -af ashowinfo -f null /dev/null預設編解碼器作用是預設一些編解碼器選項的默認值,簡化 ffmpeg 的使用【選項實在太多了】預設文件的格式見下面的例子,請查看文檔,使用方式為: ffmpeg -i input -fpre mpeg2.ffpreset -q 1 MPEG2_video.mpg還有一個 -target 命令,比如 -target vcd 會自動為輸出設置 bitrate, codecs, buffer sizes 等參數(shù)

vcodec=flv# 視頻編解碼器, 必填唯一b:v=300k# 視頻比特率g=160# 圖片組大小mbd=2# macroblock決策算法flags=+aic+mv0+mv4# aic - h263高級內(nèi)部編碼;總是嘗試使用mv=<0,0>;mv4 -使用macroblock的4運動矢量trellis=1# rate失真優(yōu)化量化ac=1# 聲道數(shù)ar=22050# 音頻采樣率b:a=56k# 音頻比特率隔行視頻隔行視頻標準隔行掃描是在單色模擬電視開發(fā)過程中發(fā)明的技術(shù),可以消除舊CRT顯示器的閃爍。 視頻幀被水平劃分為規(guī)則線,然后劃分為2個場,其中第一個場包含奇數(shù)行,第二個場包含偶數(shù)行。NTSC, PAL和SECAM電視標準 見下表隔行視頻操作

略,參考 https://www.jianshu.com/p/fb051e1457c2

麥克風和攝像頭

略, https://www.jianshu.com/p/95012f6696e0

顏色修正

略,https://www.jianshu.com/p/f2a94de1c26a

高級使用 filter concat 連接視頻/音頻,其中所有片段必須具有相同數(shù)量的每種類型的流,例如1個音頻和1個視頻,或2個音頻和1個視頻,等等,語法:concat=a=a_streams:v=v_streams:n=segments[:unsafe]使用 filter delogo 移除 logo, 它通過對周圍像素的簡單插值來隱藏一個電視臺的標志。用戶設置一個覆蓋該徽標的矩形,它通常會消失(但在某些情況下,標識更明顯)。語法: delogo=x=0:y=0:w=width="360px",height="auto" />

使用 filter deshake 修正視頻的抖動,語法: deshake=x:y:w:h:rx:ry:edge:blocksize:contrast:search:filename使用 filter aselect/select 選擇指定的幀進行輸出,語法: select=expression使用 filter setdar/setsar 來設置縱橫比,語法: setdar[=r=aspect_ratio[:max=number]]; setdar[=aspect_ratio[:number]]使用 filtergraph常用參數(shù)和例子

-f fmt (input/output) :指定輸入或者輸出文件格式。常規(guī)可省略而使用依據(jù)擴展名的自動指定-c:指定編碼器-c copy:直接復制,不經(jīng)過重新編碼(這樣比較快)-c:v:指定視頻編碼器-c:a:指定音頻編碼器-i:指定輸入文件-an:去除音頻流-vn: 去除視頻流-preset:指定輸出的視頻質(zhì)量,會影響文件的生成速度,有以下幾個可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。-y:不經(jīng)過確認,輸出時直接覆蓋同名文件。-c[:stream_specifier] codec (input/output,per-stream)-codec[:stream_specifier] codec (input/output,per-stream)為特定的文件選擇編/解碼模式,對于輸出文件就是編碼器,對于輸入或者某個流就是解碼器。選項參數(shù)(后面的那個)中codec是編解碼器的名字,或者是copy(僅對輸出文件)則意味著流數(shù)據(jù)直接復制而不再編碼// 在輸出文件中第2視頻流按libx264編碼,第138音頻流按libvorbis編碼,其余都直接復制輸出ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT-t duration (input/output):限制輸入/輸出的時間。如果是在-i前面,就是限定從輸入中讀取多少時間的數(shù)據(jù);如果是用于限定輸出文件,則表示寫入多少時間數(shù)據(jù)后就停止-ss position (input/output): 當在-i前時,表示定位輸入文件到position指定的位置。注意可能一些格式是不支持精確定位的,所以ffmpeg可能是定位到最接近position(在之前)的可定位點。當用于輸出文件時,會解碼丟棄position對應時間碼前的輸入文件數(shù)據(jù)-dn (input/output)As an input option, blocks all data streams of a file from being filtered or being automatically selected or mapped for any output. See -discard option to disable streams individually.As an output option, disables data recording i.e. automatic selection or mapping of any data stream. For full manual control see the -map option.-dframes number (output):設定指定number數(shù)據(jù)幀到輸出文件,這是-frames:d的別名。frames[:stream_specifier] framecount (output,per-stream):在指定計數(shù)幀后停止寫入數(shù)據(jù)。-q[:stream_specifier] q (output,per-stream)-qscale[:stream_specifier] q (output,per-stream)使用固定的質(zhì)量品質(zhì)(VBR)。用于指定q|qscale編碼依賴。如果qscale沒有跟stream_specifier則只適用于視頻。其中值q取值在0.01-255,越小質(zhì)量越好-filter[:stream_specifier] filtergraph (output,per-stream):創(chuàng)建一個由filtergraph指定的濾鏡,并應用于指定流。// 視頻(video)選項-vframes number (output):設置輸出文件的幀數(shù),是-frames:v的別名-r[:stream_specifier] fps (input/output,per-stream):設置幀率(一種Hz值,縮寫或者分數(shù)值)-s[:stream_specifier] size (input/output,per-stream):設置幀的尺寸。-aspect[:stream_specifier] aspect (output,per-stream):指定視頻的縱橫比(長寬顯示比例)-vn (output):禁止輸出視頻-vcodec codec (output):設置視頻編碼器,這是-codec:v的一個別名// OPTIONS FOR SETTING QUALITY-b:v or -b:a to set bitrate // e.g., -b:v 1000K = 1000 kbit/s, -b:v 8M = 8 Mbit/s-q:v or -q:a to set fixed-quality parameter //e.g., -q:a 2 for native AAC encoder// Examples of encoder-specific options:-crf to set Constant Rate Factor for libx264/libx265-vbr to set constant quality for FDK-AAC encoder// Different kinds of rate controlCBR/VBR/CQP..... //Rate depends on content characteristics// 音頻選項-aframes number (output):設置number音頻幀輸出,是-frames:a的別名-ar[:stream_specifier] freq (input/output,per-stream):設置音頻采樣率。默認是輸出同于輸入。對于輸入進行設置,僅僅通道是真實的設備或者raw數(shù)據(jù)分離出并映射的通道才有效。對于輸出則可以強制設置音頻量化的采用率。-aq q (output):設置音頻品質(zhì)(編碼指定為VBR),它是-q:a的別名。-ac[:stream_specifier] channels (input/output,per-stream):設置音頻通道數(shù)。默認輸出會有輸入相同的音頻通道。對于輸入進行設置,僅僅通道是真實的設備或者raw數(shù)據(jù)分離出并映射的通道才有效。-an (output):禁止輸出音頻-acode codec (input/output):設置音頻解碼/編碼的編/解碼器,是-codec:a的別名// 字幕選項-scodec codec (input/output):設置字幕解碼器,是-codec:s的別名。例子

// Transcoding from one codec to another (e.g. H.264 using libx264):ffmpeg -i <input> -c:v libx264 output.mp4// Transmuxing from one container/format to another – without re-encoding:ffmpeg -i input.mp4 -c copy output.mkv// Cut a video from timestamp <start> for <duration>, or until <end>:ffmpeg -ss 00:01:50 -i <input> -t 10.5 -c copy <output>ffmpeg -ss 2.5 -i <input> -to 10 -c copy <output>// 使用 SPEED/QUALITY PRESETS IN X264 預置 presetffmpeg -i <input> -c:v libx264 -crf 23 -preset ultrafast -an output.mkvffmpeg -i <input> -c:v libx264 -crf 23 -preset medium -an output.mkvffmpeg -i <input> -c:v libx264 -crf 23 -preset veryslow -an output.mkv// map input streams to output, e.g. to add audio to a video:ffmpeg -i input.mp4 -i input.m4a -c copy -map 0:v:0 -map 1:a:0 output.mp4// scale - Scale to 320×240:ffmpeg -i <input> -vf "scale=w=320:h=240" <output>// paddingffmpeg -i <input> -vf "pad=1920:1080:(ow-iw)/2:(oh-ih)/2" <output>// Simple fade-in and fade-out at a specific time for a specific duration.ffmpeg -i <input> -filter:v "fade=t=in:st=0:d=5,fade=t=out:st=30:d=5" <output>// Complex system for printing text on videoffmpeg -i <input> -vf \\drawtext="text='Test Text':x=100:y=50:\\fontsize=24:fontcolor=yellow:box=1:boxcolor=red" \\<output>// Decode three video/audio streams and append to one another:ffmpeg -i <input1> -i <input2> -i <input3> -filter_complex \\ "[0:0][0:1][1:0][1:1][2:0][2:1]concat=n=3:v=1:a=1[outv][outa]" \\ -map "[outv]" -map "[outa]" <output> // Show a watermark in the top left corner between seconds 1 and 2 onlyffmpeg -i <video> -i <watermark> -filter_complex \\ "[0:v][1:v]overlay=10:10:enable='between(t,1,2)'[outv]" \\ -map "[outv]" <output>

以上就是關(guān)于pos機入門系統(tǒng),FFmpeg 入門的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機入門系統(tǒng)的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://m.afbey.com/news/32486.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實,本站將立刻刪除。