使用 FFMPEG 修剪 MP4 文件时音频比视频长

Lor*_*gus 1 ffmpeg

我刚刚发现 FFMPEG,我需要它来将 MP4 文件的负载剪切到每个文件的最后 20 秒。每个 MP4 文件都有一个视频轨道和两个音频轨道,并且还具有可变帧速率。

我一直在使用这行代码:

for %F in (*.mp4) do ffmpeg -sseof -20 -i "%F" -map 0:v -map 0:a -c:v copy -c:a copy "%~nF_trimmed.mp4"
Run Code Online (Sandbox Code Playgroud)

修剪顺利,但音频存在问题。在没有取消修剪过程的情况下出现此错误,尽管我相信它与我的问题无关:

[mp4 @ 0000025740443740] track 1: codec frame size is not set
[mp4 @ 0000025740443740] track 2: codec frame size is not set
Run Code Online (Sandbox Code Playgroud)

当我将修剪后的文件放入视频编辑软件时,可以看到:

编辑器截图

第二音轨比视频轨道长。

-shortest命令并没有达到目的也许我只是用错了?

小智 5

我正在摆弄并-shortest遇到了较长音轨没有被修剪到视频长度的问题。这就是我尝试使用它的方式:

ffmpeg -i INPUT -c copy -shortest OUTPUT
Run Code Online (Sandbox Code Playgroud)

更仔细地阅读该选项的文档后:

当最短输入流结束时完成编码。

对于上述 FFmpeg 命令,只有一个输入流。所以下面的命令终于起作用了:

ffmpeg -i INPUT -i INPUT -c copy -shortest -map 0:v -map 1:a OUTPUT
Run Code Online (Sandbox Code Playgroud)

其中两个INPUTs 是同一个文件。