ffmpeg使用tee實現單次編碼多路輸出
tee簡介
首先貼一下官方手冊的連結:https://ffmpeg.org/ffmpeg-formats.html#tee
tee muxer可以將相同的資料寫到多個檔案或者其它的muxer。例如:它可以同時將一路視訊流輸出到網路和本地磁碟。與ffmpeg的預設多路輸出不同的是,用tee只編碼一次。
語法
和普通的ffmpeg命令列相比,使用tee主要是兩點區別:
1.主幹的'-f'指定'tee';
2.輸出路徑是由'|'分隔的各個路徑集合。
#例如:
ffmpeg -i input.file -acodec aac -vcodec h264 -f tee -map 0:v -map 0:a "tee1.mp4|tee2.flv"
具體的,tee還支援一些引數:
f
直接指定封裝格式。有的時候靠ffmpeg根據輸出路徑猜封裝格式是不牢靠的,直接指定格式,簡單暴力。
bsfs[/spec]
設定位元率過濾器。
select
選擇指定的流輸出,預設是使用全部流(主幹)。
例項
# 1. 單路輸入,輸出一路mp4本地,一路TS over UDP (其中TS over UDP需要指定格式)
ffmpeg -re -i Meerkats.mp4 -acodec aac -vcodec h264 -f tee -map 0:v -map 0:a "tee1.mp4|[f=mpegts]udp://10.33.2.27:9999"
# 2. 使用ffmpeg進行編碼,實現單路輸入,四路輸出(一路rtmp,一路ts,一路mp4,一路aac)。
ffmpeg -re -i Meerkats.mp4 -acodec aac -vcodec h264 -flags +global_header -strict experimental -f tee -map 0:v -map 0:a "[f=flv]rtmp://10.33.1.48/live1/tee1|[bsfs/v=dump_extra]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac"