我有一堆 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
.我现在想将它们合并到过滤图中。
我已经尝试过了为流添加split
、trim
、setpts
和步骤以及相应的.这工作正常,但使用 x264 对字幕进行编码,从而产生额外的视频流。所以我添加了和 get ,尽管列表同时作为编码器和解码器。concat
-map
-codec:2 dvbsub
Invalid encoder type 'dvbsub'
ffmpeg -coded
dvbsub
如何在整个过程中保留字幕?一个纯粹的ffmpeg
解决方案将是完美的,但也许另一个工具能够更好地处理字幕。
答案1
我写了一个软件,你可以在这里下载:
视频剪辑是一个图形工具,可以剪切 mpegts 文件并将其隐式转换为 PS 流。如果不重新编码,它运行得非常快。如果不是,则需要一些时间,但您会得到非常精确的切割。 VideoCut 已在 Debian 和 Arch 系统上进行了测试。