[英]FFMPEG to trim off last 3 seconds of videos
我正在嘗試使用 FFMPEG 修剪/切斷視頻的最后 3 秒,但這確實令人頭疼。
以下代碼修剪但僅保留最后 3 秒。 我不想保留 3 秒,我不需要那個,我想保留已刪除的部分。
ffmpeg -sseof -3 -i input.mp4 output.mp4
有人可以幫我提供正確的代碼嗎? 我還想請求一個批處理代碼,該代碼將自動修剪我文件夾中所有最后 3 秒的視頻。 謝謝您的幫助。
用
ffmpeg -i input.mp4 -ss 3 -i input.mp4 -c copy -map 1:0 -map 0 -shortest -f nut - | ffmpeg -f nut -i - -map 0 -map -0:0 -c copy out.mp4
我不認為 ffmpeg 在持續時間內允許“從結束”規范。 您必須自己檢測視頻的持續時間並減去 3 秒。
ffprobe -i input.mp4 -show_entries format=duration -v quiet -of csv="p=0"
您可以在腳本中執行此操作。 例如在 bash 中:
dur=$(ffprobe -i input.mp4 -show_entries format=duration -v quiet -of csv="p=0")
trim=$((dur - 3))
ffmpeg -t $trim -i input.mp4 output.mp4
為了方便起見,這是一個 bash 腳本(添加到上面的答案):
#!/bin/bash
# Arguments
FILE_RAW=$1
TRIM_EOF_DURATION=${2:-1.0} # Default is 1.0 second trimmed from EOF
# Prepare variables
BASE_PATH=$(dirname $(readlink -f $FILE_RAW))
FILENAME_EXT="$(basename "${FILE_RAW}")"
FILENAME_ONLY="${FILENAME_EXT%.*}"
EXT_ONLY="${FILENAME_EXT#*.}" # Or hardcode it like "mp4"
FILENAME_ONLY_PATH="${BASE_PATH}/${FILENAME_ONLY}"
# Trim EOF duration
INPUT_DURATION=$(ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 "${FILENAME_ONLY_PATH}.${EXT_ONLY}")
OUTPUT_DURATION=$(bc <<< "$INPUT_DURATION"-"$TRIM_EOF_DURATION")
ffmpeg -i "${FILENAME_ONLY_PATH}.${EXT_ONLY}" -map 0 -c copy -t "$OUTPUT_DURATION" "${FILENAME_ONLY_PATH}_Trim_${TRIM_EOF_DURATION}.${EXT_ONLY}"
注意:使腳本可執行: chmod +x trim_video.sh
用法(輸出文件: <PATH_TO_INPUT_VIDEO>_Trim_<TRIM_EOF_DURATION>.mp4
)
. <PATH_TO_THIS_SCRIPT>/trim_video.sh <PATH_TO_INPUT_VIDEO> <OPTIONAL_TRIM_EOF_DURATION>
示例:從 EOF 修剪 3.0 秒(輸出: ~/Videos/input_video_Trim_3.0.mp4
)
. ~/trim_video.sh ~/Videos/input_video.mp4 3.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.