FFMpeg 将特定时间的视频和音频合并到另一个视频中
FFMpeg merge video and audio at specific time into another video
我有一个标准的mp4(音频+视频)
我正在尝试将 1.4 秒的迷你 mp4 剪辑合并到此曲目中,将视频替换为迷你剪辑的长度,但在特定时间将音频合并在一起
有人知道如何使用 ffmpeg 做到这一点吗?
我尝试了很多不同的过滤器,但似乎无法得到我想要的
V <------->
miniclip.mp4 A <=======>
V <-----------> ↓ + ↓ <--->
standard.mp4 A <=========================>
已编辑(现在我理解了问题):
First Get 1.4 seconds of standard.mp4 and audio1.mp3
-ss 是获取长度为 1.4 秒的小视频的开始(使用 -t 选项您可以指定持续时间,在本例中为 1.4 秒)摘要:从 min 5, 1.4 秒开始剪切视频
-an 用于音频 none 复制,因为您要添加新的 audio1.mp3
video_only.mp4
ffmpeg -ss 00:05:00 -i standard.mp4 -t 1.4 -map 0:v -c copy -an small_only_video.mp4
audio_only.mp4
ffmpeg -ss 00:05:00 -i audio1.mp3 -t 1.4 -c copy small_only_audio.mp3
现在您可以创建 small_clip_audiovideo.mp4
ffmpeg -i small_only_video.mp4 -c:a mp3 -i small_only_audio.mp3 -c copy -map 0:v -map 1:a:0 -disposition:a:0 default -disposition:a:1 default -strict -2 -sn -dn -map_metadata -1 -map_chapters -1 -movflags faststart small_clip_audiovideo.mp4
在时间戳 5 处显示 miniclip.mp4
(1.4 秒长)的示例。
ffmpeg -i main.mp4 -i miniclip.mp4 -filter_complex "[0:v]drawbox=t=fill:enable='between(t,5,6.4)'[bg];[1:v]setpts=PTS+5/TB[fg];[bg][fg]overlay=x=(W-w)/2:y=(H-h)/2:eof_action=pass;[1:a]adelay=5s:all=1[a1];[0:a][a1]amix" output.mp4
drawbox 用黑色覆盖主视频。仅当 miniclip.mp4
的宽度或高度小于 main.mp4
时才需要。如果 miniclip.mp4
宽度和高度≥ main.mp4
,则可以省略它。或者,您可以使用 scale2ref 过滤器使 miniclip.mp4
具有与 main.mp4
.
相同的宽度和高度
setpts 向 miniclip.mp4
视频添加 5 秒偏移量。
overlay 在 main.mp4
视频上叠加 miniclip.mp4
视频。
adelay 向 miniclip.mp4
音频添加 5 秒延迟。
amix 混合 miniclip.mp4
和 main.mp4
音频。
更多信息
- 有关每个过滤器的信息,请参阅 FFmpeg Filter Documentation。
- How to get video duration
V <------->
miniclip.mp4 A <=======>
V <-----------> ↓ + ↓ <------->
standard.mp4 A <=============================>
|--|--|--|--|--|--|--|--|--|--|
0 1 2 3 4 5 6 7 8 9 10
standard.mp4 have 10 seconds (aprox) of duration, have audio and video
miniclip.mp4 have 03 seconds (aprox) of duration, have video and audio
ffmpeg -i standard.mp4 |
} have same codes of video and audio?*
ffmpeg -i miniclip.mp4 |
- 如果文件standard.mp4和miniclip.mp4不是同一个音频代码或视频代码,如果你想要一个好的作品,你将重新编码继续。
ffmpeg -ss 00:00:00 -i standard.mp4 -t 4 -c copy 01.part_project.mp4
和 7 到 10,在 03.part_project.mp4
ffmpeg -ss 00:00:04.000 -i standard.mp4 -t 3.0000 -c copy 03.part_project.mp4
更改名称或创建 miniclip.mp4 的副本到 02.part_project.mp4
cp miniclip.mp4 02.part_project.mp4
(standard.mp4中4秒到7秒的部分如果选择OPTION 2只复制音频,将被使用,santadard_part2_audio.mp4)
现在选项 N 1:联系(联合)3 个视频部分
创建文件夹“option1”并复制01.part_project.mp4 02.part_project.mp4 03.part_project.mp4
mkdir option1 && cp 01.part_project.mp4 02.part_project.mp4 03.part_project.mp4 ./option1 && cd ./option1
现在你将 01.part_project.mp4 + 02.part_project.mp4 + 03.part_project.mp4 连接成一个独特的文件 fin_option1.mp4
ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy fin_option1.mp4
V <------->
miniclip.mp4 A <=======>
V <-----------> ↓ + ↓ <------->
standard.mp4 A <============XXXXXXXXX========>
|--|--|--|--|--|--|--|--|--|--|
0 1 2 3 4 5 6 7 8 9 10
第二种选择是联系(联合)3 个视频部分,但混合
santadard_part2_audio.mp4
的 miniclip.mp4 音频
从santadard_part2_audio.mp4获取音频流并获取音频
仅来自 miniclip.mp4
的文件
ffmpeg -i santadard_part2_audio.mp4 -map 0:a -c copy -vn -strict -2 mix_audio_santadad.mp4
ffmpeg -i miniclip.mp4 -map 0:a -c copy -vn -strict -2 mix_audio_miniclip.mp4
将所有音频**合而为一,然后将 miniclip.mp4 中的视频放入
ffmpeg -i mix_audio_miniclip.mp4 -i mix_audio_santadad.mp4 -filter_complex amix=inputs=2:duration=longest -strict -2 audio_mixed_miniclip.mp4
仅从 miniclip.mp4 获取视频
ffmpeg -i miniclip.mp4 -c copy -an miniclip_video.mp4
并获得 miniclip 但混合音频,我认为这是您正在寻找的解决方案
ffmpeg -i miniclip_video.mp4 -i audio_mixed_miniclip.mp4 -c copy -map 0:v -map 1:a:0 -disposition:a:0 default -disposition:a:1 default -strict -2 -sn -dn -map_metadata -1 -map_chapters -1 -movflags faststart 02.part_project_OPTION2.mp4
santadard_part2_audio.mp4
+
audio_miniclip.mp4
V <------->
miniclip.mp4 A <MMMMMMMM> (audio miniclip mixed with standard.mp4)
V <-----------> ↓ + ↓ <------->
standard.mp4 A <============ ========>
|--|--|--|--|--|--|--|--|--|--|
0 1 2 3 4 5 6 7 8 9 10
创建文件夹“option2”并复制01.part_project.mp4 02.part_project_OPTION2.mp4 03.part_project.mp4
mkdir option2 && cp 01.part_project.mp4 02.part_project_OPTION2.mp4 03.part_project.mp4 ./option2 && cd ./option2
ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy fin_option2.mp4
注意事项
** 您可以使用大量音频操作 https://trac.ffmpeg.org/wiki/AudioChannelManipulation
我有一个标准的mp4(音频+视频) 我正在尝试将 1.4 秒的迷你 mp4 剪辑合并到此曲目中,将视频替换为迷你剪辑的长度,但在特定时间将音频合并在一起
有人知道如何使用 ffmpeg 做到这一点吗?
我尝试了很多不同的过滤器,但似乎无法得到我想要的
V <------->
miniclip.mp4 A <=======>
V <-----------> ↓ + ↓ <--->
standard.mp4 A <=========================>
已编辑(现在我理解了问题):
First Get 1.4 seconds of standard.mp4 and audio1.mp3
-ss 是获取长度为 1.4 秒的小视频的开始(使用 -t 选项您可以指定持续时间,在本例中为 1.4 秒)摘要:从 min 5, 1.4 秒开始剪切视频 -an 用于音频 none 复制,因为您要添加新的 audio1.mp3
video_only.mp4
ffmpeg -ss 00:05:00 -i standard.mp4 -t 1.4 -map 0:v -c copy -an small_only_video.mp4
audio_only.mp4
ffmpeg -ss 00:05:00 -i audio1.mp3 -t 1.4 -c copy small_only_audio.mp3
现在您可以创建 small_clip_audiovideo.mp4
ffmpeg -i small_only_video.mp4 -c:a mp3 -i small_only_audio.mp3 -c copy -map 0:v -map 1:a:0 -disposition:a:0 default -disposition:a:1 default -strict -2 -sn -dn -map_metadata -1 -map_chapters -1 -movflags faststart small_clip_audiovideo.mp4
在时间戳 5 处显示 miniclip.mp4
(1.4 秒长)的示例。
ffmpeg -i main.mp4 -i miniclip.mp4 -filter_complex "[0:v]drawbox=t=fill:enable='between(t,5,6.4)'[bg];[1:v]setpts=PTS+5/TB[fg];[bg][fg]overlay=x=(W-w)/2:y=(H-h)/2:eof_action=pass;[1:a]adelay=5s:all=1[a1];[0:a][a1]amix" output.mp4
drawbox 用黑色覆盖主视频。仅当
相同的宽度和高度miniclip.mp4
的宽度或高度小于main.mp4
时才需要。如果miniclip.mp4
宽度和高度≥main.mp4
,则可以省略它。或者,您可以使用 scale2ref 过滤器使miniclip.mp4
具有与main.mp4
.setpts 向
miniclip.mp4
视频添加 5 秒偏移量。overlay 在
main.mp4
视频上叠加miniclip.mp4
视频。adelay 向
miniclip.mp4
音频添加 5 秒延迟。amix 混合
miniclip.mp4
和main.mp4
音频。
更多信息
- 有关每个过滤器的信息,请参阅 FFmpeg Filter Documentation。
- How to get video duration
V <------->
miniclip.mp4 A <=======>
V <-----------> ↓ + ↓ <------->
standard.mp4 A <=============================>
|--|--|--|--|--|--|--|--|--|--|
0 1 2 3 4 5 6 7 8 9 10
standard.mp4 have 10 seconds (aprox) of duration, have audio and video
miniclip.mp4 have 03 seconds (aprox) of duration, have video and audio
ffmpeg -i standard.mp4 |
} have same codes of video and audio?*
ffmpeg -i miniclip.mp4 |
- 如果文件standard.mp4和miniclip.mp4不是同一个音频代码或视频代码,如果你想要一个好的作品,你将重新编码继续。
ffmpeg -ss 00:00:00 -i standard.mp4 -t 4 -c copy 01.part_project.mp4
和 7 到 10,在 03.part_project.mp4
ffmpeg -ss 00:00:04.000 -i standard.mp4 -t 3.0000 -c copy 03.part_project.mp4
更改名称或创建 miniclip.mp4 的副本到 02.part_project.mp4
cp miniclip.mp4 02.part_project.mp4
(standard.mp4中4秒到7秒的部分如果选择OPTION 2只复制音频,将被使用,santadard_part2_audio.mp4)
现在选项 N 1:联系(联合)3 个视频部分
创建文件夹“option1”并复制01.part_project.mp4 02.part_project.mp4 03.part_project.mp4
mkdir option1 && cp 01.part_project.mp4 02.part_project.mp4 03.part_project.mp4 ./option1 && cd ./option1
现在你将 01.part_project.mp4 + 02.part_project.mp4 + 03.part_project.mp4 连接成一个独特的文件 fin_option1.mp4
ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy fin_option1.mp4
V <------->
miniclip.mp4 A <=======>
V <-----------> ↓ + ↓ <------->
standard.mp4 A <============XXXXXXXXX========>
|--|--|--|--|--|--|--|--|--|--|
0 1 2 3 4 5 6 7 8 9 10
第二种选择是联系(联合)3 个视频部分,但混合 santadard_part2_audio.mp4
的 miniclip.mp4 音频从santadard_part2_audio.mp4获取音频流并获取音频 仅来自 miniclip.mp4
的文件ffmpeg -i santadard_part2_audio.mp4 -map 0:a -c copy -vn -strict -2 mix_audio_santadad.mp4
ffmpeg -i miniclip.mp4 -map 0:a -c copy -vn -strict -2 mix_audio_miniclip.mp4
将所有音频**合而为一,然后将 miniclip.mp4 中的视频放入
ffmpeg -i mix_audio_miniclip.mp4 -i mix_audio_santadad.mp4 -filter_complex amix=inputs=2:duration=longest -strict -2 audio_mixed_miniclip.mp4
仅从 miniclip.mp4 获取视频
ffmpeg -i miniclip.mp4 -c copy -an miniclip_video.mp4
并获得 miniclip 但混合音频,我认为这是您正在寻找的解决方案
ffmpeg -i miniclip_video.mp4 -i audio_mixed_miniclip.mp4 -c copy -map 0:v -map 1:a:0 -disposition:a:0 default -disposition:a:1 default -strict -2 -sn -dn -map_metadata -1 -map_chapters -1 -movflags faststart 02.part_project_OPTION2.mp4
santadard_part2_audio.mp4
+
audio_miniclip.mp4
V <------->
miniclip.mp4 A <MMMMMMMM> (audio miniclip mixed with standard.mp4)
V <-----------> ↓ + ↓ <------->
standard.mp4 A <============ ========>
|--|--|--|--|--|--|--|--|--|--|
0 1 2 3 4 5 6 7 8 9 10
创建文件夹“option2”并复制01.part_project.mp4 02.part_project_OPTION2.mp4 03.part_project.mp4
mkdir option2 && cp 01.part_project.mp4 02.part_project_OPTION2.mp4 03.part_project.mp4 ./option2 && cd ./option2
ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy fin_option2.mp4
注意事项 ** 您可以使用大量音频操作 https://trac.ffmpeg.org/wiki/AudioChannelManipulation