我创建了一个工具来创建电影网格,就像在 Brady Bunch 的开头一样。这是一个很酷,有趣的效果。
问题是,ffmpeg的是选择最短的影片,以确定的叠加视频最大长度,但依然采用了全第一条音轨的长度来确定整体输出影片的长度。
因此,当最短的视频结束时,我所有的视频都停止移动,但音频会在第一部电影的全长播放。
如何 (1) 将输出电影的长度设置为最长的输入电影或 (2) 将音频长度也与最短的电影长度相匹配?
基于这个 ffmpeg 示例用法,它表现出相同的音频问题:
ffmpeg
-i 1.avi -i 2.avi -i 3.avi -i 4.avi
-filter_complex "
nullsrc=size=640x480 [base];
[0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft];
[1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright];
[2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft];
[3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright];
[base][upperleft] overlay=shortest=1 [tmp1];
[tmp1][upperright] overlay=shortest=1:x=320 [tmp2];
[tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3];
[tmp3][lowerright] overlay=shortest=1:x=320:y=240
"
-c:v libx264 output.mkv
Run Code Online (Sandbox Code Playgroud)
如何将输出影片的长度设置为最长的输入影片?
从每个覆盖层中删除shortest=1。默认情况下,覆盖的最短输入将停止,并重复最后一帧,同时较长的输入继续。可以使用覆盖选项更改此行为eof_action。请参阅覆盖过滤器文档。
如何将音频长度与最短的电影长度相匹配?
添加-shortest输出选项。这是与覆盖选项不同的选项shortest;将其作为输出选项放在过滤器图表之外(在输出文件之前)。现在,最终的输出文件将与最短的流具有相同的持续时间:来自过滤器图表的视频或来自您的输入之一的音频(哪一个完全取决于默认流选择行为,因为我没有看到您做任何事情与命令中的音频)。
IIRC,可能存在涉及过滤和-shortest未执行预期操作的现有错误,但我目前无法回忆起详细信息,也懒得查看。只是需要注意一些事情。
| 归档时间: |
|
| 查看次数: |
5764 次 |
| 最近记录: |