使用 ffmpeg 从 MPEG-TS 剪切 dvbsub

使用 ffmpeg 从 MPEG-TS 剪切 dvbsub

我有一堆 MPEG-TS 文件,最初是由硬件电视录像机创建的。ffprobe列出他们的内容,如下所示:

Input #0, mpegts, from 'recording.ts':
  Duration: 02:14:57.67, start: 87544.254878, bitrate: 4386 kb/s
  Program 12003 
  [...]
  Program 12060 
    Stream #0:0[0xa7]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, top first), 720x576 [SAR 64:45 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x88](ger): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 192 kb/s (clean effects)
    Stream #0:2[0x48]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:3[0x47](ger): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006)
    Stream #0:4[0x4a](deu): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
    Stream #0:5[0xfb]: Unknown: none ([11][0][0][0] / 0x000B)
    Stream #0:6[0xfc]: Unknown: none ([12][0][0][0] / 0x000C)
  Program 12061 
  [...]
  Program 12095 
Unsupported codec with id 0 for input stream 2
Unsupported codec with id 94215 for input stream 3
Unsupported codec with id 0 for input stream 5
Unsupported codec with id 0 for input stream 6

我想同时重新编码这些文件以进行存档

  • 修剪电影开始前和结束后不必要的运行时间-ss-t剪切片段,concat协议将它们无缝地合并在一起而无需重新编码。

  • 剪掉广告块trim滤镜以帧精度进行切割。

  • 剪掉信箱crop滤镜消除黑条。

生成的命令行看起来有些复杂。它剪切两个片段的音频和视频,重置 PTS 以保持连续性,连接并裁剪它们。然后所有这些都被编码并合并到 MKV 容器中。

ffmpeg -i in.ts -filter_complex '
  [0:0]split[v1][v2];
  [0:1]asplit[a1][a2];
  [v1]trim=288.520:4957.640,setpts=PTS-STARTPTS[vo1];
  [a1]atrim=288.520:4957.640,asetpts=PTS-STARTPTS[ao1];
  [v2]trim=5155.360:6948.440,setpts=PTS-STARTPTS[vo2];
  [a2]atrim=5155.360:6948.440,asetpts=PTS-STARTPTS[ao2];
  [vo1][vo2]concat,crop=720:432:0:72[v];
  [ao1][ao2]concat=v=0:a=1[a];
' -map '[v]' -map '[a]' -c:v libx264 -c:a libvorbis out.mkv

到目前为止,所有这些都有效。但是,如上所示,原始文件还包含流 4 上的字幕,编码为dvb_subtitles.我现在想将它们合并到过滤图中。

我已经尝试过了为流添加splittrimsetpts和步骤以及相应的.这工作正常,但使用 x264 对字幕进行编码,从而产生额外的视频流。所以我添加了和 get ,尽管列表同时作为编码器和解码器。concat-map-codec:2 dvbsubInvalid encoder type 'dvbsub'ffmpeg -codeddvbsub

如何在整个过程中保留字幕?一个纯粹的ffmpeg解决方案将是完美的,但也许另一个工具能够更好地处理字幕。

答案1

我写了一个软件,你可以在这里下载:

视频剪辑是一个图形工具,可以剪切 mpegts 文件并将其隐式转换为 PS 流。如果不重新编码,它运行得非常快。如果不是,则需要一些时间,但您会得到非常精确的切割。 VideoCut 已在 Debian 和 Arch 系统上进行了测试。

相关内容