為什麼 ffmpeg 不縮短這個影片?

為什麼 ffmpeg 不縮短這個影片?

我正在嘗試將影片的速度加倍。

我使用以下命令:

ffmpeg -i output.mp4 -filter:v "setpts=0.5*PTS" output2.mp4

ffmpeg -i output.mp4 -vf "setpts=0.5*PTS" output3.mp4

我在網路上發現這是標準方法。

但是,我的所有文件的長度都相同:

joe@joe-Amd-Am4-Home-Office:~$ for file in *.mp4; do duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file"); echo "$file: $duration seconds"; done
output2.mp4: 373.014000 seconds
output3.mp4: 373.014000 seconds
output.mp4: 373.014000 seconds

發生了什麼事以及如何正確加快影片速度?我用的是ubuntu。

答案1

我的第一個猜測是 PTS 方法,記錄在案這裡,「透過改變每個視訊幀的呈現時間戳記(PTS)」來工作,玩家會尊重並加快速度。但這或許並沒有改變報道所看到的視頻長度ffprobe

但擺弄我隨機測試的 mp4 表明,雖然視訊加速了,但音訊卻沒有。這可以解釋為什麼我也透過 看到每個影片都有相同的時間戳記ffprobe。這與上面連結的文檔中的註釋一致:

請注意,在以下範例中,音訊串流未更改,因此最好使用 停用它-an

另一個答案超級用戶提供以下複雜的濾鏡來加速視訊和音訊:

ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv

那個對我有用,透過顯示一半的長度ffprobe

相關內容