Introdução ao ffmpeg - conceitos básicos de áudio e vídeo

Em relação a áudio e vídeo, acredito que todos já assistiram filmes (vídeos) e ouviram música (áudio), pelo menos deveriam saber que mp4 é um arquivo de vídeo e mp3 é um arquivo de áudio.

Quais atributos um arquivo de áudio e vídeo possui? Tomando o vídeo como exemplo, podemos visualizar as informações do arquivo de mídia através do comando ffmpeg -i.

» ffmpeg -i r1ori.mp4
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with Apple LLVM version 10.0.0 (clang-1000.10.44.4)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-chromaprint --enable-frei0r --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libgme --enable-libgsm --enable-libmodplug --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-librsvg --enable-librtmp --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtesseract --enable-libtwolame --enable-libvidstab --enable-libwavpack --enable-libwebp --enable-libzmq --enable-opencl --enable-openssl --enable-videotoolbox --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.3.0/include/openjpeg-2.3 --enable-nonfree
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'r1ori.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:58.53, start: 0.000000, bitrate: 1870 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 544x960, 1732 kb/s, 29.83 fps, 29.83 tbr, 11456 tbn, 59.67 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

Além das informações meta do vídeo, ele também inclui mais configurações que compilamos no início. Você pode escolher o parâmetro -hide_banner para ocultar essas informações. O comando completo é o seguinte

»ffmpeg -i r1ori.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'r1ori.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:58.53, start: 0.000000, bitrate: 1870 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 544x960, 1732 kb/s, 29.83 fps, 29.83 tbr, 11456 tbn, 59.67 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

Analisamos principalmente alguns dados

  1. Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'r1ori.mp4': # Input #0 significa o primeiro arquivo que entramos através do parâmetro ffmpeg -i, o subscrito começa em 0, ou seja Podemos inserir vários arquivos, na verdade, o ffmpeg também suporta a saída de vários arquivos
  2. Metadados representam metadados de vídeo
  3. A linha Duration contém a duração da reprodução do vídeo de 58,53 segundos, o tempo de início da reprodução é 0 e a taxa de bits de todo o arquivo é de 1870kbit/s
  4. Fluxo #0:0(und): Vídeo: h264, esta linha indica que o primeiro fluxo do arquivo é um fluxo de vídeo, o formato de codificação é o formato H264 (o formato de encapsulamento é AVC1), os dados de cada quadro são representados como yuv420p, a resolução é de 544x960, a taxa de bits do fluxo de vídeo é de 1732kbit/s e a taxa de quadros é de 29,83 quadros por segundo.
  5. Stream #0:1(und): Audio: aac, esta linha indica que o segundo stream do arquivo é um stream de áudio, o formato de codificação é ACC (o formato de encapsulamento é MP4A), e o perfil adotado é a especificação LC, e a taxa de amostragem é de 44,1 KHz, o canal é estéreo, a taxa de bits é de 129 kbit/s

Alguns substantivos desconhecidos começaram a aparecer, vamos apresentá-los por sua vez.

recipiente

Como o arquivo de vídeo acima, diferentes fluxos de dados (fluxos de vídeo, fluxos de áudio e alguns fluxos de legendas, etc.) são encapsulados em um arquivo, que chamamos de contêiner. Como estamos familiarizados com mp4, avi, rmvb, etc. são formatos de contêiner multimídia, em circunstâncias normais, o sufixo de um arquivo multimídia é seu formato contêiner.

Podemos entender um recipiente como uma garrafa, uma jarra ou algo assim.

 Pacote de aprendizagem gratuito de áudio e vídeo , o artigo é finalmente recebido.

Codificação e decodificação (codec)

Codificação: O vídeo e o áudio são gravados e armazenados em um determinado formato ou especificação, que é chamado de codec. A codificação pode ser entendida como o processamento do conteúdo do recipiente.

Os formatos comuns de codificação de vídeo são h264, h265, etc., e os formatos comuns de codificação de áudio são mp3, aac, etc.

Decodificação: É para decodificar os dados codificados de vídeo e áudio em dados brutos de vídeo e áudio não compactados. Por exemplo, se quisermos adicionar eco a um pedaço de áudio, precisamos primeiro decodificar e depois codificar o arquivo de áudio.

Solução soft: decodificação por software, que permite que a CPU decodifique o arquivo de vídeo por meio de software.

Solução difícil: ou seja, decodificação de hardware.Para reduzir a pressão sobre a CPU, a GPU é usada para processar parte dos dados de vídeo que foram originalmente processados ​​pela CPU.

A solução de software precisa processar uma grande quantidade de informações de vídeo, portanto, a solução de software exige muito da CPU e um comando FFmpeg pode matar a CPU.

Em comparação, a eficiência da solução hard é muito alta, mas as deficiências da solução hard também são óbvias: ela não consegue lidar com legendas, qualidade de imagem, etc., assim como a solução soft. Se bem me lembro, a plataforma de nuvem Qiniu (uma plataforma de áudio e vídeo relativamente profissional) ainda não suporta solução difícil.

ffmpeg é a biblioteca de código aberto de decodificação soft mais comum. Na verdade, ela executa a decodificação soft através de algoritmos de codec como H264, H265 e MPEG-4.

No campo de áudio e vídeo de hoje, o ffmpeg suporta quase todos os codecs de áudio e vídeo e é muito poderoso.

Transcodificação: Ou seja, conversão de codificação, que é a conversão do vídeo de um formato para outro. Por exemplo, converta um arquivo flv em um arquivo mp4.

ffmpeg -i input.flv output.mp4

taxa de bits

A taxa de bits, também conhecida como taxa de bits, indica o número de bytes de saída do codificador por segundo, a unidade é Kbps, b é o bit (bit) Esta é a unidade de medida do tamanho do arquivo do computador, 1KB=8Kb, case- sensível, s é o segundo (segundo) ) p para cada (por).

por exemplo

Sob o mesmo algoritmo de compactação (apresentaremos vários algoritmos de compactação diferentes posteriormente), quanto maior a taxa de bits, maior a qualidade do vídeo.

Para arquivos compactados, de acordo com o entendimento acima, o método de cálculo aproximado da taxa de código = tamanho do arquivo / duração.

Por exemplo, o tamanho de r1ori.mp4 é 13,7 MB e a duração é de cerca de 59 segundos, então sua taxa de bits é aproximadamente igual a (13,7 x 1024 x 8) / 59 = 1900 kb/s

Fórmula: 1 MB = 8 MB = 1.024 KB = 8.192 KB

Como ainda existem alguns parâmetros, podemos obter apenas um valor aproximado para essa taxa de código.

Taxa fixa e taxa variável

Nos primeiros anos, quando a codificação de áudio foi selecionada, uma taxa de bits fixa (Constant Bitrate, CBR) foi selecionada, seguida por uma taxa de bits variável (Variable Bitrate, VBR), que se refere à taxa de bits de saída do codificador. por isso é difícil equilibrar "imagem calma" e "imagem dramática". Relativamente falando, a taxa de bits variável pode controlar muito bem o codificador. Quando há mais detalhes e a imagem é relativamente violenta, use mais bits, para imagens relativamente calmas, use bits mais baixos. Desta forma, sob a condição de certa qualidade de saída, o VBR tem mais vantagens, e também daremos prioridade à taxa de bits variável para armazenamento.

frame e taxa de frames

Um quadro refere-se a uma imagem.

Taxa de quadros (quadros por segundo, fps), ou seja, quantos quadros são emitidos por segundo, você também pode entender quantas vezes a imagem é emitida por segundo.

Todos devem ter uma experiência profunda ao jogar o jogo. Quando o jogo trava, a imagem pula de quadro em quadro, o que é muito instável.

A taxa de quadros afeta a suavidade da imagem. Quanto maior a taxa de quadros, mais suave a imagem.

Devido ao fenômeno da persistência da visão (ou seja, quando o objeto está se movendo rapidamente, depois que a imagem vista pelo olho humano desaparece, o olho humano pode continuar retendo a imagem de cerca de 1/24 de segundo da imagem), então para vídeo de filme geral, a taxa de quadros mínima necessária é 24, que é 1/24 = 0,042 segundos de exposição por quadro.

Resolução

As resoluções devem ser familiares a todos, como Blu-ray 1080P, 720P ultra-nítido e 540P de alta definição comumente vistos em um site de vídeo.

A resolução pode ser entendida como o tamanho da tela do vídeo, ou seja, a largura e a altura do vídeo. 720P significa que a altura é de 720 pixels.

Depois de entender a taxa de bits e a taxa de quadros, descobrimos que não se pode dizer com certeza que quanto maior a resolução, mais nítido o vídeo, mas como equilibrar a relação entre a taxa de bits, a taxa de quadros e a resolução.

Em geral, estamos mais dispostos a aceitar vídeos com menor volume de vídeo e maior definição, um é conveniente para armazenamento e o outro é que eles parecem legais.

Com perdas e sem perdas

Antes de tudo, vamos falar sobre o que são os dados brutos de áudio e vídeo? Dados brutos referem-se aos dados coletados por equipamentos de áudio e vídeo sem qualquer processamento. Os dados brutos de áudio estão no formato pcm e os dados brutos de vídeo estão no formato yuv.

Com e sem perdas, ou seja, com ou sem perda, aqui está um termo para compressão de dados multimídia. A compressão com perdas também é chamada de compressão destrutiva, claro que não é o tipo de dano que não pode ser descomprimido após a compressão. Por exemplo, nossos arquivos mp3 e mp4 comuns são compressão com perdas.

Tomando como exemplo a codificação de áudio, o som no áudio vem da natureza, capturamos o som através de soluções técnicas e depois o armazenamos de acordo com um determinado algoritmo.

Neste estágio, o som que armazenamos não pode ser completamente restaurado ao som da natureza, e qualquer codificação de áudio tem perdas.

Alguns alunos podem ter que fazer perguntas. Vejo uma introdução de artigo. Os dados de áudio originais não estão no formato pcm?

Na verdade, a codificação pcm é apenas infinitamente próxima a sem perdas e pode atingir a mais alta fidelidade do sinal. Portanto, a codificação pcm é considerada uma compressão sem perdas.

Bom áudio, quero ouvir o som mais autêntico da natureza, por que comprimi-lo?

Os dados brutos são muito grandes para serem armazenados

Mesmo que esteja armazenado, é inconveniente para transmitir e requer uma largura de banda enorme.

Agora a taxa de compressão do vídeo é muito alta, como 4k 8k que todos estão familiarizados agora, parece atender totalmente às necessidades

Multiplexadores e Demultiplexadores

Para contêineres, observe que isso é para contêineres e geralmente temos duas operações frequentes.

Retirando os dados de áudio e vídeo do contêiner, chamamos isso de decapsulação, que é feito pelo descapsulador demuxer (também conhecido como demultiplexer).

O empacotamento dos dados de áudio e vídeo processados ​​no contêiner é chamado de encapsulamento, que é completado pelo encapsulador muxer (também conhecido como multiplexador).

Continuaremos a atualizar os conceitos relacionados a áudio e vídeo neste artigo. Se você achar que há algum conceito difícil de entender, deixe-me uma mensagem e eu coletarei e complementarei.

Acho que você gosta

Origin blog.csdn.net/yinshipin007/article/details/126394743
Recomendado
Clasificación