Quando tento abrir um filme que acabei de criar com o comando:
ffmpeg -pattern_type glob -i '*.JPG' -s 640x480 movie.mp4
Eu recebo um erro do QuickTime:
The document “movie.mp4” could not be opened.
The file may be damaged or may not be a movie file that is compatible with QuickTime Player.
Eu usei o mesmo comando em um conjunto de imagens geradas a partir de um lapso de tempo do iSight, mas, neste caso, as imagens acima são de uma câmera digital. A resolução é muito mais alta, mas estou escalando para 640x480 e não vejo nada na saída que sugira um problema:
Input #0, image2, from '*.JPG':
Duration: 00:00:04.76, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj422p(pc), 4928x3264, 25 tbr, 25 tbn, 25 tbc
vs. o filme de trabalho:
Input #0, image2, from '*.JPG':
Duration: 00:01:23.72, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p(pc), 640x480 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc
E para a saída:
Output #0, mp4, to 'movie.mp4':
Metadata:
encoder : Lavf55.19.104
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj422p, 640x480, q=-1--1, 12800 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg -> libx264)
vs. para o trabalho:
Output #0, mp4, to 'movie.mp4':
Metadata:
encoder : Lavf55.19.104
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj420p, 640x480 [SAR 1:1 DAR 4:3], q=-1--1, 12800 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg -> libx264)
Além de o filme ser mais longo e com uma resolução de fonte mais baixa, a única diferença que vejo é que há um "[SAR 1: 1 DAR 4: 3]" extra mencionado no fluxo de vídeo, mas não tenho idéia do que isso é, ou como tentar forçá-lo no filme que não funciona.
Atualização: Acabei de baixar o VLC e ele reproduz bem o filme. Então eu sei que o ffmpeg não tem culpa aqui.
ffprobe video.mp4
pode ser usado para verificar qual formato de pixel é usado.Respostas:
Com base nesta resposta StackOverflow, eu adicionaria
-pix_fmt yuv420p
ao seu comando assim; um dos comentários menciona a adição-vcodec libx264
, então está incluído aqui:Ou você pode usar o filtro de formato . Este exemplo usará o filtro de escala em vez de
-s
e o filtro de formato em vez de-pix_fmt
:Também elaborado no Wiki oficial do FFmpeg, sob o título "Codificação para jogadores burros"; ênfase minha:
fonte
-pix_fmt yuv420p
resolveu para mim!