audiostream不在video中时速度改变命令失败 – ffmpeg

我试图通过下面的命令改变不包含audiostream的video的速度

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}; 

命令失败,说明video没有audiostream那么,我是否需要检查video中是否存在audiostream,或者在这种情况下可以做些什么吗?

Solutions Collecting From Web of "audiostream不在video中时速度改变命令失败 – ffmpeg"

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

选项 – -map a只有audiostream的video,有一些video没有audio。 你需要使用-map 0 。 两种情况的解决scheme是你使用?

  -map [a?] 

这个? teels ffmpeg只映射stream如果存在。

如果您使用特定于stream的过滤链,则应该能够处理所有文件 – 无论是否带有audio。

使用

 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} 

您可以尝试的一个解决scheme是首先使用此命令转换video

  String[]{"-ss", lastTime, "-i", selectedVideoPath, "-t", now, "-filter:v", "setpts=0.5*PTS","-strict", "-2", videoPath}; 

然后转换audio并检查它是否执行try code or catch基于结果try code or catch 。如果audio成功执行,则merge audiovideo否则保存完整的video没有audio

它可能不是最好的解决scheme,但它应该工作。