根據編輯清單剪切影片的腳本

根據編輯清單剪切影片的腳本

我有一堆足球隊賽季的比賽錄像,我給每個隊友分配了一場比賽,讓他們觀看並記下精彩場面發生的時間間隔。

現在,我不想手動刪除所有這些內容,而是想編寫一個腳本來為我完成此操作。我熟悉 shell 腳本、python 和 ruby​​。

你們有人知道有什麼好的影片編輯工具可以幫助自動化這項任務嗎?我希望能夠將間隔放入一個簡單的輸入檔中,以便我的隊友可以使用。

答案1

為此,您需要 FFmpeg(下載靜態建構)和重擊。

建立類似 CSV 的輸入和輸出點列表,例如:

00:01:00,00:02:00
00:03:00,00:03:02

然後,您可以執行以下 Bash 腳本將影片分割成各個部分:

#!/usr/bin/env bash

if [[ $# -ne 2 ]]; then
  echo "Usage: $0 <input> <editList>"
  exit 1
fi

inputFile=$1
editFile=$2

inputFileBase="${inputFile%.*}"
extension="${inputFile##*.}"

cnt=0
while IFS=, read -r start end; do
  suffix="$(printf "%05d" $cnt)"
  outfile="${inputFileBase}-${suffix}.${extension}"
  ffmpeg -nostdin -ss "$start" -i "$inputFile" -to "$end" -c copy -map 0 "$outfile"
  cnt=$((cnt+1))
done < "$editFile"

將此文件另存為cut.sh(或類似文件),然後運行:

chmod +x cut.sh
./cut.sh /path/to/input.mp4 /path/to/editList.csv

它將視訊和音訊位元流複製到輸出文件,並使用後綴按順序編號0000100002依此類推。


下面是舊答案...

我曾經寫過一個 Ruby 腳本,它正是這樣做的。你需要 Ruby ≥1.9.2 (例如透過右室VM)和最新版本FFmpeg已安裝(參見這裡關於如何從來源安裝)。

  1. 我的腳本可以在這裡找到:video-extract.rb

  2. 您需要向其提供 CSV 輸入編輯列表,最重要的是包含以下列:

  • 前綴(可為空)
  • 視訊 ID(某個序號)
  • 輸入檔名
  • HH:MM:SS.ms以秒為單位的入點
  • 編輯的長度(以秒為HH:MM:SS.ms單位)

例如(請注意該Out列未使用):

  1. 然後,調整腳本標題中的變數。最重要的是,如果您想要位元流副本並且不需要重新編碼,請更改COPY為。true也要更改 CSV 列的索引和 CSV 分隔符號。

請隨意改進腳本或提出更改建議(特別是如果您已經了解 Ruby)。我經常使用這個腳本,但還沒有遇到問題。唯一缺少的是適當的音訊支援 - 它只會複製音訊串流,這可能會或可能不會在您的情況下工作。如果遇到麻煩,請回來報告。

如果您需要計算入點和出點之間的差異,您可以使用這個基於 Ruby 的小腳本來完成此操作這個堆疊溢位問答:

require "Time"
def time_diff(time1_str, time2_str)
  t = Time.at( Time.parse(time2_str) - Time.parse(time1_str) )
  (t - t.gmt_offset).strftime("%H:%M:%S.%L")
end
ins, outs, diffs = File.open("ins.txt"), File.open("outs.txt"), File.new("diffs.txt", "w")
inlines, outlines = [], []
ins.each  { |l| inlines << l }
outs.each { |l| outlines << l }
inlines.zip(outlines).each { |ins, outs| diffs.puts time_diff(ins, outs) }
diffs.close

您只需建立一個名為ins.txtand的文件,outs.txt其中每一行對應一個入點和出點(請參見上面的螢幕截圖)。差異將被寫入diffs.txt。就那麼簡單。

答案2

MEncoder 是您的朋友。它是用於視訊腳本操作的絕佳工具。我經常使用它來從各個幀創建視訊檔案。

我發現這個 Perl 腳本可能完全符合您的要求:Video Cutter V2:使用 Mencoder 進行視訊切割

答案3

嘗試ffmpeg

例如:

ffmpeg -i original.mpg -ss 20 -t 30 newmovie.mpg

將開啟原始影片檔案 ( -i original.mpg),跳過前 20 秒 ( -ss 20),然後將 30 秒 ( -t 30) 儲存到一個名為newmovie.mpg

相關內容