java - FFmpeg 音频不同步问题

标签 java audio cmd ffmpeg synchronization

我已经看到了大量关于这些的线程,但我的问题似乎没有任何改变。

目前在我的 Java 程序中,我正在调用命令行并使用此命令。

ProcessBuilder builder = new 
                 ProcessBuilder(
                         "cmd.exe", "/c", "ffmpeg -y -i " + "\"" + inputFile + "\" -vcodec libx264 -async 1 -f mp4 " + " -ss " + offset + " -c copy -t " + duration + " " + "\"" + outputFile + "\"");

最初 -vcodec、-async 和 -f mp4 不存在,但为了希望纠正音频,它们已被放置在那里。

音频滞后约 1-2 秒,我想知道是否有人有任何想法?我还尝试手动设置帧速率,但仍然无效。

这是另一个失败的尝试。
ProcessBuilder builder = new 
                 ProcessBuilder(
                         "cmd.exe", "/c", "ffmpeg -y -i " + "\"" + inputFile + "\" -vcodec libx264 -async 1 -acodec libfaac -ab 128k -ac 2 -bt 5000k -b 5000k -r 59.940 -threads 0 -f mp4 " + " -ss " + offset + " -c copy -t " + duration + " " + "\"" + outputFile + "\"");

输入和输出文件以及偏移量和持续时间都很好,请不要质疑这一点。

快速编辑!

输入文件将始终具有扩展名 .flv

另一个编辑
当我删除偏移量和持续时间参数并改用 copyts 时,整个文件将转换为 mp4 并同步音频。问题似乎在于偏移量和持续时间,因为我之前尝试过使用这两个副本,但它仍然是不同步的。

当前的
ProcessBuilder builder = new 
                 ProcessBuilder(
                         "cmd.exe", "/c", "ffmpeg -y -i " + "\"" + inputFile + "\"" + " -c copy -copyts " + "\"" + outputFile + "\"");

最佳答案

在您的原始命令(顶部的那个)中,替换 -c copy-c:a copy .您可以摆脱 -async 1 .

关于java - FFmpeg 音频不同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39597581/

相关文章:

java - 我如何获得主复发预约 EWS?

audio - 黑莓录音示例代码

regex - 如何使用 findstr 提取子字符串

java - 如何使用用户输入创建可变长度参数?

java - 为 Eclipse 插件开发新视角时如何摆脱大纲 View ?

java - MacOS 应用程序的设置

perl - 如何在Perl中使用HTTP POST接收wav音频文件并在Asterisk AGI中播放

python - pygame.mixer.Sound.play 是不规则的,尽管是定期触发的

batch-file - 如何添加右键单击选项以使用所选文件的名称搜索网络?

batch-file - 您可以从批处理文件向命令行历史记录添加条目吗?