2021年11月3日 星期三

ffmpeg 分段錄影

 

rm /www/pages/raid/Record/stream*.mp4

src_address="rtsp://richard:Aa123456@192.168.1.119:8554/live"

./ffmpeg -rtsp_transport tcp -i "${src_address}" -c copy -f segment -segment_time 20 -reset_timestamps 1  -strftime 1 /www/pages/raid/Record/stream%Y%m%d_%H%M%S.mp4 -y


segment_times times

Specify a list of split points. times contains a list of comma separated duration specifications, in increasing order. See also the segment_time option.

reset_timestamps 1|0

Reset timestamps at the beginning of each segment, so that each segment will start with near-zero timestamps. It is meant to ease the playback of the generated segments. May not work with some combinations of muxers/codecs. It is set to 0 by default.


https://www.ffmpeg.org/ffmpeg-formats.html#segment_002c-stream_005fsegment_002c-ssegment


http://www.tangzhe.name/blog-6408.html



視頻文件切片類似於hls切片,但是hls切片只支持ts格式。ffmpeg剪切視頻有兩種方式:一個是segment,一個是ss和t。segment類似於hls切片,ss和t主要用於在一個視頻上截取一段出來。


部分

可用參數:








segment_format 指定切片文件的格式

HLS切片的格式主要為MPEGTS文件格式,在segment中,可以根據segment_format來指定切片文件的格式,其既可以為MPEGTS切片,也可以為MP4切片,還也可以為FLV切片等

ffmpeg -re -i input.mp4 -c -copy -f segment -segment_format mp4 output-%d.mp4


segment_list與segment_list_type 指定切片索引列表

使用segment切割文件時,不僅僅可以切割MP4,同樣也可以切割TS或者FLV等文件,生成的文件索引列表名稱也可以指定名稱,索引不僅僅支持M3U8,也可以是其他的格式。

生成ffconcat格式索引文件:

ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_type ffconcat -segment_list output.lst output-%d.mp4

ffconcat格式常見於虛擬輪播等場景。

生成FLAT格式索引文件

ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_type flat -segment_list output.txt output-%d.mp4

生成CSV格式索引文件

ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_type csv -segment_list output.csv output-%d.mp4

CSV文件可以用類似於操作數據庫的方式進行操作,也可以根據CSV生成視圖圖像。

生成M3U8格式索引文件

ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_type m3u8 -segment_list outmut.m3u8 output-%d.mp4

 使用segment輸出的m3u8文件與使用hls模塊生成的基本相同,沒什麼區別。


segment_times 自定義時間點剪切

對文件進行切片時,有時候需要均勻的切片,有時候需要按照指定的時間長度進行切片,segment可以根據指定的時間點進行切片:

ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_times 3,9,12 output-%d.mp4

以上命令,切片的時間點分別為第3秒、第9秒和第12秒,在這三個時間點進行切片。


ss與t

在FFmpeg中,使用ss和t可以進行視頻文件的seek定位。


從第十秒開始截取

ffmpeg -ss 10 -i input.mp4 -c copy output.ts


截取前十秒視頻

除了可以指定開始截取位置,還可以指定截取數據的長度,FFmpeg的t參數可以指定截取的視頻長度,例如截取input.mp4文件的前10秒的數據:

ffmpeg -i input.mp4 -c copy -t 10 -copyts output.mp4


從第十秒開始截取60秒視頻

FFmpeg支持ss與t兩個參數一同使用以達到切割視頻的某一段的效果,但其並不能指定輸出文件的start_time,而且也不希望時間戳歸0,可以使用output_ts_offset來達到指定輸出文件的start_time的目的:

ffmpeg -i input.mp4 -c copy -t 60 -output_ts_offset 10 output.mp4



沒有留言: