首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新编码vlc创建的mpeg2 .ts文件将产生20秒的文件;AKA:带有隐藏流的多流文件。

重新编码vlc创建的mpeg2 .ts文件将产生20秒的文件;AKA:带有隐藏流的多流文件。
EN

Stack Overflow用户
提问于 2016-11-12 20:00:35
回答 2查看 955关注 0票数 1

我用vlc在v4l2上录制了一些东西(以防有区别),我只是选择了第一种有效的格式,即使用TS容器的mpeg2。文件导致.ts扩展名,这是由vlc自动选择的。当我试图将视频文件放到我的视频编辑器中时,它说视频长达19,884小时,而它应该是6分钟(大约80 my大小)。当我尝试在xine中播放它时,它正确地显示了持续时间(vlc不显示),以及当我使用ffprobe

代码语言:javascript
复制
[mpegts @ 0x9b2c0a0] max_analyze_duration 5000000 reached at 5000000
Input #0, mpegts, from 'loopbacktestcap.ts':   Duration: N/A, start:
17978.139456, bitrate: N/A   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[0x46](): Video: mpeg2video ([2][0][0][0] / 0x0002), 90k tbn

注意,特别是这一行:

代码语言:javascript
复制
   Duration: N/A, start: 17978.139456, bitrate: N/A   Program 1 

我查了一下,似乎时间的不足与容器有关。但是我尝试了一些东西来重新编码(我尝试了-vcodec拷贝,mpeg2,libx264.)我只能得到20秒的1.1mb - 1.8mb的文件。

那么,我如何重新编码这个文件,使持续时间出现,我得到完整的6分钟,而不是仅仅前20秒?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-23 11:05:09

当我找到这个链接时,达到了第一个里程碑:地图- ffmpeg -示例8,它引导我尝试:

代码语言:javascript
复制
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts

产生以下结果:

代码语言:javascript
复制
[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

注意,它现在给了我正确的持续时间,以及一个额外的流和关于第二个流的更多信息(从技术上来说,这是第三个)。于是我跑了:

代码语言:javascript
复制
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分钟长--实际上,持续时间计数器有点疯狂,因为我播放该文件并不断更改,因此我不知道)。

所以,我尝试的下一个命令是:

代码语言:javascript
复制
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts  -map 0 -c libx264 map0x264.mp4

试图播放生成的文件(对于好奇的人来说是43652975字节)导致了vlc中同样的奇怪行为,现在我可以看到它正在为每个流打开一个新窗口,当它在其各自的窗口中“转”时播放该流,冻结其他窗口的其他显示区域。试图关闭它们将停止对所有用户的播放,并关闭另外两个窗口。我猜把所有三个流都保存在同一个文件里是胡说八道。

成功!

下一次尝试是:

代码语言:javascript
复制
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

其结果是文件的大小:

代码语言:javascript
复制
 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,这正是我想要的!我的视频编辑也接受了这没问题。解决了!

票数 2
EN

Stack Overflow用户

发布于 2016-11-14 09:27:24

在我们的视频处理基础设施中,支持传输流(ts)视频文件也是一个类似的挑战。我使用ffmpegts转换为mp4文件,并进行了两次编码。

命令全文如下:

通行证1:

代码语言:javascript
复制
ffmpeg -i camera.ts -filter:v scale=-1:480,setsar=1/1 -pix_fmt yuv420p -threads 0 -r 25/1 -force_fps -c:v libx264 -profile:v baseline -preset slow -x264opts level=3.0:ref=1 -b:v 1000k -maxrate 1000k -bufsize 2000k -s hd480 -c:a libfaac -ar 16000 -ac 2 -ab 128000 -pass 1 -movflags faststart -y video.mp4

通行证2:

代码语言:javascript
复制
ffmpeg -i camera.ts -filter:v scale=-1:480,setsar=1/1 -pix_fmt yuv420p -threads 0 -r 25/1 -force_fps -c:v libx264 -profile:v baseline -preset slow -x264opts level=3.0:ref=1 -b:v 1000k -maxrate 1000k -bufsize 2000k -s hd480 -c:a libfaac -ar 16000 -ac 2 -ab 128000 -pass 2 -movflags faststart -y video.mp4 >>& ffmpeg.log

我将视频缩小到hd480 (852x480),用相对较低的比特率重新编码libx264基线级别3的视频流,并将moov原子移动到文件的开头以实现web兼容性(-movflags faststart)。

有关标志的所有详细信息,请参见FFMpeg文档

注意,我刚刚找到了这个命令,它适用于我们的设置:处理来自IP摄像机的传输流记录。您可能需要具体调整分辨率和比特率以满足您的需要。希望这能把你引向正确的方向。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40567066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档