我正在使用 ffmpeg 4.2.4。
我有两段短视频,都是用手机拍摄的。我从第一段视频中剪掉了一部分(从 18 秒开始,长度也是 18 秒 - 输出长度似乎是 18.02 秒):
ffmpeg -i VID_20201205_135951.mp4 -ss 00:18 -t 00:18 1.mp4
并且使用第二个的整个时间,它长 13.55 秒:
cp VID_20201205_140804.mp4 2.mp4
我写了一个文件concat.txt:
file '1.mp4'
file '2.mp4'
并使用 concat 过滤器将它们连接在一起:
ffmpeg -f concat -i concat.txt -c copy 12.mp4
生成的视频没有声音,长度为 3 分 2.35 秒!如果我观看它,前 18 秒是正确的(尽管没有声音),然后它冻结,显示第一部分的最后一帧,直到 1:47,此时第二部分开始播放,但速度非常慢,直到视频结束。
知道我做错了什么吗?或者我该如何调试?
以下是 ffmpeg 打印的第一个输入的信息:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:00:18.02, start: 0.000000, bitrate: 17735 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 3840x2160 [SAR 1:1 DAR 16:9], 17678 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandle
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 69 kb/s (default)
Metadata:
handler_name : SoundHandle
第二个输入:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2020-12-05T14:08:20.000000Z
com.android.version: 11
Duration: 00:00:13.55, start: 0.000000, bitrate: 40373 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuvj420p(pc, smpte170m), 3840x2160, 42298 kb/s, SAR 1:1 DAR 16:9, 30.02 fps, 30 tbr, 90k tbn, 180k tbc (default)
Metadata:
rotate : 180
creation_time : 2020-12-05T14:08:20.000000Z
handler_name : VideoHandle
Side data:
displaymatrix: rotation of -180.00 degrees
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 96 kb/s (default)
Metadata:
creation_time : 2020-12-05T14:08:20.000000Z
handler_name : SoundHandle
输出结果如下:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '12.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:03:02.35, start: 0.000000, bitrate: 4734 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 3840x2160 [SAR 1:1 DAR 16:9], 4719 kb/s, 5.07 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandle
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 80 kb/s (default)
Metadata:
handler_name : SoundHandle
答案1
所有输入必须具有相同的属性。您的输入具有不同的 H.264 配置文件(Baseline 与 High)和帧速率。
使一个视频与另一个视频匹配:
ffmpeg -i 2.mp4 -c:v libx264 -r 30 -c:a copy 2b.mp4
默认情况下会选择高配置文件,因此您不需要手动添加它,但如果您想要基线,请使用-profile:v baseline
。
或者将所有视频转换为评论属性集,而不管输入属性如何。请参阅如何在 ffmpeg 中连接具有不同属性的视频?