ts文件的帧率控制

时间:2016-12-28 05:39:36

标签: ffmpeg gstreamer frame-rate mpeg

我有一个ts文件,它是通过使用x264enc对原始yuv数据进行编码并将其与mpegtsmux复用而创建的。

此文件包含多个流。例如,它可能包含两个视频流,或者它可能包含两个视频和一个类似的文本流。

分辨率为25 fps,分辨率为720X576。我想改变它的fps说10,并且所有三个流也必须出现在新的ts文件中。

gstreamer中有没有这方面的管道?或ffmpeg中的任何命令?我该怎么做?

1 个答案:

答案 0 :(得分:1)

我不认为这在GStreamer中是可行的。至少不是直截了当的。但是,只要可以正确发现文件中的所有序列,就可以使用 ffmpeg

来自ffmpeg的wiki,地图选项https://trac.ffmpeg.org/wiki/Map):

  

“map”命令基本上意味着“将此流包含到   紧跟在OUTPUT文件之后。“

使用地图选项可以重新编码您想要的视频流,并保持其他人不受影响。

使用input.ts文件作为一个例子,有2个不同的视频流和一些音频流,接下来的方法应该是下一个:

ffmpeg -i input.ts -map 0:0 -map 0:2 -map 0:3 -map 0:4 -map 0:23 -map 0:10 -map 0:14 -c:v:0 mpeg2video -r:v:0 10 -c:v:1 copy -c:a copy outputmini.ts

请注意,视频流为0:0和0:23。第一个视频流(mpeg2)被重新编码为10 fps,而0:23视频流(x264)被复制到输出。请记住,如果.ts文件中有一些 unknown 流,您可能需要添加-ignore_unknown标志。

如ffmpeg链接中所指定,输出流顺序在地图选项放置顺序中的命令执行中指定。使用 -c:v:0 mpeg2video 选项,我们选择第一个输出视频流并重新编码编解码器,而 -r:v:0 10 < / em>选项将第一个视频流帧速率设置为10 fps。命令行中的其他选项将输入流复制到具有相同参数的输出。

ffmpeg输出下一个:

Output #0, mpegts, to 'outputmini.ts':
  Metadata:
    encoder         : Lavf57.41.100
    Stream #0:0: Video: mpeg2video (Main), yuv420p, 640x576 [SAR 6:5 DAR 4:3], q=2-31, 200 kb/s, 10 fps, 90k tbn, 10 tbc
    Metadata:
      encoder         : Lavc57.50.100 mpeg2video
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    Stream #0:1(spa): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, 192 kb/s
    Stream #0:2(qaa): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, 192 kb/s
    Stream #0:3(spa): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, mono, 96 kb/s (visual impaired)
    Stream #0:4: Video: h264 ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 50 fps, 50 tbr, 90k tbn, 90k tbc
    Stream #0:5(spa): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, 256 kb/s
    Stream #0:6(spa): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, mono, 64 kb/s (visual impaired)
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg2video (native) -> mpeg2video (native))
  Stream #0:2 -> #0:1 (copy)
  Stream #0:3 -> #0:2 (copy)
  Stream #0:4 -> #0:3 (copy)
  Stream #0:23 -> #0:4 (copy)
  Stream #0:10 -> #0:5 (copy)
  Stream #0:14 -> #0:6 (copy)

实现了所需的输出。

然而,即使我不确定这可以做到,我也会看到tsMuxeR appllication(http://www.videohelp.com/software/tsMuxeR)。对于这类任务来说,它是一个非常强大的工具。