ffmpeg-将多个视频去掉音频 然后切片组合成一个视频,再将新视频配置上新的音频

发布于:2025-04-22 ⋅ 阅读:(19) ⋅ 点赞:(0)

需求分解
1、去除原视频的音频轨道。
2、对去掉音频的视频进行切片。
3、将多个视频切片合并为一个新视频。
4、给新的视频添加新的音频轨道。

  1. 去除视频音频
    要去除视频中的音频,只需使用以下命令
ffmpeg -i input1.mp4 -an -c:v copy output1_no_audio.mp4

解释:
-i input1.mp4:输入原始视频。
-an:移除音频轨道。
-c:v copy:保持源视频的编码格式,无需重新编码。
output1_no_audio.mp4:输出无音频的视频。
对多个视频执行这一操作:

ffmpeg -i input1.mp4 -an -c:v copy output1_no_audio.mp4
ffmpeg -i input2.mp4 -an -c:v copy output2_no_audio.mp4
ffmpeg -i input3.mp4 -an -c:v copy output3_no_audio.mp4

结果:output1_no_audio.mp4 等视频文件将保留视频画面,但没有音频。

  1. 切片视频
    假设需要从无音频的视频中截取特定片段,可以用以下命令完成视频切片:
ffmpeg -i output1_no_audio.mp4 -ss 00:00:10 -t 00:00:05 -c copy slice1.mp4
ffmpeg -i output2_no_audio.mp4 -ss 00:00:00 -t 00:00:08 -c copy slice2.mp4
ffmpeg -i output3_no_audio.mp4 -ss 00:00:15 -t 00:00:04 -c copy slice3.mp4

解释:
-ss 00:00:10:表示从第 10 秒开始切片。
-t 00:00:05:表示切片长度为 5 秒。
切片会分别保存为 slice1.mp4、slice2.mp4、slice3.mp4。

  1. 合并多个切片视频
    合并切片前,需要创建一个包含切片文件列表的文本文件,例如 file_list.txt:
file 'slice1.mp4'
file 'slice2.mp4'
file 'slice3.mp4'

然后,运行以下命令合并切片:

ffmpeg -f concat -safe 0 -i file_list.txt -c copy combined_video.mp4

解释:
-f concat:指定文件拼接操作。
-safe 0:解决文件名路径问题。
-i file_list.txt:输入文件列表。
-c copy:直接拼接而不重新编码。
结果:combined_video.mp4 是一个合并后的无音频视频。

  1. 为新视频添加新的音频
    假设你的新音频文件是 new_audio.mp3,现在添加该音频到 combined_video.mp4:
ffmpeg -i combined_video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -strict experimental final_video_with_audio.mp4

解释:
-i combined_video.mp4:输入合并后的无音频视频。
-i new_audio.mp3:输入新的音频文件。
-c:v copy:保持视频轨道不重新编码。
-c:a aac:将音频编码为 AAC 格式。
final_video_with_audio.mp4:输出带新音频的视频。
如果需要精确对齐新音频与视频的时长,可以通过调整音频长度或循环音频:

ffmpeg -stream_loop -1 -i new_audio.mp3 -i combined_video.mp4 -c:v copy -shortest -c:a aac final_video_with_audio.mp4

解释:
-stream_loop -1:将音频循环,确保音频长度可以覆盖整个视频。
-shortest:确保输出视频与较短的输入(视频或音频)对齐。

  1. 处理不同的音频采样率或码率
    如果音频需要重新调整采样率或码率,可以添加参数:
ffmpeg -i combined_video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -b:a 192k final_video_with_audio.mp4

解释:
-b:a 192k:将新音频的码率设置为 192 kbps。

完整脚本示例

#!/bin/bash

# 去除音频轨道
ffmpeg -i input1.mp4 -an -c:v copy output1_no_audio.mp4
ffmpeg -i input2.mp4 -an -c:v copy output2_no_audio.mp4
ffmpeg -i input3.mp4 -an -c:v copy output3_no_audio.mp4

# 视频切片
ffmpeg -i output1_no_audio.mp4 -ss 00:00:10 -t 00:00:05 -c copy slice1.mp4
ffmpeg -i output2_no_audio.mp4 -ss 00:00:00 -t 00:00:08 -c copy slice2.mp4
ffmpeg -i output3_no_audio.mp4 -ss 00:00:15 -t 00:00:04 -c copy slice3.mp4

# 创建文件列表
echo "file 'slice1.mp4'" > file_list.txt
echo "file 'slice2.mp4'" >> file_list.txt
echo "file 'slice3.mp4'" >> file_list.txt

# 合并视频切片
ffmpeg -f concat -safe 0 -i file_list.txt -c copy combined_video.mp4

# 添加新音频
ffmpeg -i combined_video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -shortest final_video_with_audio.mp4

echo "处理完成!最终视频文件:final_video_with_audio.mp4"

保存该脚本ffmpeg.sh 然后执行

bash ffmpeg.sh

注意事项
1、视频与音频时长匹配:
如果音频比视频短,使用 -stream_loop 让音频循环。
如果音频比视频长,使用 -shortest 截取音频。

2、音频编码兼容性:
建议使用 aac 或者 mp3 编码作为最终输出格式,以保证兼容性。

3、无损处理 vs 重新编码:
使用 -c copy 时,避免不必要的画质损失,但要求输入输出的编码格式一致。
如果需要适配格式差异,可以重新编码。


网站公告

今日签到

点亮在社区的每一天
去签到