
我正在嘗試連接同一輸入影片的各個部分,但其中一個速度加快了 20 倍。我正在使用的程式碼是這樣的:
ffmpeg -i 7.mp4 -filter_complex "[0:v]select='between(t,0,9)',setpts=PTS-STARTPTS[vn];[0:a]aselect='between(t,0,9)',asetpts=PTS-STARTPTS[an];[0:v]select='between(t,191,1174)',setpts=(1/20)*(PTS-STARTPTS)[vr];[0:a]aselect='between(t,191,1174)',atempo=20,asetpts=PTS-STARTPTS[ar];[vn][an][vr][ar]concat=n=2:v=1:a=1[vid]" -map [vid] -c:v libx265 -tag:v hvc1 -crf 23 -preset slow "output5.mp4"
知道我做錯了什麼嗎,關於無法分配內存部分我有 16 GB 內存並且只運行 ffmpeg....
錯誤:
[h264 @ 00000181d923ccc0] get_buffer() failed
[h264 @ 00000181d923ccc0] thread_get_buffer() failed
[h264 @ 00000181d923ccc0] decode_slice_header error
[h264 @ 00000181d923ccc0] no frame!
[fc#0 @ 00000181d91dbdc0] Task finished with error code: -12 (Cannot allocate memory)peed=0.0342x
[fc#0 @ 00000181d91dbdc0] Terminating thread with return code -12 (Cannot allocate memory)
[vist#0:0/h264 @ 00000181db1bbcc0] [dec:h264 @ 00000181d91e4680] Error submitting packet to decoder: Invalid data found when processing input
答案1
它看起來像是 FFmpeg 中的一個錯誤,與視訊自身連接有關。
可能的解決方法是使用相同的輸入檔兩次(就好像它是兩個輸入檔一樣):
ffmpeg -i 7.mp4 -i 7.mp4 -filter_complex "[0:v]select='between(t,0,9)',setpts=PTS-STARTPTS[vn];[0:a]aselect='between(t,0,9)',asetpts=PTS-STARTPTS[an];[1:v]select='between(t,191,1174)',setpts=(1/20)*(PTS-STARTPTS)[vr];[1:a]aselect='between(t,191,1174)',atempo=20,asetpts=PTS-STARTPTS[ar];[vn][an][vr][ar]concat=n=2:v=1:a=1[vid]" -map [vid] -c:v libx265 -tag:v hvc1 -crf 23 -preset slow "output5.mp4"
以下解釋只是一個猜測:
當連接相同輸入的兩個部分時,我認為在某些情況下 FFmpeg 在記憶體中儲存許多解碼幀(緩衝幀)。緩衝的目的是為了避免多次解碼相同的幀。當兩次使用相同的輸入時,每個輸入都會單獨解碼(避免緩衝)。我不確定緩衝機制,但它可能解釋“無法分配記憶體”錯誤。