如何解决MP4Box:即使样本描述不匹配,也连接轨道 ID 1
本质上,我希望使用 MP4Box 连接一系列视频。当我尝试这样做时,我收到以下错误:
No suitable destination track found - creating new one (type soun)
0.500 secs Interleaving
通过向 -force-cat
命令添加 MP4Box
参数,我可以至少暂时避免该问题。但是,这会导致音频和视频的对齐问题并产生以下警告:
Concatenating track ID 1 even though sample descriptions do not match
现在,据我所知,这与视频类型之间的不同参数有关。我将在下面显示每种视频类型的 ffprobe
输出,以期对这个问题有所了解。
视频类型 1 FFPROBE 输出:
Input #0,mov,mp4,m4a,3gp,3g2,mj2,from '0.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:00:02.25,start: 0.000000,bitrate: 851 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661),yuv420p,1920x1080,816 kb/s,4 fps,4 tbr,16384 tbn,8 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D),24000 Hz,mono,fltp,32 kb/s (default)
Metadata:
handler_name : SoundHandler
视频类型 2 FFPROBE 输出:
Input #0,from 'static.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.78.100
Duration: 00:00:01.00,bitrate: 662 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661),1920x1080 [SAR 1:1 DAR 16:9],654 kb/s,29.97 fps,29.97 tbr,30k tbn,59.94 tbc (default)
Metadata:
handler_name : VideoHandler
解决方法
问题
文件属性必须匹配,但它们是不同的。查看list of attributes that must match for proper concatenation。
重要的不一致:
- H.264 配置文件(高与受限基线)
- 时基(16384 tbn vs 30k tbn)
- 一个有音频,另一个没有
解决方案 1:重新编码一个以匹配另一个
如果您需要在长视频中添加短片段,此方法很好。它将保持长视频不变,因此将保持质量并且速度很快。缺点是您必须确保 all of the attributes 匹配,如果您不熟悉该主题,这可能会很困难。
使 static.mp4
与 0.mp4
相似的示例,使用 anullsrc 过滤器生成空白/静音/虚拟/填充音频。
-
重新编码:
ffmpeg -i static.mp4 -f lavfi -i anullsrc=channel_layout=mono:sample_rate=24000 -c:v libx264 -c:a libmp3lame -video_track_timescale 16384 -shortest 1.mp4
-
使
input.txt
包含:file '0.mp4' file '1.mp4'
-
与 concat 分离器连接:
ffmpeg -f concat -i input.txt -c copy output.mp4
解决方案 2:重新编码所有内容
此方法使用多个过滤器使所有输入符合一组通用参数(帧速率、宽度、高度等)。如果您的输入总是变化的或任意的,这是最有用的。它在一个命令中完成所有事情。缺点是它会重新编码所有内容并且可能会很慢。
请参阅 How to concatenate videos in ffmpeg with different attributes? 以获取许多示例。
,如果您知道两种媒体适合,您可以使用 -force-cat
。请参阅 https://github.com/gpac/gpac/wiki/mp4box-import-opts 处的文档。
在您的情况下,如 ffprobe 所示,媒体来自具有不同设置/配置文件/等的两种不同编码。所以它们不合适。
当媒体不适合时,如果您的播放器支持此模式,您还可以告诉 GPAC 多路复用器将描述符放在流中(“avc3”)而不是头(“avc1”)中(avc1 的组合)和 3 个是可能的,请参阅 https://github.com/gpac/gpac/wiki/mp4box-import-opts 中的 xps_inband
)。
最后,如果这不起作用,您将需要重新编码。 GPAC 也可以使用其 flist
过滤器(有关显示用法的回归测试,请参阅 https://github.com/gpac/testsuite/blob/65498a2b8f569b37c1be4bfdc34b95ba9011a9ff/scripts/filelist.sh)。由于 v0.9 GPAC 可以通过利用 Ffmpeg 库重新编码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。