Qual linha de comando do ffmpeg corresponde à que o YouTube usa?

2

Estou tentando usar a mesma linha de comando que o YouTube usa para qualidade etc. em contêineres H.264 / MP4. Eu tenho trabalhado na conversão de vídeos em vários formatos, escalas, tamanhos e ajuste das taxas de bits e taxas de áudio para corresponder ao que o YouTube disse que elas usam.

Em uma casca de noz, aqui está o que eu uso:

-pix_fmt yuv420p -profile:v baseline -level 3.0 -acodec libfaac -ar 44100 -ac 2 -ab 192k -aspect 16:9 -r 24000/1001 -movflags +faststart

Agora, se eu devo explicar por que esses valores são o que são? Você deve primeiro ver o que o YouTube nos diz o que eles usam aqui.

Então, vamos entrar em detalhes

  1. átomo moov na frente do arquivo (Início rápido)
  2. Canais: Estéreo ou Estéreo + 5.1
  3. Taxa de amostragem 96khz ou 48khz
  4. Varredura progressiva (sem entrelaçamento)
  5. Alto perfil
  6. 2 quadros B consecutivos
  7. GOP fechado. GOP de metade da taxa de quadros.
  8. CABAC
  9. Subamostragem de croma: 4: 2: 0
  10. Taxa de quadros
  11. O YouTube usa players de formato 16: 9.
  12. Codec de áudio: AAC-LC

Na linha de comando do ffmpeg, eles se tornam os seguintes.

  1. -movflags +faststart
  2. -ac 2
  3. -ar 48000
  4. Não tenho certeza qual é o comando para isso. (FFMPEG Por padrão, a codificação é progressiva.)
  5. -profile:v high -level 4.0
  6. -bf 2 (O padrão do FFMPEG é 16.)
  7. -g 12ou -g 15varia no FPS do YouTube. (O padrão 12 funciona para 24-25 fps. Para NTSC e 30 fps, selecione 15. * Opção FFMPEG:, -gNão tenho certeza qual é o FPS padrão do youtube se for 24 ou 30. Presumo 24, pois o padrão 12 seria metade da taxa de quadros e 15 se a taxa de quadros for 30.)
  8. -coder 1 (Por padrão, CABAC é o codificador de entropia usado por x264.)
  9. -pix_fmt yuv420p (Minha opinião é que todo mundo precisa adicionar isso obrigatório, ou talvez todos os players que não sejam baseados em FFmpeg não suportem decodificação adequada de YUV 4: 2: 2 ou YUV 4: 4: 4. Portanto, yuv 4: 2: 0 é necessário.)
  10. -r 24000/1001 (Suponha que a taxa de quadros padrão do YouTube seja 24.)
  11. -aspect 16:9
  12. -acodec libfaac

Mas eu sei que provavelmente existem alguns comandos que estão faltando ou que preciso mudar, se alguém quiser ajudar. E corrija / me diga o que preciso alterar / adicionar.

Como quero usar um perfil de linha de base, não uso CABAC, GOP ou B-Frames na minha linha de comando, pois todos ficam desabilitados e irrelevantes.

C0nw0nk
fonte
3
1. A publicação da fonte PHP aqui provavelmente não ajudará muito. Nem todo mundo entende PHP, então mesmo eles sabem a resposta que não podem responder. 2. A codificação de 4K na linha de base é incrivelmente burra. 3. Não defina -aspect. Isso estragará sua codificação.
Timothy Gu
Obrigado, editei meu código acima e coloquei $ fcmd nele para que eu possa controlar as propriedades da linha de comando para cada tamanho / qualidade do vídeo que está sendo gerado 360p 480 etc em 4k e 2k devo configurá-los para usar -profile: v high?
C0nw0nk
11
O link do YouTube que você acabou de mostrar como você deve codificar seus vídeos para fazer upload no YouTube. Não é necessariamente o que eles estão usando internamente (e eu sei disso de fato). Se você deseja 24 FPS, por que está usando 24000/1001?
slhck
Então, ninguém sabe qual linha de comando eles usam internamente? Eu li que é assim que você define a taxa para 24?
C0nw0nk
3
Bem, as pessoas do YouTube conhecem, é claro, e alguns pesquisadores com quem trabalham juntos (conversei recentemente com um deles em uma conferência). Você também pode baixar MP4s do YouTube em todos os tipos de formatos (itags), por exemplo, usando youtube-dle analisando o fluxo de bits em relação a GOPs, tipos de quadros B etc. A verdadeira questão é: por que você deseja combinar essas configurações tão de perto? Qual é o caso de uso? (Se você quiser 24 fps, basta configurar -r 24...)
slhck