如果視頻文件太大父叙,因為項目原因需要拆分成多個文件,如下顶籽,就可以拆分視頻
ffmpeg -ss [start] -t [duration] -accurate_seek -i [in].mp4 -codec copy [out].mp4
[start]
:為需要截取內(nèi)容的開始時間
[duration]
:為需要截取的時長
[in]
:為輸入視頻文件名
[out]
:為輸出視頻文件名
這種截取的好處是特別快玩般,因為不會對視頻重新編碼,但是這種方式會導致:如果視頻結(jié)尾不是關鍵幀礼饱,那么視頻最后就會出現(xiàn)一段空白坏为。
這個時候,你可以加入-avoid_negative_ts 1
變成這樣:
ffmpeg -ss [start] -t [duration] -accurate_seek -i [in].mp4 -codec copy -avoid_negative_ts 1 [out].mp4
這樣截取視頻之后镊绪,時間不會精確截取匀伏,他會找到附近對關鍵幀,補全這個視頻蝴韭,但是這樣也會有問題够颠,連續(xù)分割的視頻之間存在細微的交集。
最后詳細看了下FFmpeg的文檔榄鉴,如果你需要精確截取視頻履磨,避免關鍵幀的丟失并精確截取時間,這個時候最好是重新編碼視頻庆尘。就變成這樣了:
ffmpeg -ss [start] -t [duration] -i [in].mp4 -c:v libx264 -c:a aac -strict experimental -b:a 98k [out].mp4
最后剃诅,你可以寫一段腳本,把整個視頻拆分:
import os
import json
with open("timeline.json") as f:
times = json.loads(f.read())
times = times["timeline"]
for i in range(len(times)):
start = times[i]["time"]
try:
length = times[i+1]["time"] - times[i]["time"]
except:
length = 1000
os.system('ffmpeg -ss %s -i small.mp4 -t %s -c:v libx264 -c:a aac -strict experimental -b:a 98k %s.mp4' % (start,length,str(i+1)))