Audio 如何替换部分视频文件的视频轨迹?
我有这样一个mp4文件(格式相同但更长): 我还有一个3分钟长的视频文件。而且没有音频。对另一个视频进行编码的最快方法是什么,使其编码方式与我的主视频相同,然后用此视频替换原始视频最后三分钟的视频轨迹 换句话说。 我有一个1小时长的视频。使用上面显示的编码 我有3分钟长的视频B,没有音频。使用随机编码 我想用和A相同的编码和音频制作视频C,但它的视频轨迹是A+B的前57分钟(也就是3分钟) 我想尽快做到这一点,所以我不想重新编码A 我知道如何连接两个视频,我使用以下命令:Audio 如何替换部分视频文件的视频轨迹?,audio,video,ffmpeg,media,mp4,Audio,Video,Ffmpeg,Media,Mp4,我有这样一个mp4文件(格式相同但更长): 我还有一个3分钟长的视频文件。而且没有音频。对另一个视频进行编码的最快方法是什么,使其编码方式与我的主视频相同,然后用此视频替换原始视频最后三分钟的视频轨迹 换句话说。 我有一个1小时长的视频。使用上面显示的编码 我有3分钟长的视频B,没有音频。使用随机编码 我想用和A相同的编码和音频制作视频C,但它的视频轨迹是A+B的前57分钟(也就是3分钟) 我想尽快做到这一点,所以我不想重新编码A 我知道如何连接两个视频,我使用以下命令: ffmpeg -f c
ffmpeg -f concat -i files.txt -c copy res.mp4
ffmpeg -i videob.mp4 -f lavfi -i anullsrc=sample_rate=48000:channel_layout=stereo -filter_complex "[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,format=yuv420p,fps=50[v]" -map "[v]" -map 1:a -c:v libx264 -profile:v main -c:a aac -video_track_timescale 50000 -shortest videob2.mp4
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 main.mp4
ffmpeg -i videob.mp4 -f lavfi -i anullsrc=sample_rate=48000:channel_layout=stereo -filter_complex "[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,format=yuv420p,fps=50[v]" -map "[v]" -map 1:a -c:v libx264 -profile:v main -c:a aac -video_track_timescale 50000 -shortest videob2.mp4
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 main.mp4
files.txt
:
file 'main.mp4'
outpoint 3420
file 'videob2.mp4'
- 在本例中,
是主视频持续时间减去结束视频持续时间outpoint
ffmpeg -f concat -i files.txt -i main.mp4 -map 0:v -map 1:a -c copy -shortest output.mp4
这几乎很好,但有两个问题,我如何指定输出点自动等于第一个视频的
持续时间-第二个视频的持续时间
例如3600-30秒,但实际上第二个视频总是30秒,但第一个视频的大小不同(我有很多不同的视频)而且,在您的方法中,声音也不是从第一个视频复制的。我需要第一个视频的声音覆盖整个输出,并且只有最后30秒的视频应该被第二个视频覆盖,而不是音频覆盖。@yukashimahuksay请参见更新的答案。没有办法自动指定outpoint等于第一个视频的持续时间-第二个视频的持续时间,但是可以使用您首选的shell/脚本/代码语言轻松完成。