Estou executando o FFmpeg versão 4.3.1 — conforme instalado via Homebrew — no macOS Catalina (10.15.7). E esta manhã eu estava executando um comando FFmpeg padrão para usar as legendas de mesclagem MP4 e SRT:
ffmpeg -y -i input.mp4 -i input.srt -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=eng output.mp4
Quando de repente falhou com estas linhas na tela:
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #1:0 -> #0:2 (subrip (srt) -> mov_text (native))
Press [q] to stop, [?] for help
Segmentation fault: 11
Isso é estranho para mim, já que usei exatamente o mesmo comando alguns dias atrás - e até mesmo no passado - sem problemas.
A verificação do próprio arquivo de saída mostra apenas o seguinte como conteúdo; parece ter morrido imediatamente ao criar cabeçalhos para o arquivo de saída:
ftypisomisomiso2avc1mp4freemdat
A verificação de alguns dos meus arquivos MP4 utilizáveis mostra que ftypisomisomiso2avc1mp4freemdat
também faz parte do conteúdo inicial desses arquivos. Mas os arquivos MP4 que funcionam claramente têm cabeçalhos e conteúdo binário além disso.
Por que diabos isso está acontecendo de repente em um comando de cópia / mesclagem de conteúdo tão simples? Este comando não faz nada além de mesclar um vídeo MP4 com legendas sem transcodificação de conteúdo e deve levar menos de um segundo ou mais para fazer seu trabalho.
A única coisa a notar é uma execução regular brew update
e brew upgrade
com pouco ou nenhum problema. Mas estou assumindo que uma atualização recente do FFmpeg causou esse problema. Aqui está a saída da versão completa na minha máquina macOS para referência:
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 12.0.0 (clang-1200.0.32.21)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
O que pode ser feito para corrigir isso? Simplesmente esperar que uma nova versão/patch do FFmpeg seja lançada para resolver o problema? Existe talvez um parâmetro que possa ser adicionado a esse comando para garantir que o comando funcione conforme o esperado?
NOTA : Parece que houve uma atualização do FFmpeg por volta de 6 de novembro de 2020 da versão
4.3.1_2
para4.3.1_3
que resolveu esse problema. Portanto, este foi um bug transitório que foi esclarecido. Deixando a resposta para referência futura se alguém tiver problemas semelhantes.A única solução que tenho para isso é uma solução alternativa de usar uma versão anterior do FFmpeg.
Eu sei que o FFmpeg 2.8.17 é duas versões principais atrás da versão 4.3.1, mas para o meu propósito de encontrar rapidamente uma solução para mesclar um MP4 com legendas sem transcodificação, esta solução foi rápida de implementar e resolver meu problema.
Enquanto espero que haja um parâmetro que possa ser adicionado ao comando para superar esse problema, sem saber mais o que fazer, lancei uma VM Ubuntu 16.04 que configurei no VirtualBox, instalei o FFmpeg nele, copiei o vídeo e as legendas para que o Ubuntu 16.04 VM, executou o mesmo comando e tudo funcionou como esperado.
A versão instalada do FFmpeg no Ubuntu 16.04 se você simplesmente executar
sudo aptitude install ffmpeg
é 2.8.17; que é definitivamente uma versão inferior que tenho via Homebrew (4.3.1) no macOS, mas para mesclar legendas puramente, funcionou.Aqui está a saída da versão completa do FFmpeg na VM Ubuntu 16.04 para referência: