ffmpeg-将多个视频切片成一个新的视频
使用 ffmpeg 工具可以轻松完成将多个视频切片合并为一个新的视频。以下是实现这一目标的具体步骤和命令。
步骤概览
1、将多个视频切片。
2、创建文本文件列出切片的视频片段。
3、使用 ffmpeg 合并这些切片为一个新的视频。
一:安装 ffmpeg
确保你的系统中已经安装 ffmpeg。如果未安装,可以通过以下方式安装:
Windows
下载 ffmpeg官网(https://ffmpeg.org/download.html) 提供的二进制文件。
将 ffmpeg.exe 添加到系统环境变量。
Linux
使用包管理器安装:
sudo apt update
sudo 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[@]}; do
ffmpeg -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[@]}); do
echo "file 'slice$i.mp4'" >> file_list.txt
done
# 合并视频片段
ffmpeg -f concat -safe 0 -i file_list.txt -c copy output.mp4
echo "合并完成,生成视频:output.mp4"
问题与注意事项
拼接失败报错:concat format is not supported
视频编码格式或分辨率不一致会导致此问题。
使用重新编码方式解决(见“重新编码合并”)。
切片视频不同步
使用 -c copy 时,只能合并具有相同时间戳格式的视频。
添加标志 -reset_timestamps 1 处理时间戳问题。
音频处理问题
如果音频部分需要统一,则建议重新编码并使用统一的音频采样率和音频编码器。