Principais pontos
- Comece com uma predefinição quando ela já corresponder ao alvo de reprodução e substitua apenas as configurações que o produto escolheu deliberadamente.
- Trate o contêiner, o codec de vídeo, o codec de áudio, o perfil, o controle de taxa, o formato de pixel e os filtros como decisões de compatibilidade separadas.
- Selecione um
ffmpeg_stackdeliberadamente e execute novamente os arquivos de teste antes de alterá-lo, pois o comportamento de codificadores e filtros pode variar entre lançamentos.
O controle de codecs raramente é uma escolha de tudo ou nada entre uma predefinição fixa e um comando FFmpeg bruto. A Transloadit permite que um Template parta de predefinições de vídeo ou áudio mantidas, substitua opções individuais suportadas do FFmpeg ou use a predefinição vazia quando o fluxo de trabalho precisa definir as próprias configurações de saída.
O que mais importa
- Use
preset: "empty"com o seletorffmpeg_stack: "v7"explícito recomendado pela documentação do Robot para ter configurações de codificação sem os padrões da predefinição. - Crie codecs alternativos como Steps independentes e depois valide os metadados produzidos e a reprodução, em vez de tratar uma codificação bem-sucedida como aceitação.
Comece pelo alvo de compatibilidade, não por um codec favorito
Antes de escolher parâmetros, anote onde o resultado precisa ser reproduzido ou editado. Um arquivo para entrega no navegador, um master de arquivamento, um download de podcast e um arquivo de intercâmbio têm requisitos diferentes, mesmo quando partem da mesma origem. Registre, para cada alvo, o contêiner, os codecs de vídeo e áudio, os perfis, o layout de canais, as dimensões, a taxa de quadros, a taxa de amostragem, as legendas e o tamanho máximo de entrega exigidos.
Mantenha contêineres e codecs separados nessa matriz. MP4, WebM, Ogg e MOV descrevem como os streams e os metadados são empacotados; H.264, HEVC, VP9, AAC, Opus e FLAC descrevem como cada stream é representado. Um player pode reconhecer um contêiner e ainda assim rejeitar um de seus streams, portanto testes baseados apenas na extensão não conseguem comprovar a compatibilidade.
Alvo de reprodução
Nomeie os navegadores, dispositivos, editores ou especificações de distribuição reais que decidem se uma saída é aceitável.
Política de streams
Especifique os requisitos de vídeo e áudio de forma independente, para que um contêiner válido não esconda um stream não suportado.
Evidências de aceitação
Combine a inspeção de metadados com a reprodução em clientes representativos, em vez de aprovar um arquivo apenas pela extensão.
Aplique substituições suportadas sobre uma predefinição mantida
Uma predefinição é um conjunto versionado de configurações de codificação para um alvo comum. /video/encode e /audio/encode mesclam as entradas do objeto ffmpeg sobre a predefinição selecionada, de modo que uma opção explícita substitui o valor correspondente da predefinição. Essa costuma ser a política sustentável mais enxuta: herde a base estabelecida e registre apenas o comportamento de codec, perfil, controle de taxa, filtro ou contêiner que o produto alterou intencionalmente.
Não copie todas as opções resolvidas da predefinição para um Template só para torná-lo explícito. Isso cria uma predefinição privada que a aplicação precisa entender e manter. Em vez disso, nomeie a predefinição, mantenha o objeto de substituição focado e inspecione o resultado. Se o fluxo de trabalho precisar evitar os padrões do FFmpeg fornecidos pela predefinição, escolha preset: "empty", mantenha explícito o seletor ffmpeg_stack: "v7" recomendado pela documentação e forneça o formato e os codecs necessários.
Base da predefinição
Oferece um ponto de partida documentado para uma saída comum sem exigir que o Template repita todas as opções do FFmpeg.
Objeto de substituição
Registra apenas as configurações suportadas que diferem deliberadamente, e esses valores têm precedência sobre a predefinição.
Predefinição vazia
Torna visível para futuros mantenedores a ausência deliberada de padrões de codificação fornecidos pela predefinição, em vez de depender de um padrão omitido.
Controle deliberadamente as configurações de codec de vídeo e de controle de taxa
O exemplo de vídeo começa com a predefinição web/mp4/1080p, seleciona a linha de stack recomendada v7 e, em seguida, substitui a restrição level do H.264, além das configurações de controle de taxa específicas do produto em ffmpeg. As chaves JSON omitem o hífen da linha de comando: level, crf, maxrate e bufsize se tornam opções de saída do FFmpeg. A predefinição continua fornecendo seu codec de vídeo H.264 (libx264), o perfil high, o formato de pixel yuv420p, o codificador de áudio AAC (libfdk_aac), o contêiner MP4 e movflags: "+faststart"; esses valores herdados não precisam ser repetidos.
Os valores são um exemplo de política, não recomendações universais de qualidade. O CRF, um limite de taxa de bits, o perfil do codificador, o formato de pixel, a complexidade do conteúdo de origem e as restrições de reprodução interagem entre si. Teste textos, animações, granulação, movimento, cenas escuras e material comum de pessoas falando para a câmera na resolução pretendida. Inspecione a saída quanto à qualidade visual e à compatibilidade com decodificadores antes de promover as configurações.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"web_video": {
"use": ":original",
"robot": "/video/encode",
"ffmpeg_stack": "v7",
"preset": "web/mp4/1080p",
"ffmpeg": {
"level": "4.1",
"crf": 21,
"maxrate": "5M",
"bufsize": "10M"
},
"result": true
}
}
}Controle de taxa e conformidade
O CRF mira um nível de qualidade, enquanto maxrate e bufsize limitam a taxa de bits e suavizam picos; os valores úteis dependem do codificador e do destino de entrega. level é algo separado: define um teto de conformidade de decodificador H.264 que limita o tamanho do quadro, a taxa de macroblocos e uma taxa de bits máxima, mas não é a taxa de bits alvo nem o limite de taxa de bits definidos por CRF, maxrate e bufsize.
Base de compatibilidade da predefinição
A predefinição selecionada fornece o perfil e o formato de pixel, que podem importar tanto quanto o nome do codec para hardware mais antigo e decodificadores de navegador.
Início rápido herdado
A predefinição fornece a opção movflags do MP4 para download progressivo, mas isso não substitui o streaming adaptativo nem uma CDN.
Crie uma saída de áudio explícita com a predefinição vazia
O exemplo de áudio usa preset: "empty" com o seletor ffmpeg_stack: "v7" recomendado pela documentação, de modo que o Template fornece suas próprias configurações de codificação em vez de herdá-las de uma predefinição. Mantenha esse seletor explícito em vez de depender da alternativa implícita em tempo de execução v6. O exemplo escolhe o contêiner Ogg, o codificador Opus, uma taxa de bits alvo, uma taxa de amostragem de 48 kHz, dois canais de saída e um filtro passa-alta simples. /audio/encode aceita arquivos de áudio e arquivos de vídeo que contenham um stream de áudio, o que torna o mesmo Step útil para uploads somente de áudio e para fluxos de trabalho de extração de trilha sonora.
A predefinição vazia remove os padrões de codificação fornecidos pela predefinição, e não todos os argumentos adicionados pelo Robot. O Robot /audio/encode ainda adiciona um mapeamento de streams padrão para que a capa incorporada não seja codificada como áudio, e deriva o formato ou a taxa de bits da entrada quando qualquer um desses valores é omitido. Este exemplo declara ambos os valores explicitamente no objeto ffmpeg com f e b:a.
Este exemplo de áudio usa o objeto ffmpeg porque demonstra configurações de codificação explícitas com a predefinição vazia. Para conversões simples que alteram apenas a taxa de bits ou a taxa de amostragem, prefira os parâmetros de Robot documentados de nível superior bitrate e sample_rate. Eles recebem inteiros em bits/s e hertz, por exemplo, 256000 e 48000, enquanto ffmpeg.b:a aceita strings como "128k". O Robot Audio Encode aplica os valores de nível superior após a mesclagem de ffmpeg, portanto eles substituem valores conflitantes de b:a ou ar. Evite especificar a mesma questão em ambos os lugares: um único valor de referência é mais fácil de revisar, testar e alterar.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"podcast_audio": {
"use": ":original",
"robot": "/audio/encode",
"ffmpeg_stack": "v7",
"preset": "empty",
"ffmpeg": {
"f": "ogg",
"codec:a": "libopus",
"b:a": "128k",
"ar": 48000,
"ac": 2,
"af": "highpass=f=80"
},
"result": true
}
}
}Contêiner explícito
A opção f seleciona o formato de contêiner de saída por meio do seu muxer, independentemente de codec:a, de modo que o contêiner e o codec de áudio são escolhidos separadamente.
Política de canais
A opção ac torna visível a quantidade de canais de saída solicitada, em vez de herdar um layout de origem inesperado.
Filtro de áudio
Uma cadeia af pode aplicar filtros compatíveis do FFmpeg, mas cada filtro ainda precisa de verificações representativas de audição e de nível.
Use a flexibilidade do FFmpeg dentro do limite de segurança gerenciado
O valor ffmpeg é um objeto de opções estruturado, não um comando de shell. A Transloadit transforma suas chaves e valores em argumentos para o stack gerenciado do FFmpeg selecionado. Esse limite oferece um controle substancial sem expor a máquina de processamento. Também significa que um Template não pode instalar um build diferente do FFmpeg, adicionar uma biblioteca de codificador indisponível nem presumir que todas as opções da documentação upstream mais recente existem em todos os stacks.
As opções controladas pelo usuário passam por verificações de segurança. Scripts de filtro e diretivas de filtro que leem arquivos locais são rejeitados, incluindo entradas de legenda, fonte e texto baseadas em arquivos. Use parâmetros de Robot e Robots dedicados quando disponíveis, como watermark_url, /video/subtitle ou texto inline em drawtext com uma família de fontes disponível. Trate uma rejeição como um limite que exige redesenhar a solução, e não como um motivo para esconder outro comando dentro de uma string de filtro.
Sem sintaxe de shell
Passe nomes e valores de opções como JSON para que aspas, interpolação e validação permaneçam dentro das Assembly Instructions.
Recursos do stack
Um codificador, muxer ou filtro precisa estar compilado no stack gerenciado selecionado para que uma opção, de resto válida, possa funcionar.
Manuseio seguro de arquivos
Use entradas declaradas e parâmetros de Robot específicos em vez de pedir que um filtro do FFmpeg abra caminhos locais da máquina de processamento.
Crie variantes de codec como Assembly Steps independentes
Um único Step de origem pode alimentar vários Steps de codificação independentes. O exemplo cria variantes de mídia de vídeo H.264/MP4 e VP9/WebM, além de saídas de áudio AAC e Opus. Essas ramificações não precisam de loops no lado da aplicação nem de uploads repetidos: o valor use compartilhado declara a dependência, e cada codificação pode ser executada depois que o arquivo de origem estiver disponível.
Dê a cada Step um nome que descreva o contrato de saída, e não um detalhe de implementação que provavelmente mudará. Uma aplicação pode se importar mais com browser_fallback e modern_web do que com os nomes dos codificadores atuais. Marque como resultados apenas as saídas intencionais, exporte todas as variantes de mídia duráveis e guarde o Assembly ID para que um operador possa relacionar um arquivo rejeitado ao Step e às configurações exatas que o produziram.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"browser_fallback": {
"use": ":original",
"robot": "/video/encode",
"ffmpeg_stack": "v7",
"preset": "web/mp4/720p",
"result": true
},
"modern_web": {
"use": ":original",
"robot": "/video/encode",
"ffmpeg_stack": "v7",
"preset": "web/webm/720p",
"result": true
},
"download_aac": {
"use": ":original",
"robot": "/audio/encode",
"ffmpeg_stack": "v7",
"preset": "aac",
"result": true
},
"download_opus": {
"use": ":original",
"robot": "/audio/encode",
"ffmpeg_stack": "v7",
"preset": "opus",
"result": true
}
}
}Origem compartilhada
Steps irmãos leem o mesmo arquivo enviado ou importado sem exigir que a aplicação o transfira novamente.
Resultados independentes
Cada ramificação de codec tem suas próprias entradas de status, metadados, erro e resultado, para um tratamento preciso na aplicação.
Nomes baseados na finalidade
Nomes de contrato estáveis permitem que a política de codecs subjacente evolua sem obrigar cada consumidor a renomear seu campo.
Versione o Template e teste a mídia produzida
Mantenha a predefinição, as substituições do FFmpeg e ffmpeg_stack em um Template salvo para que os Jobs de produção usem uma única política revisável. A documentação do Robot em produção recomenda o seletor de versão principal v7, enquanto uma requisição que chega ao runtime da API sem seletor usa a alternativa implícita v6; por isso, os exemplos salvam v7 explicitamente. Um seletor de versão principal resolve para o build mais alto disponível dentro dessa versão principal. Por exemplo, v7 resolve para um build v7, e não v8. O seletor descontinuado v5 não é mais um stack válido e agora resolve para v6. Teste mudanças de stack, predefinição ou substituição em paralelo à política atual antes de direcionar todos os novos Jobs para elas.
Uma Assembly bem-sucedida comprova que o comando foi concluído, não que a saída atende ao contrato do produto. Leia os metadados do resultado para verificar codecs, dimensões, duração, taxa de quadros, número de canais e taxa de amostragem e, em seguida, reproduza os arquivos em clientes representativos. Mantenha arquivos de teste reconhecidamente bons e arquivos de teste difíceis, compare o tamanho dos arquivos e o custo de processamento, verifique a sincronização de áudio e vídeo e a navegação na linha do tempo, e mantenha uma alternativa enquanto uma política alterada é implantada.
Template controlado
Mantém a política de codecs reunida e impede que chamadores individuais derivem para combinações não documentadas.
Matriz de arquivos de teste
Abrange os codecs de origem, resoluções, taxas de quadros, canais, metadados e entradas danificadas que a produção realmente recebe.
Verificações de reprodução
Comprove a decodificação, a navegação na linha do tempo, a temporização e a qualidade nos clientes de destino em vez de depender do status de saída do codificador.
Detalhes técnicos que vale a pena conhecer
- O parâmetro
ffmpegé um objeto cujas entradas são mescladas sobre a predefinição selecionada; os valores fornecidos nesse objeto têm precedência sobre as opções correspondentes da predefinição. - Quando quem faz a chamada fornece um objeto
ffmpegsem nomear uma predefinição, a predefinição padrão de vídeo ou áudio não é aplicada, o que evita herdar configurações que depois precisariam ser substituídas. - A predefinição explícita
emptyremove os padrões de codificação fornecidos pelas predefinições, mas o Robot ainda pode adicionar seleção de streams ou alternativas derivadas da entrada quando valores obrigatórios são omitidos. - O seletor de versão principal
ffmpeg_stackresolve dentro da versão principal solicitada:v7seleciona o buildv7mais alto disponível e nunca salta parav8. As versões principais suportadas sãov6,v7ev8. - A documentação do Robot em produção recomenda atualmente
v7, por isso todos os exemplos definemffmpeg_stack: "v7"explicitamente; já uma requisição que chega ao runtime da API sem seletor recorre av6. - O seletor descontinuado
v5é aceito por compatibilidade com versões anteriores, mas não é mais um stack de runtime, então uma requisição que o nomeia é atualizada de forma transparente parav6. Jáv6,v7ev8são executados, cada um, dentro da versão principal solicitada. - Uma opção de contêiner como
f: "mp4"ouf: "ogg"não escolhe o codec de cada stream; os codecs de vídeo e de áudio são controlados de forma independente. As opções de codec de stream aceitam a forma longa (codec:v,codec:a) ou os aliases curtos equivalentes do FFmpeg (c:v,c:a); as predefinições mantidas podem usar qualquer uma das formas, e o Robot trata as duas grafias como intercambiáveis. - O Robot Audio Encode também expõe os parâmetros inteiros de nível superior
bitrateesample_rate, medidos em bit/s e hertz. O objetoffmpegabrange codec, formato, canal, filtro e outras opções suportadas, e aceita valores como"128k"parab:a. - Os nomes de opções do FFmpeg são chaves JSON sem hífen inicial, então a opção de linha de comando
-movflags +faststarté representada como"movflags": "+faststart"dentro do objeto. - A Transloadit valida as opções do FFmpeg controladas pelo usuário com base em uma política de segurança gerenciada; o stack selecionado também precisa conter o codificador, o muxer e o filtro solicitados.
- Steps independentes que usam o mesmo arquivo enviado ou importado podem codificar variantes de codec diferentes sem outro upload, e cada Step aparece separadamente no Assembly Status e nos resultados.
Uma abordagem prática
- 1
Defina os players, dispositivos, editores ou sistemas de distribuição que toda saída precisa suportar.
- 2
Escolha a predefinição mais próxima e registre apenas as substituições suportadas do FFmpeg necessárias para esse alvo.
- 3
Execute uma matriz de arquivos de teste que cubra codecs de entrada reais, canais, taxas de quadros, dimensões e arquivos danificados.
- 4
Armazene o Template, a escolha de stack, as verificações de aceitação e as saídas aprovadas como um único lançamento controlado.
Quando a Transloadit é útil
Use /video/encode e /audio/encode quando um fluxo de trabalho precisar de uma predefinição documentada, de controles selecionados de codec e contêiner, de filtros ou de várias variantes de mídia a partir de uma única origem. Execute a lógica de autorização e de aprovação de saída na sua aplicação, não dentro do Step de codificação, e exporte os resultados aprovados para um armazenamento durável.
Limite da arquitetura
O parâmetro ffmpeg expõe opções do FFmpeg com suporte dentro dos Robots de codificação gerenciados; ele não oferece acesso ao shell, não é uma forma de instalar outro build do codificador e não garante que todas as opções de todas as versões upstream do FFmpeg estejam disponíveis. Opções fora do limite de segurança gerenciado são rejeitadas.
Perguntas frequentes
Posso passar qualquer opção do FFmpeg pelo objeto ffmpeg?
Não. O objeto aceita opções do FFmpeg com suporte, mas a Transloadit as valida antes da execução e bloqueia formas fora do limite de segurança gerenciado. O stack selecionado também precisa conter o codificador, o muxer e o filtro solicitados. Teste exatamente o conjunto de opções com entradas representativas, em vez de presumir que um exemplo feito para outro build do FFmpeg funcionará sem alterações.
Quando devo usar uma predefinição em vez de preset: "empty"?
Use uma predefinição nomeada quando ela oferecer o contêiner, a família de codecs, as dimensões e a base de compatibilidade pretendidos. Adicione um pequeno objeto ffmpeg quando apenas algumas escolhas forem diferentes. Use preset: "empty" quando herdar o comportamento da predefinição obscurecer ou contrariar uma política de codificação explícita, e mantenha explícito o seletor ffmpeg_stack: "v7" recomendado pela documentação.
Como devo escolher um ffmpeg_stack?
Use o stack recomendado atual, a menos que o fluxo de trabalho exija outro seletor de versão principal suportado, e mantenha essa escolha no Template salvo. A documentação de produção do Robot recomenda v7, por isso os exemplos o selecionam explicitamente em vez de depender da alternativa implícita v6 do runtime da API. Antes de migrar um fluxo de trabalho de produção para outro stack, execute os mesmos arquivos de teste de origem, compare os metadados de saída e a reprodução e implante o Template alterado como um lançamento controlado.
Escolher MP4 ou Ogg também define os codecs?
Não. Um contêiner empacota streams, enquanto os codecs definem como esses streams de vídeo e áudio são codificados. Um arquivo MP4 ainda pode conter um codec que o player de destino não suporta. Especifique e inspecione o codec de vídeo, o codec de áudio, o perfil, o formato de pixel e os demais requisitos de reprodução separadamente do contêiner.
Como criar várias variantes de codec a partir de uma única entrada?
Crie Steps paralelos com /video/encode ou /audio/encode que usem todos o mesmo Step de origem. Dê a cada Step um nome estável baseado em sua finalidade, marque as saídas selecionadas como resultados ou exporte-as e valide cada variante independente em relação ao seu próprio alvo de reprodução.