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
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 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.
視頻文件切片類似於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
沒有留言:
張貼留言