当视频中没有音频流时,速度更改命令会失败 - ffmpeg

时间:2016-07-06 07:31:22

标签: android video ffmpeg audio-streaming video-editing

我正在尝试通过以下命令

更改不包含音频流的视频的速度
String[]{"ffmpeg", "-y", "-i", orginalFile, "-threads", "5", "-preset", "ultrafast", "-strict", "experimental", "-filter_complex", "[0:v]setpts=0.50*PTS[v];[0:a]atempo=2.0[a]", "-map", "[v]", "-map", "[a]", "-b", "2097k", "-ab", "48000", "-ac", "2", "-ar", "22050", "-vcodec", "mpeg4", destinationFile};

命令无法说明视频没有音频流那么,我是否需要检查视频中是否存在音频流,或者在这种情况下我能做些什么?

4 个答案:

答案 0 :(得分:3)

您需要在运行命令之前检查视频(使用ffmpeg -i) 您将获得vk.log中的信息。 解析它,看看你是否有音频。 然后运行正确的命令。

答案 1 :(得分:2)

选项-map a仅接受带有音频流的视频,有些视频没有音频。你需要使用-map 0。两种情况的解决方案是使用?

 -map [a?]

? teels ffmpeg仅映射流(如果存在)。

答案 2 :(得分:2)

如果您使用特定于流的过滤链,则您应该能够处理所有文件 - 包含音频或不包含音频。

使用

String[]{"ffmpeg", "-y", "-i", originalFile, "-threads", "5",
         "-map", "0:v", "-map", "0:a?",
         "-vf setpts=0.50*PTS", "-vcodec", "mpeg4", "-preset", "ultrafast", "-b:v", "2097k",
         "-af atempo=2.0", "-b:a", "48000", "-ac", "2", "-ar", "22050",
         "-strict", "experimental", destinationFile}

答案 3 :(得分:0)

您可以尝试的一种解决方案是首先使用以下命令转换 String[]{"-ss", lastTime, "-i", selectedVideoPath, "-t", now, "-filter:v", "setpts=0.5*PTS","-strict", "-2", videoPath};

audio

然后转换try code or catch并根据结果检查它是否执行audio。如果merge audio成功执行,则videovideo保存已完成audio没有{{1}}。

它可能不是最佳解决方案,但它应该有效。