Como converter um filme em 3D para 2D usando ffmpeg

Respostas:

9

Embora você possa conseguir isso usando manualmente o filtro de corte do ffmpeg , o filtro stereo3d foi projetado especificamente para essa finalidade. Você não especificou o formato 3d exato que possui. Existem várias possibilidades, conforme documentado no link stereo3d acima. Supondo que esse input.mkvé o sbsl relativamente comum (olho esquerdo lado a lado à esquerda),

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

resultará em 2d (somente olho esquerdo) output.mkv. Acredito que o motivo -metadata:s:v:0 stereo_mode="mono"necessário para remover a marca estéreo seja porque os metadados não são canalizados pelo sistema de filtros e, por outro lado, o ffmpeg tenta duplicar os metadados do original. Se você não fizer isso, alguns jogadores podem pensar que seu resultado 2D ainda é 3D e fazem coisas estranhas.

Se você achar que o resultado possui a proporção incorreta, experimente usar o stereo3d=sbsl2:mlque trata a entrada como meia largura lado a lado. Se tudo mais falhar, você pode definir o aspecto correto com -aspect 16:9(ou o que você sabe que a proporção correta).

kevmitch
fonte
11
Você poderia explicar a opção de filtro stereo3d que está usando aqui? Entendo pela documentação do ffmpeg que sbsl significa lado a lado paralelo (olho esquerdo esquerdo, olho direito direito), mas o que significa: ml? Não consigo localizar essa informação.
Elder Geek
A sintaxe é stereo3d=<input-format>:<output-format>. De acordo com a documentação vinculada, mlsignifica gerar "saída mono (somente olho esquerdo)".
Kevmitch #
Eu tenho erros ao tentar usar -metadata:s:v:0 stereo_mode="mono"com o ffmpeg 2.8.14. Parece que a documentação pode ter sido alterada desde que você escreveu esta resposta. Simplesmente remover as opções mencionadas acima permitiu ao ffmpeg continuar sem erros. Observe que você pode evitar a recodificação do fluxo de áudio utilizando o -c:a copyswitch.
Elder Geek
1

Encontrei uma referência neste fórum. 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

A parte importante é a -vf "crop=w=iw/2:h=ih:x=0:y=0,scale=w=2*iw:h=ih,setdar=2"

Essencialmente, reduz pela metade a saída e redimensiona conforme apropriado para o vídeo 3d.

Achei que isso também é útil para testar e verificar a saída

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

Você pode mover o índice para a frente do arquivo da seguinte maneira -movflags faststart

nelaaro
fonte