Quando você passa -c:v libx264
após -i
, está dizendo ao FFmpeg para codificar o fluxo de vídeo de entrada para o vídeo x264. No entanto, você está dizendo para gravar o vídeo em um formato image2
, dentro de um arquivo JPEG. Isso, naturalmente, não vai funcionar. Você pode realmente ver isso no mapeamento de fluxo:
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libx264)
Então vamos fazer o FFmpeg escrever uma imagem JPEG. Use um comando simples em vez disso:
ffmpeg -ss 00:00:10 -i output.mp4 -s 150x150 -vframes 1 assetPathNew.jpg
Desta vez, obtemos o mapeamento de fluxo correto:
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> mjpeg)
Note que o FFmpeg irá escolher automaticamente o container correto. Portanto, você não precisa do -f image2
.
Usar 150x150
provavelmente criará uma imagem esticada e não manterá a proporção original da entrada. Você pode usar o filtro scale
para redimensionar automaticamente, mantendo a proporção:
ffmpeg -ss 00:00:10 -i output.mp4 -filter:v scale=150:-1 -vframes 1 assetPathNew.jpg
Isso provavelmente fornecerá uma saída de 150x113. Se você precisa ter um tamanho de 150 x 150, adicione o filtro pad
para preencher o extra:
ffmpeg -ss 00:00:10 -i output.mp4 -filter:v "scale=150:-1,pad=iw:150:0:(ow-ih)/2" -vframes 1 assetPathNew.jpg