Não, não há uma opção no ffmpeg para especificar uma faixa de legenda que deve ser mostrada por padrão.
(ffmpeg versão 2.6.1 criada com o gcc 4.9.2 (GCC) 20150304 (pré-lançamento) como padrão no Arch, veja o final da resposta para os sinalizadores de compilação)
Os recursos que destacam a falta de opções de linha de comando para configurar o fluxo de legendas padrão / forçado no ffmpeg incluem o seguinte:
- este tópico da lista de discussão de outubro de 2012 (que aprofunda no formato matroska e explica que ffmpeg não escreve nos campos obrigatórios)
- este tópico de janeiro de 2013 (mostra a falta de interesse dos desenvolvedores do ffmpeg por isso)
- este tópico de janeiro de 2014 (pergunta sobre mudar o sinalizador padrão no contêiner Matroska, para nenhum avail)
- este post muito recente no fórum (fóruns MP4, zeranoe ffmeg)
Por fim, esta pergunta no StackOverflow pergunta o mesmo que você, mas para mkv, e destaca o fato de que o ffmpeg é o culpado desde mkvpropedit (parte do mkvtoolnix ) pode fazer isso.
No entanto, existe uma possível solução alternativa
Este relatório de bug do ffmpeg de março de 2013 (ainda aberto) lida com mkv e sinalizador padrão para legendas e explica algo que nós pode usar para contornar essa limitação em alguns cenários:
The Matroska specification - ​http://matroska.org/technical/specs/index.html (search for FlagDefault) - specifies that the value for the default flag is "default" if nothing is specified, the demuxer therefore marks all subtitle tracks as "default".
Então o ffmpeg pode escrever o sinalizador padrão em nosso fluxo de legendas em alguns casos; Eu tentei com arquivos de vídeo de entrada diferentes e obtive resultados mistos:
-
com o Big Buck Bunny AVI Mpeg4 e um arquivo .srt aleatório, o fluxo de legendas remk mkv did tem o sinalizador padrão:
$ ffmpeg -i big_buck_bunny_480p_surround-fix.avi -i subtitle.srt -c copy test.mkv $ ffmpeg -i test.mkv Input #0, matroska,webm, from 'test.mkv': Metadata: ENCODER : Lavf56.25.101 Duration: 00:28:31.40, start: 0.000000, bitrate: 1028 kb/s Stream #0:0: Video: mpeg4 (Simple Profile), yuv420p, 854x480 [SAR 1:1 DAR 427:240], 24 fps, 24 tbr, 1k tbn, 24 tbc (default) Stream #0:1: Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s (default) Stream #0:2: Subtitle: subrip (default)
-
no entanto, não consegui reproduzir isso com uma amostra amostra contendo mp4 H264 nem com um mp4 pessoal, então eu acho que
mp4 --> mkv
não funciona. Mas e se ...?$ ffmpeg -i sample.mp4 -c copy sample.avi $ ffmpeg -i sample.avi -i subtitle.srt -c copy sample.mkv $ ffmpeg -i sample.mkv ... Input #0, matroska,webm, from 'sample.mkv': Metadata: ENCODER : Lavf56.25.101 Duration: 00:28:31.40, start: 0.000000, bitrate: 2 kb/s Stream #0:0: Video: h264 (Constrained Baseline), yuv420p(tv, bt709), 560x320, SAR 1:1 DAR 7:4, 60 fps, 60 tbr, 1k tbn, 60 tbc (default) Stream #0:1: Audio: aac (LC), 48000 Hz, mono, fltp (default) Stream #0:2: Subtitle: subrip (default)
VITÓRIA! Fazer mp4 --> avi
e, em seguida, avi + srt --> mkv
recebe o fluxo de legendas por padrão e o VLC os exibe corretamente.
Claro que é muito rotativo e prefiro não pensar na perda de informações no processo, mas pelo menos funciona.
Resumo
- O ffmpeg definitivamente não está adaptado agora para definir fluxos como padrão ou forçado, O
- mkv é provavelmente melhor que o mp4 como um contêiner de origem, já que ele possui uma ferramenta conhecida que faz o trabalho bem ( mkvpropedit de mkvtoolnix ).
ffmpeg version 2.6.1 built with gcc 4.9.2 (GCC) 20150304 (prerelease) configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-runtime-cpudetect --enable-shared --enable-swresample --enable-vdpau --enable-version3 --enable-x11grab'