Cómo convertir una película 3D a 2D usando ffmpeg


Respuestas:


9

Si bien es posible que pueda lograr esto utilizando manualmente el filtro de recorte de ffmpeg , el filtro stereo3d está diseñado específicamente para este propósito. No especificó el formato 3D exacto que tiene. Hay varias posibilidades documentadas en el enlace stereo3d anterior. Suponiendo que input.mkves el sbsl relativamente común (lado a lado, ojo izquierdo a la izquierda),

ffmpeg -i input.mkv -vf stereo3d=sbsl:ml -metadata:s:v:0 stereo_mode="mono" output.mkv

resultará en un 2d (solo ojo izquierdo) output.mkv. Creo que la razón -metadata:s:v:0 stereo_mode="mono"para eliminar la etiqueta estéreo es porque los metadatos no se canalizan a través del sistema de filtro, y ffmpeg intenta duplicar los metadatos del original. Si no haces esto, algunos jugadores pueden pensar que tu resultado 2d sigue siendo 3d y hacer cosas raras.

Si encuentra que el resultado tiene una relación de aspecto incorrecta, puede experimentar con el uso stereo3d=sbsl2:mlque trata la entrada como medio ancho de lado a lado. Si todo lo demás falla, puede establecer el aspecto correcto con -aspect 16:9(o lo que sea que sepa que es la relación de aspecto correcta).


1
¿Podría explicar la opción de filtro stereo3d que está usando aquí? Por la documentación de ffmpeg, entiendo que sbsl significa paralelo al lado del otro (ojo izquierdo izquierdo, ojo derecho derecho), pero ¿qué significa: ml? Parece que no puedo localizar esa información.
Élder Geek,

La sintaxis es la siguiente stereo3d=<input-format>:<output-format>. Según la documentación vinculada, mlsignifica generar "salida mono (solo ojo izquierdo)".
kevmitch

Recibí errores al intentar usar -metadata:s:v:0 stereo_mode="mono"con ffmpeg 2.8.14. Parece que la documentación puede haber cambiado desde que escribió esta respuesta. Simplemente quitando los interruptores antes mencionados permitió que ffmpeg continuara sin error. Tenga en cuenta que puede evitar volver a codificar la transmisión de audio utilizando el -c:a copyinterruptor.
Élder Geek

1

Encontré una referencia en este foro. http://www.ffmpeg-archive.org/How-to-re-encode-3d-video-to-2d-video-td4676271.html

ffmpeg -i './a3dmovie.mp4'  -vf "crop=w=iw/2:h=ih:x=0:y=0,scale=w=2*iw:h=ih,setdar=2" -y ./a2dmovie.mp4

La parte importante es la -vf "crop=w=iw/2:h=ih:x=0:y=0,scale=w=2*iw:h=ih,setdar=2"

Básicamente reduce a la mitad la salida y cambia la escala según corresponda para el video 3D.

Descubrí que esto también es útil para probar y verificar la salida

ffplay -i ./some3dmovie.mp4  -vf "crop=w=iw/2:h=ih:x=0:y=0,scale=w=2*iw:h=ih,setdar=2" 

Puede mover el índice al frente del archivo de la siguiente manera -movflags faststart

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.