Por que o Quicktime não consegue reproduzir um arquivo de filme codificado pelo FFmpeg? [duplicado]

23

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 iSight, mas neste caso as imagens acima são de uma câmera digital. A resolução é muito maior, mas eu 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 do filme de trabalho ser mais longo e com uma resolução de fonte menor, a única diferença que vejo é que existe um "[SAR 1: 1 DAR 4: 3]" mencionado no fluxo de vídeo, mas não tenho ideia do que é isto, ou como tentar forçá-lo no filme que não funciona.

Atualização: Acabei de baixar o VLC e ele reproduz o filme bem. Então eu sei que o ffmpeg não está em falta aqui.

    
por Michael 03.10.2014 / 05:30

1 resposta

32

Com base nessa resposta do StackOverflow , adicionaria -pix_fmt yuv420p ao seu comando dessa maneira; um dos comentários menciona adicionando -vcodec libx264 assim também está incluído aqui:

ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 -s 640x480 \
-pix_fmt yuv420p movie.mp4

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 :

ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 \
-vf scale=640:-2,format=yuv420p movie.mp4

Além disso, foi elaborado no Wiki oficial do FFmpeg sob o título “Codificando para jogadores mudos” ; ênfase minha:

You may need to use -pix_fmt yuv420p for your output to work in QuickTime and most other players. These players only supports the YUV planar color space with 4:2:0 chroma subsampling for H.264 video. Otherwise, depending on your source, ffmpeg may output to a pixel format that may be incompatible with these players.

    
por 03.10.2014 / 05:49