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
- 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
- Metadados representam metadados de vídeo
- 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
- 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.
- 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.