当我找到这个链接时达到了第一个里程碑:Map - ffmpeg -- Example #8这让我尝试:
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts
产生以下内容:
[mpegts @ 0x9980f40] max_analyze_duration 90000000 reached at 90000000
Input #0, mpegts, from 'loopbacktestcap.ts':
Duration: 00:16:00.96, start: 17978.139456, bitrate: 695 kb/s
Program 1
Stream #0:0[0x44](): Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 104857 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
Stream #0:1[0x45](): Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 104857 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
Stream #0:2[0x46](): Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 104857 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
请注意,它现在为我提供了正确的持续时间以及第二个(技术上是第三个)的额外流和更多信息。于是我跑了:
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts -map 0 -c copy map0.mp4
现在产生了一个 79451050 字节的文件map0.mp4,其中my_mpeg2_file.ts是 83499636。我尝试在 vlc 中播放它,它显示持续时间为 9:12,但如果我慢跑播放位置,还有两个 vlc 窗口打开,vlc 开始表现得很奇怪;视频显示区域挂起,但播放位置指示器继续进行。这可能只是一个错误的 vlc,但我被困在这一点上。如果有人看到我在这里遗漏的任何东西,请告诉我。
xine
但是无法播放新文件(它播放原始文件并显示它是 6 分钟长 - 实际上,持续时间计数器在我播放文件时有点疯狂并且不断变化,所以我不知道)。
所以,我尝试的下一个命令是:
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts -map 0 -c libx264 map0x264.mp4
尝试播放生成的文件(43652975 字节,出于好奇)导致 vlc 中出现同样奇怪的行为,现在我可以看到它正在为每个流打开一个新窗口,并在“轮到”时播放流在其各自的窗口中,冻结其他窗口的其他显示区域。尝试关闭它们会停止所有播放并关闭两个额外的窗口。我猜想将所有 3 个流保存在同一个文件中是无稽之谈。
成功!
下一次尝试是:
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts -map 0:0 -c copy map0_0.ts
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts -map 0:1 -c copy map0_1.ts
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts -map 0:2 -c copy map0_2.ts
这导致文件大小:
4912 map0_0.ts
5372 map0_1.ts
74728 map0_2.ts
map0_0.ts是 20 秒长,map0_1.ts是 1:12 长的静止图像, map0_2.ts是 9:12。正是我想要的!我的视频编辑器可以毫无问题地接受它们。解决了!