ffmpeg 또는 mplayer를 사용하여 MKV 파일에서 자막 추출


3

여러 자막 세트가 포함 된 MKV 파일은 자막이 전혀없는 SmartTV 또는 유사한 장치에서 재생을 거부합니다. mplayer는 문제없이 파일을 관리합니다. 파일에있는 내용은 다음과 같습니다.

$ ffprobe input.mkv |& grep Stream
Stream #0:0(zxx): Video: h264 (High), yuv420p(progressive), 716x360 [SAR 32:27 DAR 2864:1215], SAR 212:179 DAR 106:45, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0:1(spa): Audio: ac3, 48000 Hz, stereo, fltp, 224 kb/s (default)
Stream #0:2(eng): Subtitle: dvd_subtitle, 720x480 (default)
Stream #0:3(fre): Subtitle: subrip
Stream #0:4(por): Subtitle: subrip

저의 능력이 부족한 플레이어는 SRT 이외의 자막 형식에 대처할 수 없습니다. 문제는 MKV 파일에서 기존 영어 자막 트랙을 추출하여 SRT로 변환 한 다음 선택적으로 다시 MKV 파일에 추가하는 것입니다.

"SRT 자막이 포함 된 MP4 파일을 본 적이 없습니다"외에 다른 질문 ( DVD 자막을 텍스트로 변환 )이 응답하지 않았습니다.

아마도 결정적인 https://trac.ffmpeg.org/wiki/ExtractSubtitles 에는 실제 ffmpeg 작업과 일치하지 않는 정보가 포함되어 있습니다. 이것은 내 ffmpeg입니다.

$ ffmpeg -v
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 7.1.0 (GCC)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/man --disable-static --enable-shared --enable-runtime-cpudetect --enable-avresample --enable-gpl --enable-version3 --enable-pthreads --enable-postproc --disable-debug --disable-indev=jack --disable-outdev=jack --arch=x86_64 --enable-pic --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gnutls --enable-libcaca --enable-libcdio --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libmp3lame --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libpulse --enable-libsmbclient --enable-libwavpack
libavutil      55. 58.100 / 55. 58.100
libavcodec     57. 89.100 / 57. 89.100
libavformat    57. 71.100 / 57. 71.100
libavdevice    57.  6.100 / 57.  6.100
libavfilter     6. 82.100 /  6. 82.100
libavresample   3.  5.  0 /  3.  5.  0
libswscale      4.  6.100 /  4.  6.100
libswresample   2.  7.100 /  2.  7.100
libpostproc    54.  5.100 / 54.  5.100

그리고 이것이 성공하지 않고 시도한 것입니다.

$ ffmpeg -i input.mkv -map 0:2 subs-EN.srt
...
Stream mapping:
  Stream #0:2 -> #0:0 (dvd_subtitle (dvdsub) -> subrip (srt))
  Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
$ ffmpeg -codecs | grep dvdsub
...
DES... dvd_subtitle DVD subtitles (decoders: dvdsub ) (encoders: dvdsub )

따라서 dvdsub 디코더는 ffmpeg로 컴파일되지만 (자막이 mplayer에 표시되지 않음) 변환되지 않습니다.

나는 또한 시도했다

$ mplayer -dumpsrtsub -dumpfile subs-EN.srt -sid 0 input.mkv 
MPlayer 1.3.0-7.1.0 (C) 2000-2016 MPlayer Team
...
[lavf] stream 0: video (h264), -vid 0
[lavf] stream 1: audio (ac3), -aid 0, -alang spa
[lavf] stream 2: subtitle (dvdsub), -sid 0, -slang eng
[lavf] stream 3: subtitle (srt), -sid 1, -slang fre
[lavf] stream 4: subtitle (srt), -sid 2, -slang por
...

올바른 자막 스트림이 재생되고 있지만 subs-EN.srt에는 아무것도 쓰지 않습니다.

내가 무엇을 잘못하고 있지?



내가 참조. 감사. "dvdsub"를 요약하는 것은 텍스트 기반 자막 형식이 아니며 (놀라운 점은 렌더링에 사용 된 글꼴을 변경할 수 있기 때문에) srt로 변환하려면 OCR이 필요합니다. 그러나 비디오에 오버레이로 "번인"될 수 있습니다. 불행히도, 당신이 제공하는 두 가지 명령 중 어느 것도 잘 작동하지 않습니다. ffmpeg -i input.mkv -vf subtitles = input.mkv -acodec copy -sn conversion.mkv 또는 ffmpeg -i input.mkv -filter_complex "[0 : v : 0] [0 : 2] 오버레이 "-acodec copy -sn
conversion.mkv

ffmpeg -i input.mkv -vf subtitles = input.mkv -acodec copy -sn conversion.mkv가 해당 필터를 불평하지 않습니다 : '자막' ffmpeg -i input.mkv -filter_complex "[0 : v : 0] [0 : 2 ] overlay "-acodec copy -crf 20 -sn conversion.mkv 는 끔찍한 품질 출력을 생성합니다.
Edward Sternin

끔찍한 품질 출력 -> 자막 부분 또는 전체 그림? 후자의 경우, 픽처는 그 픽셀 내에 및 / 또는 저해상도의 스프라이트를 가질 수있다. 먼저 텍스트로 OCR 경로를 제안합니다. 자막 필터 libass를 컴파일 / 링크해야합니다.
Gyan

비디오 대역폭이 매우 제한된 것처럼 전체 이미지가 고르지 않습니다. 실제로 -crf 20을 추가 해도 품질이 크게 향상되지는 않았습니다. 자막 내에 스프라이트 (?)가 있으며 해상도도 좋지만 결정적이지는 않습니다. 나는 당신이 모든 포럼에서 유일하게 독특하고 특이한 소프트웨어 인 ffmpeg를 이해하는 것 같습니다. 양해 해 주셔서 감사합니다.하지만 나머지 지역보다 몇 년 앞서서 계속 노력하고 있습니다. mplayer / mencoder 내에 동등한 전략이 있습니까? 나는 그 논리를 더 잘 이해하는 것 같습니다.
Edward Sternin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.