当第一个视频没有音轨时,使用 ffmpeg 连接视频会产生无声视频

Phi*_*hil 8 ffmpeg

我有 3 个 mp4 文件:

  • 1.mp4 - 有视频,没有音频
  • 2.mp4 - 有视频和音频
  • 3.mp4 - 有视频和音频

我创建了一个用于连接的剪辑文件 (clips.txt):

file '1.mp4'
file '2.mp4'
file '3.mp4'
Run Code Online (Sandbox Code Playgroud)

我运行以下命令行:

ffmpeg -f concat -i "clips.txt" -c:a aac -b:a 160k -y "out.mp4"
Run Code Online (Sandbox Code Playgroud)

生成的文件有视频但没有音频,大概是因为 1.mp4 没有音轨。

如果我重新排列 clips.txt 所以 1.mp4 不是第一个,out.mp4 有一个音轨。

有没有办法强制 ffmpeg 使用音频?我想它必须为任何无声视频生成无声音轨。

谢谢!

Phi*_*hil 13

对于任何偶然发现并希望实现与我相同的事情的人,我解决了以下问题:

ffmpeg -i "1.mp4" -f lavfi -i aevalsrc=0 -shortest -y "new_1.mp4"
Run Code Online (Sandbox Code Playgroud)

这说的是:

  • 取 1.mp4(这是没有音频的视频剪辑)(-i "1.mp4")
  • 生成所需的最小静音(-f lavfi -i aevalsrc=0 -shortest)
  • 输出结果 (-y "new_1.mp4")

从这里我像以前一样连接,但用“new_1.mp4”替换 clips.txt 中的“1.mp4”

  • 对于无声音频,请确保匹配其他输入的通道布局和采样率。例如,44.1kHz 立体声音频:`-i anullsrc=cl=stereo:r=44100`(这些是 [anullsrc 过滤器](https://ffmpeg.org/ffmpeg-filters.html#anullsrc) 的默认设置)。 (4认同)
  • 另外,考虑添加`-c:v copy` 来重新混合视频而不是重新编码它。 (4认同)