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 [email protected], mas o suporte apenas para o Apple TV3 até [email protected]. 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 [email protected].

Como posso usar o ffmpeg para fazer o downgrade deste vídeo para [email protected]?

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 [email protected], ele ainda será 'marcado' como [email protected] e, portanto, ainda não será reproduzido no meu Apple TV3.

Sam
fonte

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.

slhck
fonte
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

Riccardo Volpe
fonte