O rasgo apropriado de DVD para servir via UPnP

1

Eu sou um usuário feliz de minidlna (versão 1.0.24) em um antigo Mac Mini G4. Funciona muito bem no meu ambiente. Como o minidlna não permite a transcodificação, eu gostaria de copiar um conjunto de DVDs (principalmente desenhos animados) para visualização. No entanto, eu não consegui entender como codificá-los corretamente com o único propósito de servi-los através do UPnP.

  • Meu provedor de DSL tem um cliente interno (Freebox ADSL, firmware 1.5.20), que simplesmente se recusa a exibir arquivos ISO Media, MP4 Base Media v1 [IS0 14496-12:2003] (* .mp4).
  • Eu tenho um tablet com Windows 8, que não suporta contêineres EBML file / Matroska (* .mkv).

Portanto, preciso usar um contêiner AVI para minha configuração. Agora, a parte complexa é quais são as opções de codificação que eu preciso usar para ripar um DVD para um contêiner AVI ?

Vídeo : testei e o stream de vídeo mpeg4 e x264 funciona. Tanto quanto eu entendo x264 não é uma opção desde que eu uso o contêiner AVI. Então, quais são as opções para um fluxo de vídeo mpeg4 de boa qualidade? Usando tentativa e erro, descobri que o vídeo estava um pouco instável usando um contêiner mkv com o seguinte fluxo:

Stream #0.0(eng): Video: h264 (High), yuv420p, 1280x568 [PAR 1:1 DAR 160:71], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)

Áudio : tive um problema com um arquivo contendo:

Stream #0.1(fre): Audio: dca (DTS), 48000 Hz, 5.1, s16, 1536 kb/s (default)

enquanto qualquer um desses áudio funcionou:

Stream #0.1(fre): Audio: aac, 48000 Hz, stereo, s16 (default)
Stream #0.1: Audio: mp3, 44100 Hz, mono, s16, 128 kb/s (default)

Qual opção de áudio devo escolher?

ponto de bônus : qual é a linha de comando completa avconv ( ffmpeg ) para converter diretamente do dvd (* .vob) para tal AVI? Eu gostaria de evitar o uso de mencoder , já que ele recentemente foi removido do Debian.

EDITAR: Isso é completamente fora do tópico, mas isso pode esclarecer os comentários abaixo. Após vários testes, eu diagnostiquei que o problema do contêiner MPEG-4 está realmente do lado do cliente. Eu não sei porque o cliente se recusa a exibi-lo. Consegui pegar um container * .mp4 e transcodificá-lo usando: mkvmerge -o out.mkv in.mp4 , e agora o arquivo aparece corretamente (e pode ser reproduzido!) No lado do cliente. O mesmo * .mp4 aparece bem no Windows 8 Media Player padrão, então isso definitivamente não é um problema no servidor.

EDIT2: O único truque usado por minidlna para o FreeBox client pode ser visto aqui .

Referências: * Criando vídeos MP4 prontos para streaming HTTP

    
por malat 04.02.2015 / 12:04

1 resposta

0

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")

    
por 05.02.2015 / 09:02