Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio 如何替换部分视频文件的视频轨迹?_Audio_Video_Ffmpeg_Media_Mp4 - Fatal编程技术网

Audio 如何替换部分视频文件的视频轨迹?

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

我有这样一个mp4文件(格式相同但更长):

我还有一个3分钟长的视频文件。而且没有音频。对另一个视频进行编码的最快方法是什么,使其编码方式与我的主视频相同,然后用此视频替换原始视频最后三分钟的视频轨迹

换句话说。 我有一个1小时长的视频。使用上面显示的编码

我有3分钟长的视频B,没有音频。使用随机编码

我想用和A相同的编码和音频制作视频C,但它的视频轨迹是A+B的前57分钟(也就是3分钟)

我想尽快做到这一点,所以我不想重新编码A

我知道如何连接两个视频,我使用以下命令:

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
    
  • 制作concat解复用器所需的
    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/脚本/代码语言轻松完成。