用 ffmpeg -t 将一个 10s 的视频剪裁到 3s 后,播放时长没问题,但是放进 concat 过滤器,这个视频片段占用的长度仍为原长度 10s ,后面 7s 表现为最后一帧静止画面。尝试了各种方法都不行,还望大神赐教。
问题详细描述:
1. 用完全重编码的方法将一个 10s 的视频转换为 3.971s 并去掉音频:
ffmpeg -t 3.971 -i "加载.mp4" -c:v libx264 -tune animation -crf 1 -an loading.mp4
ffprobe 结果文件 loading.mp4 如下:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'loading.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf61.7.100 Duration: 00:00:03.98, start: 0.000000, bitrate: 49072 kb/s Stream #0:0[0x1](eng): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 49068 kb/s, 60 fps, 60 tbr, 15360 tbn (default) Metadata: handler_name : ?Mainconcept Video Media Handler vendor_id : [0][0][0][0] encoder : Lavc61.19.100 libx264 疑点:时长为 3.98 ,已经不精确?
原始视频的 ffprobe ,是不是原始视频有什么不正常:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '加载.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42mp41 creation_time : 2022-03-26T12:31:39.000000Z Duration: 00:00:10.00, start: 0.000000, bitrate: 9763 kb/s Stream #0:0[0x1](eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 9395 kb/s, 60 fps, 60 tbr, 60k tbn (default) Metadata: creation_time : 2022-03-26T12:31:39.000000Z handler_name : ?Mainconcept Video Media Handler vendor_id : [0][0][0][0] encoder : AVC Coding Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default) Metadata: creation_time : 2022-03-26T12:31:40.000000Z handler_name : #Mainconcept MP4 Sound Media Handler vendor_id : [0][0][0][0] 2. 将一个 webm 视频 overlay 到上述视频上,并加入音频,且音视频都重编码:
疑点:webm 视频的时长显示为 N/A ,但实际为 3.5s 左右
用了 -filter_complex chromakey,scale;overlay
结果的 ffprobe 如下:
Input #0, matroska,webm, from 'opening.mkv': Metadata: COMPATIBLE_BRANDS: isomiso2avc1mp41 MAJOR_BRAND : isom MINOR_VERSION : 512 ENCODER : Lavf61.7.100 Duration: 00:00:03.98, start: 0.000000, bitrate: 70572 kb/s Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv420p(tv, bt709, progressive), 1920x1080, 60 fps, 60 tbr, 1k tbn Metadata: ENCODER : Lavc61.19.100 libx264 DURATION : 00:00:03.984000000 Stream #0:1: Audio: flac, 44100 Hz, stereo, s16 Metadata: ENCODER : Lavc61.19.100 flac DURATION : 00:00:03.970000000 这一步结果视频长度 3.984s
3. 将上一步的结果用 concat 加到另外两个视频流的中间:
-filter_complex "[10:v]trim=0:3.97[t10v]", "[10:a]atrim=0:3.97[t10a]", "[fv1t][fa1t][t10v][t10a][fv2t][fa2t]cOncat=3:1:1", 其中 "[10]" 代表上一步结果的视频流和音频流,已经用 trim 处理
结果:在生成的文件中,这一段的实际占用时间为 10s ,而不是我需要的 3.971s ,后面 7s 是最后一帧静止画面和静音。
