2017-05-03 80 views
0

我正在從4K視頻中提取和轉碼剪輯。 我已經知道從哪裏開始以及剪輯應該持續多久。在管道中使用ffmpeg -sseof

我使用下面的命令來提取我需要夾子(30秒到視頻,我需要10秒剪輯)
ffmpeg -ss 30 -i 'input.mp4' -c copy -t 10 -f matroska 'output.mp4'

爲了使視頻保留關鍵幀,所以它知道要畫什麼,剪輯可以超過10秒(這是預期的)

然後我可以使用以下代碼對視頻進行轉碼,並確保它只需要最後10秒(具體來說就是sseof命令)
ffmpeg -sseof -10 -i 'output.mp4' -vcodec libx264 -r 15 -s 720x400 -aspect 720:400 -sn -f matroska -acodec libmp3lame -ac 2 -ar 11025 -y 'transcoded.mkv'

由於緩慢的文件系統,我想避免將提取的剪輯寫入磁盤的第一步,我可以使用管道執行此操作,並且只是在運行時進行轉碼。
ffmpeg -ss 30 -i 'input.mp4' -c copy -t 10 -f matroska pipe:1 | ffmpeg -i pipe:0 -vcodec libx264 -r 15 -s 720x400 -aspect 720:400 -sn -f matroska -acodec libmp3lame -ac 2 -ar 11025 -y 'transcoded.mkv'

然而,隨着管我不能使用-sseof命令,因爲它只是使一個無效的視頻剪輯文件。 (沒有來自日誌的錯誤或警告)

我目前的解決方案是再次對轉碼後的視頻片段進行轉碼,並且只花費最後10秒。 (但這似乎是一個糟糕的解決方法,而不是一個真正的解決方案)

由於這是我第一次使用ffmpeg,我想知道是否有可能通過管道拍攝視頻的最後10秒?或者也許有人對此有更好的解決方案?

回答

0

也許我失去了一些東西,但你需要的是

ffmpeg -ss 30 -i 'input.mp4' -t 10 -vcodec libx264 -r 15 -s 720x400 -aspect 720:400 
     -acodec libmp3lame -ac 2 -ar 11025 -sn -f matroska -y 'transcoded.mkv' 
+0

出於某種原因,如果輸入文件是'.mkv'或'.ts'文件,它實際上將轉碼的前30秒即使它設置爲跳過它們。 (或者至少這是如果我檢查CPU並查看其負載的情況)但是,如果該文件是「.mp4」,則它按預期工作。不幸的是我必須能夠處理所有3種文件類型。 – Thrasd

+0

正如預期的那樣在TS和MKV中工作。 – Mulvya

+0

如果我使用這個文件作爲輸入[4ksamples](http://4ksamples.com/elysium-2013-2160p-1-minute-sample-footage/),設置'-ss 0'大約需要8秒,而' SS 45'大概需要14秒(在我的機器上)。這是跳躍45秒的相當大的增加。我是否誤解了某些東西,或者它是否會像這樣工作? – Thrasd