首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有声音的视频中添加背景音乐时的问题

问在没有声音的视频中添加背景音乐时的问题
EN

Stack Overflow用户
提问于 2020-04-25 09:07:20
回答 1查看 99关注 0票数 1

我正在尝试切割一段背景音乐,并将它们循环成一个视频,并使用下面的命令改变视频的速度。

代码语言:javascript
复制
 String[] cmd = {"-y", "-i", input, "-i", shortsound,
            "-filter_complex",
            "[0:v]trim=0:120,setpts=1/2*(PTS-STARTPTS)[v1]," +
                    "[0:v]trim=120:240,setpts=1/2*(PTS-STARTPTS)[v2];" +
                    "[1:a]atrim=0:6,asetpts=PTS-STARTPTS," +
                    "asetrate=44100,aloop=-1:2e+09," +
                    "aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=1.0[bg];" +
                    "[0:a]atrim=0:120,asetpts=PTS-STARTPTS,atempo=2.0" +
                    ",aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[a1]," +
                    "[0:a]atrim=120:240,asetpts=PTS-STARTPTS,atempo=2.0," +
                    "aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[a2];" +
                    "[v1][a1][v2][a2]concat=n=2:v=1:a=1[video][audio];[audio]volume=0.5[avolume];" +
                    "[avolume][bg]amerge=2,pan=stereo|c0<c0+c2|c1<c1+c3[aout]",
            "-map", "[video]", "-map", "[aout]", "-c:v", "libx264", "-c:a", "aac", "-shortest",
            "-preset", "veryfast", output, "-hide_banner"};

一切都很好,直到我尝试了一个没有声音的视频,它没有工作。当输入是没有声音的视频时,如何处理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-27 13:43:46

命令行不适用于任何有音频流的视频,因为在您的命令中,您试图在下面的行中操作输入视频的音频流:

代码语言:javascript
复制
 "[0:a]atrim=0:120,asetpts=PTS-STARTPTS,atempo=2.0" +
                ",aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[a1]," +
 "[0:a]atrim=120:240,asetpts=PTS-STARTPTS,atempo=2.0," +
                "aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[a2];"

0:指的是第一个输入的音频流,它是一个视频文件,所以当我们有一个没有音频流的视频时,您的命令就会以失败告终。

为了解决您的问题,您可以检查视频文件中是否有音频流,代码如下:

代码语言:javascript
复制
private boolean isVideoContainAudioStream(String videoPath) {
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.setDataSource(videoPath);
    String hasAudioStream = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO);
    if (hasAudioStream != null && hasAudioStream.equals("yes"))
        return true;
    else
        return false;
}

因此,如果上述函数的结果等于true,则视频文件包含音频流,这样您就可以运行命令,否则您可以忽略该文件或显示警告,或者运行您的命令的编辑版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61423315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档