ffmpeg를 사용하여 MPEG-TS에서 dvbsub 잘라내기

ffmpeg를 사용하여 MPEG-TS에서 dvbsub 잘라내기

원래 하드웨어 TV 레코더로 생성된 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프로토콜 이 다시 인코딩하지 않고 원활하게 병합합니다.-tconcat

  • 광고 블록을 잘라내세요: 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를 사용하여 자막을 인코딩하므로 추가 비디오 스트림이 생성됩니다. 그래서 목록이 인코더와 디코더 역할을 모두 수행하지만 추가하고 가져옵니다.concat-map-codec:2 dvbsubInvalid encoder type 'dvbsub'ffmpeg -codeddvbsub

자막을 전체적으로 유지하는 방법은 무엇입니까?순수한 ffmpeg솔루션이 완벽할 수도 있지만 다른 도구가 자막을 더 잘 처리할 수도 있습니다.

답변1

여기에서 다운로드할 수 있는 소프트웨어를 작성했습니다.

비디오 클립mpegts 파일을 잘라서 암시적으로 PS 스트림으로 변환할 수 있는 그래픽 도구입니다. 녹화하지 않으면 매우 빠르게 실행됩니다. 그렇지 않으면 시간이 좀 걸리지만 매우 정확한 절단이 가능합니다. VideoCut은 Debian 및 Arch 시스템에서 테스트되었습니다.

관련 정보