2010-07-03 22 views
7

Actualmente estoy usando ffmpeg para convertir videos en varios formatos a archivos flv. También ha surgido una solicitud que consiste en obtener información del subtítulo cerrado del archivo también. ¿Alguien tiene alguna experiencia con esto o sabe que incluso se puede hacer? No veo ninguna opción para eso pero pensé en preguntar y ver.Puede ffmpeg extraer datos de subtítulos

Respuesta

1

Si el título se incluyen como una corriente separada, luego extraerlos es (relativamente) sencillo:

ffmpeg -i input.mov -an -vn -c:s copy -f rawvideo -map 0:s sub.txt 

si es "quemado en" en el archivo de vídeo, entonces usted está probablemente fuera de suerte, pero yo sería más común para los subtítulos que los subtítulos.

2

Para obtener sólo los subtítulos y no cualquier basura meta, me he dado cuenta que

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

funciona mejor para mí.

+0

Gracias Heshy. Veré sobre darle una oportunidad. El proyecto ha avanzado ahora, pero tomaré nota de esto cuando vuelva a aparecer. – spinon

1

Los subtítulos no son flujos separados, ni se graban en la imagen, se entrelazan en las líneas de escaneo EN LA imagen: esta es una extraña idea estadounidense, que en realidad no se usa en ninguna otra parte. Aunque puede comprar DVD que tiene este tipo de subtítulos, generalmente las personas fuera de los Estados Unidos no pueden ver los subtítulos y ni siquiera saben que hay algunos en el archivo.

CCExtractor puede extraer esta información de VOB examinado los metadatos TS: http://ccextractor.sourceforge.net/

+0

parece que para las transmisiones ATSC los subtítulos están de alguna manera "contenidos pero separados" y no son imágenes, por lo que son extraíbles, consulte la respuesta de Anshul. Ahora bien, si ffmpeg puede "superponerlos" de forma adecuada y grabarlos, no estoy seguro, pero al menos es posible extraerlos ... – rogerdpack

6

subtítulos son de 2 formato
1) ATSC estándar americano (apoyo está allí en ffmpeg)
2) japonés ISDB (soporte no está todavía allí en ffmpeg)

puede utilizar el comando

ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map s output.srt 
siguiente

Esto se ha desarrollado recientemente, así que echa un vistazo a tu versión de ffmpeg.

+0

¡Gracias por desarrollar este parche! – tmm1

10

Si alguien, como yo, termina en este hilo, aquí hay una explicación un poco más detallada sobre el comando ffmpeg que funcionó para mí.

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

No parece un requisito duro en la fuente sea de mpegts formato (extensión de archivo .ts). De lo contrario, el filtro lavfi no parece funcionar. La especificación out+subcc obliga a ffmpeg a tratar los subtítulos (que están incrustados en los datos de trama) como flujo separado. Más tarde, -map 0:1 hace que ffmpeg correlacione solo esa secuencia y descarte todo lo demás. El resultado se guarda en output.srt. Dependiendo de su entrada, la asignación puede ser diferente. Una manera fácil de averiguar la asignación de los subtítulos es ejecutar comandos ffprobe, al igual que

$ 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 

corriente Subtitle: eia_608 tiene "índice" 0:1, de manera que es lo que debería ser asignada.

Pocas notas de separación, el orden de los argumentos importa para ffmpeg, -f lavfi debe ir antes de -i move=..., de lo contrario, la especificación no será reconocida. Además, esta característica es bastante reciente, por lo que debe verificar su versión ffmpeg y actualizarla si es necesario.

Cuestiones relacionadas