最初的问题更多是关于在一个输出文件中混合多个视频流,并让应用程序选择要解码的视频流。正如上面评论中提到的,您可以使用 FFmpeg 提供的-map 选项来实现。
下面是从单独的输入文件中混合 3 个视频流的快速示例命令:
ffmpeg -i video_A.mp4 -i video_B.mp4 -i video_C.mp4 -c copy \
-map 0:0 -map 1:0 -map 2:0 -map 2:1 output_mux_video.mp4
- 每个
-map 选项都以特定的值格式<INPUT_INDEX>:<STREAM_INDEX> 开头
-
<INPUT_INDEX>以上是-i <INPUT_FILE_NAME>的顺序
-
以上
<STREAM_INDEX> 是每个<INPUT_FILE_NAME> 中的流的顺序,也可以是特殊字符,例如a(所有音频流)或v(所有视频流),更高级的用法请查看@ 987654322@。在此示例中,假设视频流位于索引 0,音频流位于索引 1
-
-c copy 表示 stream copy,因此 FFmpeg 将复制每个输入视频流以进行复用/解复用,而不是重新编码它们。
命令执行会输出如下消息:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from "/path/to/video_A.mp4"
..... <OMITTED_NOT_IMPORTANT> .....
Duration: 00:04:54.08, start: 0.000000, bitrate: 146 kb/s
Stream #0.0(und): Video: h264 (Main), yuv420p, 256x140 [PAR 1:1 DAR 64:35], 10 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
Stream #0.1(und): Audio: aac, 44100 Hz, stereo, fltp, 127 kb/s
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from "/path/to/video_B.mp4"
..... <OMITTED_NOT_IMPORTANT> .....
Duration: 00:05:35.01, start: 0.000000, bitrate: 363 kb/s
Stream #1.0(und): Video: h264 (Main), yuv420p, 426x240 [PAR 1:1 DAR 71:40], 229 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc
Stream #1.1(eng): Audio: aac, 44100 Hz, stereo, fltp, 127 kb/s
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from "/path/to/video_C.mp4"
..... <OMITTED_NOT_IMPORTANT> .....
Duration: 00:05:35.01, start: 0.000000, bitrate: 363 kb/s
Stream #2.0(und): Video: h264 (Main), yuv420p, 426x240 [PAR 1:1 DAR 71:40], 229 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc
Stream #2.1(eng): Audio: aac, 44100 Hz, stereo, fltp, 127 kb/s
Output #0, mp4, to '/path/to/output_mux_video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
..... <OMITTED_NOT_IMPORTANT> .....
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #1:0 -> #0:1 (copy)
Stream #2:0 -> #0:2 (copy)
Stream #2:1 -> #0:3 (copy)
Press ctrl-c to stop encoding
frame= 8818 fps= 0 q=-1.0 Lq=-1.0 size= 15342kB time=293.87 bitrate= 427.7kbits/s
video:9783kB audio:5235kB global headers:0kB muxing overhead 2.160838%
通过检查上面的Stream mapping 部分,您将知道映射是否符合您的预期。
对于那些遇到类似问题的人,这个答案可以节省您的时间。