Como posso definir um nível de perfil h.264 com ffmpeg?


16

Eu tenho um filme (m4v / h.264 / AAC) que funciona bem no meu Mac, mas recentemente descobri que ele não será exibido no meu Apple TV3. Depois de examinar as propriedades desse arquivo de filme, vejo que ele possui o perfil High@4.1, mas o suporte apenas para o Apple TV3 até High@4.0. Penso que a única propriedade que está a tornar este vídeo incompatível é a taxa de bits máxima do vídeo, todas as outras propriedades parecem suportadas em High@4.0.

Como posso usar o ffmpeg para fazer o downgrade deste vídeo para High@4.0?

Ou devo alterar a propriedade real (taxa de bits máxima) que torna este vídeo 4.1 em vez de 4.0? Estou preocupado que, se eu apenas alterar a taxa de bits, embora o arquivo seja compatível com o High@4.0, ele ainda será 'marcado' como High@4.1 e, portanto, ainda não será reproduzido no meu Apple TV3.

Respostas:


22

Ao codificar com libx264, você pode definir o perfil e o nível H.264 com:

  • -profile:v - um de high ,, mainou baseline(e outros, mas isso é irrelevante aqui)
  • -level:v- conforme definido no anexo A da norma H.264, por exemplo 4.0,.

Por exemplo:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy output.mp4

Aqui, apenas copiamos o fluxo de áudio, pois não será afetado.

A saída terá o perfil e o nível corretos definidos em seus metadados. Você pode verificar isso enquanto codifica, onde x264diz algo como:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

MediaInfo também pode ajudá-lo a analisar detalhes de contêiner e codec.

Obviamente, a recodificação do vídeo diminuirá sua qualidade até certo ponto, já que você está aplicando uma conversão com perdas novamente. Tente configurar a -crfopção para influenciar o parâmetro de qualidade constante. O valor padrão aqui é 23, enquanto valores entre 18 e 28 são considerados sãos. Menor significa melhor qualidade. Se sua entrada tiver uma taxa de bits de até 65.000 kBit / s, é provável que ainda pareça muito boa após a conversão.


1
Isso funcionou bem. Infelizmente, ele perdeu alguns dos metadados, mas o vídeo real não teve nenhuma alteração perceptível na qualidade. Por interesse, o comando a seguir teria alcançado a mesma coisa? ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
13133 Sam

Sim, as -vopções são aliases dessas :v. Quais metadados você perdeu?
slhck

Eu acho que pode ter sido apenas a obra de arte que foi perdida. Não sei se isso é tecnicamente considerado metadado ... O trabalho artístico está realmente contido no arquivo? Eu não verifiquei tudo antes de adicionar o todo novamente.
Sam

Agora tenho um arquivo diferente com um problema semelhante. É o nível de perfil errado, mas o restante das especificações parece ser compatível com o meu nível exigido (4.0). Se eu usar os comandos que você forneceu acima, eles deixarão os dados intocados, a menos que sejam incompatíveis com o nível de perfil inserido? Basicamente, não quero que o ffmpeg toque em nenhum outro dado que não seja a tag que diz qual perfil e nível é. Isso é possível ou vai definir todos os valores (nitrato, taxa de quadros etc.) para predefinir valores?
24413 Sam

2
Eu apenas me deparei com uma maneira de conseguir isso. Na verdade, o Subler tem uma opção, quando você seleciona o fluxo de vídeo, para alterar o perfil e o nível para torná-lo compatível com determinados dispositivos. Ele diz para você se certificar de que o vídeo é compatível com o perfil que você está configurando, para que eu não ache que recodifique, apenas altere os metadados.
30713 Sam

1

Em referência ao seu comentário , tente este comando:

ffmpeg -i input.mp4 -map 1 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy \
# copies all global metadata from input.mp4 to output.mp4
-map_metadata 0 \
# copies video stream metadata from input.mp4 to output.mp4
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from input.mp4 to output.mp4
-map_metadata:s:a 0:s:a \
output.mp4

Felicidades

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.