当 ffmpeg 中的音频较长时,将黑帧附加到视频中

Posted

技术标签:

【中文标题】当 ffmpeg 中的音频较长时,将黑帧附加到视频中【英文标题】:Append black frames to video when audio is longer in ffmpeg 【发布时间】:2018-04-08 13:22:57 【问题描述】:

我正在尝试将 ffmpeg 用作视频编辑器,这主要是因为常规视频编辑器丢失的帧比我习惯的要多。

ffmpeg -i "videoplayback1" -t 00:09:51 -i "audioplayback1" -t 00:09:54.38 -vcodec libx264 -crf 20 -acodec copy "playback1.mp4"

如您所见,我将视频修剪得比音频短,但我想要的是与-shortest 命令开关相反的东西,让文件在音频@987654323 的持续时间内继续@,并在剩余时间添加物理黑框。

就像现在一样,视频仍然被剪辑,就像我使用-shortest 开关一样。我尝试了一些-vffilter_complex,但我得到了错误,或者音频仍然被截断,视频冻结,但持续时间是最长的-t

只要音频正在播放,我将如何添加黑框?

【问题讨论】:

【参考方案1】:

您的命令格式错误,因为它没有修剪比音频短的视频。期权放置很重要。输入的输入选项位于该输入之前,所以

ffmpeg -t 00:09:51 -i "videoplayback1" -t 00:09:54.38 -i "audioplayback1" -vcodec libx264 ...

根据您的编辑要求,我会删除视频修剪并使用绘图框过滤器在所需的视频修剪点之后使帧变黑。

ffmpeg -i "videoplayback1" -t 00:09:54.38 -i "audioplayback1" -vf drawbox=t=fill:enable='gt(t,591)' -shortest -c:v libx264 -crf 20 -c:a copy "playback1.mp4"

drawbox设置为在 591 秒的视频后以默认颜色黑色绘制整个帧。 -shortest 终止输出。

【讨论】:

Missing ')' or too many args in 'gt(t' Error when evaluating the expression 'gt(t' for enable Error initializing filter 'drawbox' with args 't=fill:enable=gt(t' Error opening filters! 听起来你需要转义逗号。让它'gt(t\,591)' Undefined constant or missing '(' in 'fill' 您使用的是旧版本的 ffmpeg。将填充更改为最大值。 嗯。在这里,我以为我使用的是最新的代表。此外,现在使用带有 max 和转义逗号的命令,整个视频在最短的 -t 处停止。删除 -shortest 会在音频末尾增加大约 20 秒。

以上是关于当 ffmpeg 中的音频较长时,将黑帧附加到视频中的主要内容,如果未能解决你的问题,请参考以下文章

附加: FFmpeg概念理解

使用 ffmpeg 和 python 将视频中的所有音频流提取到单独的音频文件中

视频到音频文件通过节点 js 中的 FFMPEG 转换和保存

第十章 视频播放器开发之音频播放

使用 FFmpeg 将音频输入与视频混合到特定位置

FFMpeg SDK使用4调用FFmpeg SDK解析封装格式的视频为音频流和视频流