Depois de mais algumas pesquisas, descobri este post anterior . Então, para gerar o arquivo * .mp4, o truque é usar:
$ ffmpeg -i input.avi -c:v libx264 -crf 22 -c:a libfaac -movflags faststart output.mp4
No entanto, -movflags faststart
faz sentido apenas no caso da geração de mp4. Olhando para man ffmpeg
de um sistema debian / jessie, consegui encontrar o DVD sugerido que rasga a linha:
$ ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi
O arquivo gerado é reproduzido sem problemas na minha configuração, eu posso avançar e retroceder facilmente, então eu acho que o AVI
está propriamente indexado (ou pelo menos é compatível com o que for necessário no protocolo UPnP
).
Com base em algumas informações disponíveis na Internet , parece que apenas o Freebox V5 suporte a um conjunto limitado de formatos e codecs:
- conteneur codec video codec audio résolution maximale acceptée
- ts (mpeg ts) mpeg4 ac52 1280 × 720
- ts (mpeg ts) h264 ac52 1280 x 720
- avi xvid mp3 1280 × 720 e 1440 × 1080
No entanto, há suporte parcial para matroska (* .mkv), caso em que foi mais fácil instalar os codecs mkv de aqui . Então, no final, usei o HandBrake (GUI) para converter DVD em mp4 (alto perfil + otimizado para web ) e, em seguida, transcodifico para mkv:
$ mkvmerge -q -o out.mkv --compression 0:none --compression 1:none in.mp4
Também é necessário certificar-se de usar a opção -map_chapters -1
avconv para garantir que não haja nenhum capítulo no arquivo de saída mkv gerado. Eu tenho sido incapaz de reproduzir qualquer arquivo mkv com capítulos sobre UPnP (usando minidlna), embora eles jogam bem localmente (ou por USB), com Windows Media Player (Windows 8.1).
$ ffmpeg -i input.mkv -map_chapters -1 -c:v copy -c:a copy output.mkv
Como posso fazer com que o cliente FreeBox trave facilmente (pressione o botão fast forward
duas vezes seguidas para fazer a reinicialização do sistema inteiro) usando filmes Full HD (1920x), preciso reduzir o vídeo um pouco (1280x):
$ ffmpeg -i in.mp4 -c:v libx264 -crf 23 -vf scale=1280:-1 -c:a aac -strict experimental -sn -movflags faststart -metadata title="in" out.mp4
Alguns filmes estavam usando ac3 e / ou DTS, o que não funcionou para mim, então ter aac
foi uma solução aceitável. O Windows Media Player não gostava de ac3 sobre UPnP e o FreeBox V5 (firmware 1.5.20) não gostava do som DTS .
Assim, quando a entrada for um contêiner AVI com um fluxo de som ac3, você precisará convertê-lo em mp4 (na verdade mkv para o FreeBox):
$ ffmpeg -i input_with_ac3.avi -c:v copy -c:a copy output.mp4
Se você quiser mkv e não quiser converter primeiro para mp4 e, em seguida, para mkv, precisará de uma solução alternativa para o erro:
[matroska @ 0x1b62100] Can't write packet with unknown timestamp av_interleaved_write_frame(): Invalid argument
Veja, por exemplo, aqui :
$ ffmpeg -fflags +genpts -i input_with_ac3.avi -c copy out.mkv
Atualização: às vezes, usar mpeg4_unpack_bframes
leva a um tamanho de arquivo menor. Veja doc .
Atualização: Preste atenção que se você trabalha no Linux, ntfs-3g
usa como padrão windows_names:off
, então você não deve criar novos arquivos com ':' (o windows media player e o VLC não suportam). Veja aqui .
Atualização: O FreeBox exigirá um formato de pixel específico: -pix_fmt yuv420p
. Também é possível usar -profile:v high -level 4.0
, pois o arquivo * .ts produzido pela caixa está usando esse perfil (ffprobe -show_streams * .ts | grep "perfil \ | level")