2010-07-03 6 views
7

현재 ffmpeg를 사용하여 다양한 형식의 비디오를 flv 파일로 변환하고 있습니다. 하나의 요청 또한 올랐고, 그것은 파일에서 자막 정보를 얻는 것입니다. 누구든지 이것에 대한 경험이 있거나 그것을 할 수 있다는 것을 알고 있습니까? 나는 그것을위한 어떤 옵션도 보지 않지만, 내가 물어 보았을 것이라고 생각했다. 자막은 별도의 스트림으로 포함 된 경우ffmpeg는 자막 데이터를 추출 할 수 있습니다

답변

1

, 다음 그들 (상대적으로) 간단됩니다 추출 :

가 비디오 파일의 "에서 연소"만약
ffmpeg -i input.mov -an -vn -c:s copy -f rawvideo -map 0:s sub.txt 

, 그때는 아마 운이있어, 그러나 자막보다 자막보다 더 일반적입니다. 다만 자막 및되지 않은 메타 쓰레기를 얻기 위해

2

는, 나는

ffmpeg -i input.mov -an -vn -bsf:s mov2textsub -scodec copy -f rawvideo sub.txt 

나를 위해 가장 적합한 것으로 나타났습니다.

+0

감사합니다. Heshy. 나는 그것을 시도하는 것에 대해 알게 될 것이다. 프로젝트는 지금 진행 중입니다 만, 돌아올 때 이것을 메모 해 두겠습니다. – spinon

1

폐쇄 자막은 별도의 스트림이 아니며 그림에 구운 것도 아니고 그림의 스캔 라인에 인터레이스되어 있습니다. 이것은 이상한 미국 아이디어로 다른 곳에서는 실제로 사용되지 않습니다. 이런 유형의 자막이있는 DVD를 구입할 수도 있지만 일반적으로 미국 이외의 국가에서는 자막을 볼 수 없으며 파일에 자막이 있는지조차 알지 못할 수도 있습니다.

CCExtractor는 TS 메타 데이터를보고 VOB의에서이 정보를 추출 할 수 있습니다 : 지원)는 FFmpeg에서
2) ISDB 일본어 표준이 2 포맷
1) ATSC 미국 표준 (의 http://ccextractor.sourceforge.net/

+0

ATSC 스트림의 경우 캡션이 어떻게 든 "포함되어 있지만 분리되어 있으며"이미지가 아니므로 추출 할 수 있습니다. Anshul의 대답을 참조하십시오. 이제 ffmpeg가 적절하게 "오버레이"하여 불에 태울 수 있지만 추출은 가능합니다 ... – rogerdpack

6

자막입니다

당신은 명령

ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map s output.srt 
에게를 사용할 수 있습니다 (지원는 FFmpeg에 아직있다)

이 문제는 최근에 개발되었으므로 ffmpeg의 버전을 확인하십시오.

+0

이 패치를 개발해 주셔서 감사합니다! – tmm1

10

나를 좋아하는 사람이라면 누구나이 스레드에서 끝납니다. ffmpeg 명령에 대한 좀 더 자세한 설명은 나에게 도움이됩니다.

ffmpeg -f lavfi -i movie=input.ts[out+subcc] -map 0:1 output.srt 

소스에 하드 요구 사항은 mpegts 형식 (파일 확장자 .ts)이 될 것 같다. 그렇지 않으면 lavfi 필터가 작동하지 않는 것 같습니다. out+subcc 스펙은 ffmpeg가 (프레임 데이터에 임베드 된) 폐쇄 캡션을 별도의 스트림으로 처리하도록합니다. 나중에 -map 0:1ffmpeg을 해당 스트림에만 매핑하고 나머지는 모두 버립니다. 결과는 output.srt에 저장됩니다. 입력에 따라 매핑이 다를 수 있습니다. 즉 매핑해야 무엇 때문에 자막 매핑을 파악하기 쉬운 방법 중 하나는, 그래서

$ ffprobe -f lavfi -i movie=input.ts[out+subcc] 
ffprobe version N-79653-g4efd3ec Copyright (c) 2007-2016 the FFmpeg developers 
    libavutil  55. 22.101/55. 22.101 
    libavcodec  57. 38.100/57. 38.100 
    libavformat 57. 34.103/57. 34.103 
    libavdevice 57. 0.101/57. 0.101 
    libavfilter  6. 44.100/6. 44.100 
    libswscale  4. 1.100/4. 1.100 
    libswresample 2. 0.101/2. 0.101 
    libpostproc 54. 0.100/54. 0.100 
[h264 @ 0x7fe869826200] Increasing reorder buffer to 1 
Input #0, lavfi, from 'movie=input.ts[out+subcc]': 
    Duration: N/A, start: 1562.233011, bitrate: N/A 
    Stream #0:0: Video: rawvideo (I420/0x30323449), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 90k fps, 30 tbr, 90k tbn 
    Stream #0:1: Subtitle: eia_608 

스트림 Subtitle: eia_608있다 "인덱스"0:1처럼 ffprobe 명령을 실행하는 것입니다.

몇 가지 이형주의 사항은 ffmpeg에 대한 논점 순서가 중요합니다. -f lavfi-i move=... 이전이어야합니다. 그렇지 않으면 사양이 인식되지 않습니다. 또한이 기능은 아주 최근 버전이므로 ffmpeg 버전을 다시 확인하고 필요한 경우 업그레이드하십시오.

관련 문제