Eu queria poder fazer isso várias vezes agora, então pergunto.
Se eu tiver um arquivo de vídeo ou áudio existente ffmpeg
, mplayer
e outros players de mídia puderem detectar pelo menos alguns de seus "bens", como contêiner, codec e taxa de bits usados, provavelmente várias configurações específicas de qualidade e codificação etc.
Como posso extrair essas configurações de um arquivo existente para usá-las (diretamente) na codificação com ffmpeg?
Por exemplo, recebi um mkv
vídeo codificado x264
com algumas configurações e outro avi
arquivo não compactado . Gostaria de "copiar" as configurações de codificação usadas no arquivo x264 mkv para transcodificar o avi com as mesmas configurações.
Nota: Estou procurando uma maneira que não inclua trabalho humano com "traduzir" as configurações de um decodificador para o codificador. Tudo bem se eu precisar extrair as configurações primeiro e salvá-las em algum lugar, mas gostaria de poder simplesmente alimentar as opções de leitura em uma linha de comando ou predefinir o arquivo de configuração do ffmpeg.
ffprobe
(especialmente com o-show_streams
e-show_format
opções) e usar essa informação para o script as coisas importantes-crf
opção é geralmente recomendado. Consulte o Guia de codificação FFmpeg e x264 .channels:6
de um arquivo de vídeo, mas para codificá-lo, precisará usar o comutador-ch:6
. Alguns switches usar uma carta, alguns usam dois, etc.Respostas:
Não há maneira automática de fazer isso. Você precisa observar os parâmetros do arquivo original e aplicá-los ao arquivo de saída.
Na maioria dos casos, estes serão os seguintes:
-filter:v scale
ou-s:v
-filter:v fps
-r
-pix_fmt
(por exemplo,-pix_fmt yuv420p
deve oferecer a melhor compatibilidade)-g
Mas mesmo se você acertar tudo isso, alguns dispositivos podem exigir informações proprietárias específicas incorporadas ao fluxo de bits.
Quanto à tarefa específica de usar
x264
, isso não será trivial. Não conheço um único script que cuide dessas tarefas, que geralmente são feitas manualmente. Para obter mais informações sobre as configurações de codificação, no Unix / Linux ou OS X, você pode usarmediainfo
alguns truques do Bash.Por exemplo, para um vídeo codificado em x264 em um arquivo MP4:
Isso produzirá uma lista de opções x264:
Você poderia então passar manualmente essas opções para o binário x264.
Se você passar pelo FFmpeg, isso é um pouco mais complicado, pois nem todas as opções do x264 podem ou devem ser mapeadas dessa maneira. Note-se que muitas vezes uma simples especificação pré-definido, e sintonizar perfil fará bem (como visto na
x264 --fullhelp
e o guia de codificação x264 ), e dependendo do nível de CRF é o suficiente.E isso nem leva em consideração o áudio, onde, felizmente, não existem muitas opções.
fonte
mediainfo
saída e mapeia essas opções para ffmpeg-x264-params
. (Consulte também o guia de codificação x264 ). Mas se você deseja uma solução geral para todos os tipos de codecs / codificadores ou formatos de contêiner, precisará escrever um script moderadamente sofisticado que faça a conversão.