demuxer:解封裝,將音視頻流進行分離,獲得音視頻編碼後的數據。
muxer:封裝,將音視頻流編碼後的數據合於一體。
decoder:解碼。web
# -f:指定從使用mac的avfoundation採集數據。 # -i:就是input,輸入流,後面的1是設備編號,表示屏幕(錄屏) i處理輸入流)。 # -r:指定幀率,通常來講25幀就比較流暢,15幀就勉強夠用了。 # out.yuv:採集後的數據保存成yuv格式,這是一種原始格式的數據,比較大。 ffmpeg -f avfoundation -i 1 -r 30 out.yuv
播放視頻:shell
# -s 指定分辨率 # -pix_fmt 指定原始視頻格式 ffplay -s 2560*1600 -pix_fmt uyvy422
採集音頻ide
# 冒號以前表明視頻設備,冒號以後就表明音頻設備 ffmpeg -f avfoundation -i :1 out.wav
播放音頻svg
# 這裏因爲是有格式的音頻數據,直接播放就能夠了。
ffplay out.wav
用於更換多媒體數據的格式(封裝格式)
解複用 - 本質是音視頻數據的分離。
複用 - 將音視頻數據從新封裝。
轉換音視頻格式編碼
# -vcodec 視頻解複用 # -acodec 音頻解複用 # copy 表示不更改變解複用後的編碼格式,徹底copy ffmpeg -i test.mp4 -vcodec copy -acodec copy out.flv
提取視頻流spa
# -an 表示不要音頻流
ffmpeg -i test.mp4 -an -vcodec copy out.h264
提取音頻流3d
ffmpeg -i test.mp4 -acodec copy -vn out.h264
提取視頻原數據code
# -c:v 對視頻進行解碼,使用的編解碼器是 rawvideo # -pix_fmt 每一幀圖像編碼爲 yuv 4:2:0 ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
播放視頻原數據
上面有提到,略:視頻
提取音頻原數據server
# -ar 即 audio read,音頻採樣率爲44100 # -ac 即 audio channel,聲道,ac2表示雙聲道 # -f 抽取出的音頻pcm數據的格式,s16le s表示有符號,16位,le-little end 表示小頭。 ffmpeg -i out.mp4 -vn -ar 44100 ac 2 -f s16le out.pcm
播放音頻原數據
ffplay -ar 44100 -ac 2 -f s16le out.pcm
# -vf 指定濾鏡 # crop,一個濾鏡的名字,=後面是參數,in_w 表示寬度減小200,in_h表示高度減小200 # -c:v 指定使用的編解碼器,前面有說過 # -c:a copy 不對音頻作處理 ffmpeg -i test.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4
裁剪:
# -ss 裁剪的時間點 # -t 裁剪的時長,以秒爲單位 ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts
合併:
# -f concat 表示要對後面的文件進行拼接 # -i 指定輸入文件,inputs.txt 中是一個文件列表,指定了要拼接的視頻 # out.flv 輸出 ffmpeg -f concat -i inputs.txt out.flv
其中,inputs.txt中文件的格式爲
file '1.mp4' file '2.mp4'
加上copy,會使用當前的編碼方式,不會執行解碼的流程,速度更快:
ffmpeg -f concat -i files.txt -c copy output.mp4
視頻轉圖片
# -r 1 表示一秒鐘轉一張圖片 # -f 指定轉出文件格式,這裏爲image2 # image-%3d.jpeg 表示圖片名,%3d表示圖片編號由3個數字組成。 ffmpeg -i in.flv -r 1 -f image2 image-%3.jpeg
圖片轉視頻
ffmpeg -i image-%3d.jpeg out.mp4
直播推流
#-c 音視頻編解碼,-a是音頻編解碼 -v是視頻編解碼 #-f 指定格式 #-re 表示幀率和真正的幀率保持同步 ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName
直播拉流
ffmpeg -i rtmp://server/live.streamName -c copy dump.flv