使用 ffmpeg 工具可以輕松完成將多個視頻切片合并為一個新的視頻。以下是實現這一目標的具體步驟和命令。
步驟概覽
1、將多個視頻切片。
2、創建文本文件列出切片的視頻片段。
3、使用 ffmpeg 合并這些切片為一個新的視頻。
一:安裝 ffmpeg
確保你的系統中已經安裝 ffmpeg。如果未安裝,可以通過以下方式安裝:
Windows
下載 ffmpeg官網(https://ffmpeg.org/download.html) 提供的二進制文件。
將 ffmpeg.exe 添加到系統環境變量。
Linux
使用包管理器安裝:
sudo apt updatesudo apt install ffmpeg
Mac
使用 Homebrew 安裝:
brew install ffmpeg
安裝完成后,運行以下命令檢查版本:
ffmpeg -version
二:將多個視頻切片
假設需要將不同視頻文件切片為多個片段,可以針對每個視頻執行以下截取命令:
命令示例:截取視頻
ffmpeg -i input1.mp4 -ss 00:00:10 -t 00:00:05 -c copy slice1.mp4
ffmpeg -i input2.mp4 -ss 00:00:20 -t 00:00:10 -c copy slice2.mp4
ffmpeg -i input3.mp4 -ss 00:01:00 -t 00:00:08 -c copy slice3.mp4
解釋:
-i inputX.mp4:指定源視頻文件。
-ss 00:00:10:從視頻的第 10 秒開始截取。
-t 00:00:05:截取時長為 5 秒。
-c copy:使用無損方法進行切割(避免重新編碼)。
這段命令會從不同的視頻源中分別獲取特定片段并保存為 slice1.mp4、slice2.mp4 等切片文件。
三. 創建列舉視頻片段的列表文件
ffmpeg 需要一個文本文件來列舉參與合并的所有視頻切片。可以按如下格式創建一個文件,例如命名為 file_list.txt:
file 'slice1.mp4'
file 'slice2.mp4'
file 'slice3.mp4'
注意:
每一行使用 file 開頭,后面是文件名并用單引號包裹。
文件路徑支持絕對路徑。如果使用相對路徑,則 file_list.txt 需要與切片文件位于相同目錄。
四、 使用 ffmpeg 合并切片視頻
無重新編碼合并
如果所有視頻切片的編碼格式一樣(如同樣為 H.264 編碼)且分辨率一致,可直接合并:
ffmpeg -f concat -safe 0 -i file_list.txt -c copy output.mp4
解釋:
-f concat:指定要進行“文件拼接”的操作。
-safe 0:允許對路徑中帶特殊字符的文件處理。
-i file_list.txt:輸入文件列表。
-c copy:直接拼接而不重新編碼(速度更快、無損)。
重新編碼合并
若視頻切片格式或分辨率不一致,可以選擇重新編碼合并:
ffmpeg -f concat -safe 0 -i file_list.txt -c:v libx264 -preset fast -crf 23 -c:a aac output.mp4
解釋:
-c:v libx264:指定視頻編碼器為 H.264(使用較高兼容性)。
-crf 23:視頻質量參數(可選,范圍 0-51,數值越小質量越高)。
-c:a aac:設置音頻編碼為 AAC。
-preset fast:規定編碼的速度等級(如 ultrafast, slow 等)。
五. 合并完成后測試輸出視頻
合并完成后,可以播放并檢查生成的視頻:
ffplay output.mp4
或使用系統自帶的視頻播放器打開 output.mp4。
六、高級功能:自動批量處理
如果需要從大量視頻中截取多個片段并合并,可以使用腳本自動化這一流程。以下是一個簡單的 Bash 腳本示例:
#!/bin/bash# 要處理的視頻列表
videos=("input1.mp4" "input2.mp4" "input3.mp4")# 截取片段
for i in ${!videos[@]}; doffmpeg -i "${videos[$i]}" -ss 00:00:05 -t 00:00:10 -c copy "slice$((i+1)).mp4"
done# 創建拼接列表文件
echo > file_list.txt
for i in $(seq 1 ${#videos[@]}); doecho "file 'slice$i.mp4'" >> file_list.txt
done# 合并視頻片段
ffmpeg -f concat -safe 0 -i file_list.txt -c copy output.mp4echo "合并完成,生成視頻:output.mp4"
問題與注意事項
拼接失敗報錯:concat format is not supported
視頻編碼格式或分辨率不一致會導致此問題。
使用重新編碼方式解決(見“重新編碼合并”)。
切片視頻不同步
使用 -c copy 時,只能合并具有相同時間戳格式的視頻。
添加標志 -reset_timestamps 1 處理時間戳問題。
音頻處理問題
如果音頻部分需要統一,則建議重新編碼并使用統一的音頻采樣率和音頻編碼器。