【问题标题】:ffmpeg - output silent audio track if source has no audio or audio is shorter than source videoffmpeg - 如果源没有音频或音频比源视频短,则输出静音音轨
【发布时间】:2026-01-20 18:45:01
【问题描述】:

我需要一个音频和视频轨道持续时间始终相同的视频文件。即使源音频没有音轨,该文件也必须包含音轨。当源没有音频跟踪时,如何告诉 ffmpeg 添加静音音轨。此外,如果源的音轨与视频的持续时间不同,我需要 ffmpeg 附加无声音频以使输出音频和视频的持续时间相同。这可能与 ffmpeg 合二为一吗?

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    如果源文件中没有音频**,则以下命令将添加与视频长度相同*的静音轨道。

    ffmpeg -i video -f lavfi -i anullsrc=cl=1 -shortest -c:v libx264 -c:a aac output.mov
    

    *由于视频帧持续时间和音频帧持续时间通常不相同,因此长度不会完全相同。

    **当map 未指定时,ffmpeg 从具有最高通道数的输入中选择单个音频流。如果有两个或多个流具有相同的编号。通道中,它选择索引最低的流。 anullsrc这里只有一个通道,所以除非source没有音频,否则会被忽略。

    【讨论】:

    • 好的,但是如果源音频存在,我需要传递它,如果不存在,则添加静音轨道。
    • 你能解释一下 -f lavfi 吗?无论输入格式如何,我都需要在 .mov 容器中输出 h264。
    • 这告诉 FFmpeg 下一个输入 anullsrc 是一个过滤器生成器。为 H264 输出编辑了 cmd。