ffmprovisr: uma coletânea de receitas para montar comandos do FFmpeg com facilidade
(amiaopensource.github.io)- ffmprovisr é um site de apoio à criação de comandos em que usuários com dificuldade para montar comandos do FFmpeg podem escolher uma tarefa e ver comandos de exemplo e explicações de cada flag
- As receitas se concentram em
ffmpeg,ffplayeffprobe, mostrando de forma decomposta elementos como arquivo de entrada, codec, filtros, mapeamento de streams e contêiner de saída - O escopo coberto é amplo, indo de remux/transcodificação a cortar e unir, legendas e marca-d'água, miniaturas e GIFs, arquivos de teste, metadados, checksums e relatórios do QCTools
- Não há busca própria, mas é indicado expandir todas as receitas e usar a busca do navegador para encontrar a palavra-chave necessária
- Além do FFmpeg, também aborda ferramentas como ripping de CDDA, ImageMagick e
flac, podendo ser usado como uma coletânea de comandos práticos para fluxos de trabalho de preservação digital
O que o ffmprovisr oferece
- O ffmprovisr fornece comandos de exemplo por tarefa e explicações das opções, reduzindo a carga de ter que montar comandos do FFmpeg manualmente
- O usuário clica no botão da tarefa para ir a um único comando ou a uma lista de comandos relacionados e, então, verifica o comando de exemplo e o comportamento de cada flag
- A própria página não tem função de busca, e orienta a abrir todas as receitas e usar
ctrl+foucmd+fpara pesquisar no navegador - Como materiais de referência básicos, ele aponta para o site oficial do FFmpeg, as installation instructions de Reto Kromer, o Command Line Crash Course e o explainshell.com
- A licença é a Creative Commons Attribution 4.0 International License
Forma básica de ler comandos do FFmpeg
- Depois de instalado, o FFmpeg é chamado digitando
ffmpegno prompt de comando - Os comandos normalmente são compostos por pares de flag e valor
- Em
-i input_file.ext,-ié a flag que especifica o arquivo de entrada, einput_file.exté o arquivo de destino - Em
-c:v prores,-c:vespecifica a codificação do stream de vídeo, eproresé o codec a ser usado
- Em
- O nome do arquivo de saída vem no fim do comando e é especificado pelo nome do arquivo, sem uma flag de saída separada
- O
ffmpegsalva o vídeo, enquanto offplaypode reproduzir o vídeo gerado sem salvá-lo- Um exemplo de gravação de barras SMPTE é
ffmpeg -f lavfi -i smptebars=size=640x480 -t 5 output_file - Um exemplo de reprodução de barras SMPTE é
ffplay -f lavfi smptebars=size=640x480 - O exemplo com FFmpeg precisa de
-i, do tempo de gravação-t 5e do arquivo de saída, mas o exemplo com FFplay não precisa de-i
- Um exemplo de gravação de barras SMPTE é
Pontos de verificação para reduzir erros
- É preciso verificar se o arquivo de saída abre, é reproduzido e parece e soa como o esperado
- A extensão de saída deve corresponder ao codec pretendido, e algumas extensões levam o FFmpeg a usar determinados codecs por padrão
- Por exemplo,
.mp4pode ser configurado por padrão para codificação H.264
- Por exemplo,
"Error: No such file or directory"pode ocorrer por diretório incorreto, erro de digitação, espaço faltando ou flags coladas de forma errada- No macOS, para ir à pasta Downloads, usa-se
cd $HOME/Downloads - Mesmo que um comando copiado e colado pareça correto, se houver erro, recomenda-se redigitá-lo manualmente na linha de comando
- No macOS, para ir à pasta Downloads, usa-se
"Could not find tag for codec"pode ocorrer ao tentar remuxar um arquivo com codecs de áudio ou vídeo incompatíveis com a extensão de saída- É possível primeiro transcodificar para um codec apropriado ou remover
-c copyquando se tiver certeza de que a extensão fará a codificação automática com o codec correto
- É possível primeiro transcodificar para um codec apropriado ou remover
"Killed"pode aparecer quando o arquivo excede a capacidade de memória do servidor- Em servidores remotos, isso pode ser resolvido aumentando a capacidade de memória
- Em servidores locais, é melhor manter a versão do FFmpeg atualizada e evitar executá-lo ao mesmo tempo que outros programas que consomem muita memória
- Se durante o uso de filtros aparecer
"Error splitting argument list: option not found", é preciso verificar o uso de aspas e o formato do filtergraph - Filtros exigem reencodificação do stream, então pode haver problema ao usá-los junto com
-c copy, que copia diretamente os streams do arquivo
Filtergraph, mapeamento de streams e codecs padrão
- Ao executar tarefas em lote do FFmpeg dentro de loops, é possível colocar
-nostdinantes da entrada para sobrescrever o comportamento padrão de interação via entrada padrão- Exemplo:
ffmpeg -nostdin -i input_file ...
- Exemplo:
- O FFmpeg define automaticamente codecs e parâmetros padrão de codec de acordo com o formato do arquivo de saída
.avi: áudiomp3, vídeompeg4.mkv: áudioac3, vídeo H.264.mov: áudio AAC, vídeo H.264.mp4: áudio AAC, vídeo H.264.mpg: áudiomp2, vídeompeg1video.mxf: áudiopcm_s16le, vídeompeg2video.wav: áudiopcm_s16le
- Um filtergraph é uma combinação de nome de filtro e opções que vem depois de
-vfou-af-vfé um alias de-filter:v- Um exemplo de filtro de vídeo é
hflip, e um exemplo de filtro de áudio éamerge - Vários filtros são ligados por vírgulas, e várias cadeias de filtros são separadas por ponto e vírgula
-vf "fieldmatch,yadif,decimate"é uma única cadeia de filtros usada para processamento de inverse telecine- Se houver mais de uma entrada ou saída, deve-se usar
-filter_complexem vez de-vf - Devem ser usadas aspas retas, e aspas curvas devem ser evitadas
- O mapeamento de streams define quais streams de vídeo, áudio, legenda, dados e anexos do arquivo de entrada serão incluídos na saída
- O FFmpeg reconhece os tipos de stream
a,v,s,det -map 0:vseleciona todos os streams de vídeo do primeiro arquivo de entrada-map 0:3seleciona o quarto stream do primeiro arquivo de entrada-map 0:a:2seleciona o terceiro stream de áudio do primeiro arquivo de entrada- Se nenhum mapeamento for especificado, o padrão para arquivos de vídeo é levar para a saída apenas um stream de vídeo e um de áudio
- Para mapear todos os streams, usa-se
-map 0 - Ao adicionar
?, como em-map 0:a?, é possível processar em lote arquivos sem áudio sem gerar erro
- O FFmpeg reconhece os tipos de stream
Mudança de contêiner e transcodificação
- O reempacotamento de arquivo é feito com
ffmpeg -i input_file.ext -c copy -map 0 output_file.ext- Move os dados internos de vídeo, áudio e legenda para outro formato de contêiner sem alterá-los
- O reempacotamento também é chamado de remuxing ou re-multiplexing
- É preciso usar
-map 0para preservar todos os fluxos, como várias trilhas de áudio - Alguns contêineres só aceitam determinadas codificações de fluxo, então o reempacotamento sem recodificação pode não ser possível
- A criação de Broadcast WAV grava o chunk BEXT e os metadados relacionados com
-write_bext 1e-metadata field_name='Content'- Campos usados com frequência são
description,originator,originator_reference,origination_date,origination_time,coding_historyeIARL - Os campos de metadados BWF têm limite de caracteres, e
OriginatorReferencetem no máximo 32 caracteres
- Campos usados com frequência são
- Ao reempacotar vídeo com codec DV em um arquivo
.dv, use-f rawvideo -c:v copypara evitar que os metadados de origem dentro do fluxo DV sejam removidos sem querer - Um exemplo de transcodificação para Apple ProRes LT é
-c:v prores -profile:v 1 -vf yadif -c:a pcm_s16le- Os perfis ProRes 422 são divididos em
0Proxy,1LT,2Standard e3HQ - Os contêineres ProRes com suporte no FFmpeg são QuickTime
.mov, Matroska.mkve MXF.mxf
- Os perfis ProRes 422 são divididos em
- Um exemplo de transcodificação para H.264 é
-c:v libx264 -pix_fmt yuv420p -c:a aac- O padrão do
libx264é o presetmediume CRF 23 -pix_fmt yuv420pdefine subamostragem de croma 4:2:0 para compatibilidade com o QuickTime e com a maioria dos players que não são baseados em FFmpeg- Para otimização de streaming, adiciona-se
-movflags +faststart - Um exemplo de qualidade mais alta é
-preset veryslow -crf 18, e CRF 18 costuma ser considerado “visualmente sem perdas”
- O padrão do
- A codificação H.264/H.265 baseada em GPU Nvidia usa
h264_nvencouhevc_nvenc- O hardware dedicado da Nvidia pode ter desempenho 10 vezes maior que a codificação por CPU, mas otimizar a qualidade em bitrates baixos exige mais parâmetros
- O HEVC é descrito como um codec mais eficiente, com suporte em GPUs aproximadamente desde 2015
- A transcodificação para H.265/HEVC usa
-c:v libx265 -pix_fmt yuv420p -c:a copy- O padrão do
libx265é o presetmediume CRF 28 - O CRF 28 do H.265 corresponde ao CRF 23 do H.264, e o tamanho do arquivo pode cair para cerca da metade
- O padrão do
- Um exemplo sem perdas para preservação usa FFV1 Version 3 em um contêiner Matroska e gera junto um
framemd5da entrada-map 0mapeia todos os fluxos-dnexclui fluxos de dados que o Matroska não permite-slicecrc 1adiciona informações de CRC para que o decodificador possa detectar slices corrompidos-f framemd5 -angera checksums MD5 por frame de vídeo
Mudança de propriedades de vídeo e áudio
- A receita para mudar a proporção de tela usa o filtro de padding
- Para transformar 4:3 em 16:9, aplica-se pillarbox
- Para transformar 16:9 em 4:3, aplica-se letterbox
- Vídeos sem áudio podem usar
-anno lugar de-c:a copy
- Um exemplo de conversão de SD para HD usa três filtros:
colormatrix=bt601:bt709,scale=1440:1080:flags=lanczosepad=1920:1080:240:0- Muda os coeficientes de luma de Rec. 601 para Rec. 709
- O redimensionamento Lanczos é mais lento que o bilinear padrão, mas oferece resultados melhores
- Para fontes entrelaçadas, recomenda-se aplicar deinterlace com
yadifantes do redimensionamento
- A proporção de exibição pode ser alterada no nível do contêiner com opções como
-aspect 4:3- Se usado com
-c:v copy, isso afeta a proporção armazenada no contêiner, e não a proporção dentro dos frames codificados
- Se usado com
- A conversão de espaço de cor usa o filtro
colormatrix=src:dst- Os valores aceitos incluem
bt601,smpte170m,bt470bg,bt709ebt2020 - A incorporação de metadados de espaço de cor usa
-color_primaries,-color_trce-colorspace - Também é possível marcar um arquivo Rec.601 real com uma tag Rec.709, então é preciso ter cuidado
- As tags de metadados são gravadas por
libx264oulibx265, então não é possível adicioná-las sem recodificação
- Os valores aceitos incluem
- A mudança de velocidade usa
setptseatempoem conjunto- O exemplo é uma cópia de acesso pelo método PAL, mudando de 24fps para 25fps e mantendo o pitch do áudio
- Para fade, usam-se os filtros
fadeeafade, e como há uso de filtro, é preciso recodificar vídeo e áudio - A extração de áudio usa
-c:a copy -vnpara extrair sem perdas o fluxo de áudio sem o vídeo - A combinação de duas trilhas de áudio usa
amergee-filter_complex- Isso pode ser útil para processos posteriores que esperam uma única trilha de áudio, como legendas automáticas do YouTube
- Para confirmar a trilha desejada, recomenda-se executar
ffprobeantes de escrever o script
- A análise e normalização de volume usam o filtro
loudnorm- A saída JSON pode ser usada como valor de entrada para normalização em 2 passes
- Os valores padrão são descritos como bem alinhados ao volume-alvo recomendado pela PBS
- O modo de 1 pass é mais rápido, mas menos preciso que o de 2 passes
- Também estão incluídas receitas para pre-emphasis de CD, equalização RIAA, reamostragem de áudio e interpretação forçada de WAV de 192kHz como 96kHz
Cortar, juntar e segmentar
- Ao juntar arquivos com as mesmas especificações técnicas, usa-se o concat demuxer
ffmpeg -f concat -i mylist.txt -c copy output_file- Os arquivos a serem unidos precisam ter o mesmo codec e as mesmas especificações técnicas, e o arquivo resultante deve ser sempre pré-visualizado
- Para usar caminhos absolutos, adicione
-safe 0
- Ao juntar arquivos com formatos ou codecs diferentes, usam-se o filtro
concate-filter_complex- Os arquivos de entrada podem diferir em contêiner, codec, subamostragem de croma, frame rate etc.
- O exemplo básico só funciona corretamente quando a resolução é a mesma
- Se o frame rate for diferente, a saída pode ter frame rate variável
- Se a resolução for diferente, ajuste antes com
scale, e ao juntar SD com HD, o SD pode receber pillarbox
- A divisão de arquivos é feita com o segment muxer
-segment_time 60cria segmentos de no máximo 60 segundos%03dcria nomes de arquivo numéricos com 3 dígitos e preenchimento com zero
- O trimming sem recodificação usa
-ss,-to,-t,-c copye-map 0- Codecs interframe como H.264 podem começar no ponto mais próximo baseado em i-frame
-sseof -5copia a partir de 5 segundos antes do fim do arquivo
- A remoção de silêncio no início de um arquivo de áudio usa
silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1-57dBé apresentado como um nível adequado para levar em conta hiss analógico- Como há uso de filtro, o áudio é recodificado
- A remoção de silêncio no fim de um arquivo de áudio é feita na sequência
areverse,silenceremove,areverse- Como
silenceremoveé mais adequado para remover silêncio do início, o áudio é invertido e depois revertido novamente
- Como
Processamento de vídeo entrelaçado
- Ao criar um arquivo de acesso HD H.264 a partir de uma fonte SD NTSC, usa-se
yadif,scale,padeformat=yuv420pem conjuntoyadifé um filtro de desentrelaçamentoscale=1440:1080:flags=lanczosajusta a imagem para 1440x1080pad=1920:1080:(ow-iw)/2:(oh-ih)/2adiciona padding para encaixar uma entrada 4:3 em um frame de saída 16:9
- Um exemplo geral de desentrelaçamento é
-vf "yadif,format=yuv420p"format=yuv420pespecifica subamostragem de croma 4:2:0 para compatibilidade de reprodução em H.264- Além de
yadif, o FFmpeg também tem os desentrelaçadoresbwdif,w3fdif,kerndeintennedi
- Para desentrelaçamento que separa campos em frames, use
idet,bwdif,format=yuv420p- É preferido para preservar a cadência visual da fonte em vídeos entrelaçados com muito movimento
idetdetecta a ordem dos camposbwdifpor padrão gera um frame para cada campo
- Para inverse telecine, use
fieldmatch,yadif,decimate- Isso reverte o pulldown 3:2 para restaurar um vídeo entrelaçado de 29.97fps à taxa de quadros original de 24fps da fonte em filme
- Ao aplicar a um arquivo 29.97i, a taxa de quadros de saída será na prática 23.976fps
- Para mudar a ordem dos campos, use
setfield=tffousetfield=bff- Como um filtro de vídeo é usado,
-c copynão pode ser utilizado e é necessário recodificar
- Como um filtro de vídeo é usado,
- Para verificar o padrão de entrelaçamento, analise sem arquivo de saída com
ffmpeg -i input_file -filter:v idet -f null -
Marca d'água, legendas, miniaturas, GIF
- Uma marca d'água de texto é criada com o filtro
drawtext- Defina as opções
fontfile,fontsize,text,fontcolor,alpha,xey x=(w-text_w)/2:y=(h-text_h)/2posiciona no centro independentemente do tamanho do vídeo
- Defina as opções
- Uma marca d'água de imagem pode ser posicionada no canto superior direito com
overlay=main_w-overlay_w-5:5 - Timecode queimado na imagem usa as opções
timecode,box,boxcoloreratedodrawtext- O timecode inicial tem o formato
hh:mm:ss[:;.]ff
- O timecode inicial tem o formato
- Para incorporar um arquivo de legendas, use
-i subtitles_file -c copy -c:s mov_textmov_textfunciona em contêineres MP4 e MOV- Os formatos aceitos no contêiner MKV são
ASS,SRTeSSA
- Uma miniatura única é extraída com
-ss 00:00:20 -vframes 1 thumb.png - Para criar miniaturas a cada 1 minuto, use
-vf fps=1/60 out%d.png - Ao criar um GIF a partir de uma sequência de imagens, use
image2,-framerate,-pattern_type globescale - GIFs de alta qualidade são gerados em duas etapas
- O primeiro comando cria uma paleta personalizada com
palettegen - O segundo comando aplica a paleta com
paletteuse - Um método mais simples é usar
-vf "fps=10,scale=500:-1", mas o dithering fica mais visível e o tamanho do arquivo é menor
- O primeiro comando cria uma paleta personalizada com
Sequência de imagens, scopes, OCR
- Para criar um vídeo não comprimido de 10-bit a partir de uma sequência de imagens, use
-f image2 -framerate 24 -i input_file_%06d.ext -c:v v210- A taxa de quadros padrão do demuxer
image2é 25fps %06dlê nomes de arquivo numéricos de seis dígitos em ordem crescente
- A taxa de quadros padrão do demuxer
- Para criar um vídeo combinando arquivos de imagem e áudio, use
-loop 1,-shorteste-vf scale=1280:720- Isso pode ser útil quando quiser enviar um arquivo de áudio para plataformas como o YouTube
- Usando
ffplay -f lavfie filtros, é possível visualizar profundidade de bits de áudio, gráfico em decibéis, pixels fora da faixa de broadcast e vectorscope tblend=all_mode=difference128ehstackmostram lado a lado as diferenças temporais entre dois vídeos de entradaxstacké usado para criar uma janela de saída que empilha várias fontes de vídeo na vertical ou na horizontal, sendo útil para o mesmo tipo de janela de saída usado novrecord- Um exemplo de OCR usa o filtro
ocredrawtextpara exibir sobre o vídeo o texto reconhecido - A saída de dados de OCR é exibida na tela no formato
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=input_file,ocr"
Metadados, checksums, trabalho de preservação
- A extração de metadados técnicos é feita com
ffprobe -i input_file -show_format -show_streams -show_data -print_format xml- Além de XML, os formatos de saída podem ser JSON e flat
- Para remover metadados, use
-map_metadata -1 -c:v copy -c:a copy- O vídeo e o áudio são copiados, mas os metadados não
- O processamento em lote no Bash é feito com um arquivo
.she um loopfor- Exemplo:
for file in *.mxf; do ffmpeg -i "$file" -map 0 -c copy "${file%.mxf}.mov"; done - O arquivo
.she os arquivos.mxfa serem processados devem estar no mesmo diretório, e a execução deve ocorrer nesse diretório - Para processamento recursivo, pode-se usar
find input_directory -iname "*.mxf" -exec ffmpeg -i {} -map 0 -c copy {}.mov \;
- Exemplo:
- No Windows, o processamento em lote é feito com um script PowerShell
.ps1- O exemplo cria uma lista de arquivos
.mp4e remultiplexa cada um trocando a extensão para.mkv - Para chamar
ffmpegsem o caminho completo, ele precisa estar configurado corretamente
- O exemplo cria uma lista de arquivos
- Para verificar erros do decodificador, decodifique sem arquivo de saída com
ffmpeg -i input_file -f null -e veja os erros na tela - A verificação de fixity do FFV1 Version 3 usa
-report -i input_file -f null -para procurarCRC checksum mismatch- O Frame CRC é ativado por padrão no FFV1 Version 3
- Um MD5 de vídeo por frame é gerado com
-f framemd5 -an - Um MD5 por grupo de amostras de áudio é gerado com
asetnsamples=n=48000 -f framemd5 -vn- É apresentado como boa prática alinhar a quantidade de grupos de amostras à sample rate da mídia
- Por padrão, o áudio é transcodificado para PCM 16-bit ao gerar o framemd5
- Um MD5 de stream pode ser criado para os streams de vídeo e áudio separadamente usando
-mape-c copy -f md5- Isso é usado para verificar a integridade das informações A/V independentemente de mudanças nos metadados do contêiner
streamhashgera hashes por stream para todos os streams- É útil para fazer hash de materiais born-digital mistos sem precisar saber quantos streams existem
- Um relatório do QCTools gera
.qctools.xml.gzusandoffprobe -f lavficomsignalstats,cropdetect,idet,psnr,ssim,ebur128,astatse outros- Há comandos separados para arquivos com áudio e sem áudio
- A extração de closed captions EIA-608 da Line 21 usa o filtro
readeia608effprobepara gerar valores hex em CSV
Arquivos de teste e outros exemplos de FFmpeg
- Vídeos de teste podem ser criados ou reproduzidos com entradas lavfi como
mandelbrot,smptebars,testsrcesmptehdbars- O exemplo de Mandelbrot gera saída H.264 em 1280x720, 25fps, por 10 segundos
- O exemplo de SMPTE bars gera saída ProRes em 720x576, 25fps, por 10 segundos
- A reprodução de HD SMPTE bars é feita com
ffplay -f lavfi -i smptehdbars=size=1920x1080 - A reprodução de VGA SMPTE bars é feita com
ffplay -f lavfi -i smptebars=size=640x480
- O áudio de teste em onda senoidal gera um arquivo WAV com
sine=frequency=1000:sample_rate=48000:duration=5epcm_s16le - Um vídeo de teste que combina SMPTE bars e uma onda senoidal de 1kHz usa duas entradas lavfi e
-c:v ffv1,-c:a pcm_s16le - Arquivos de teste corrompidos usam
-bsf noise=1 -c copypara corromper intencionalmente o conteúdo dos pacotes sem corromper o contêiner - Conway's Game of Life pode ser simulado com
ffplay -f lavfi life=..., e comffmpege-t 5é possível salvar um trecho - A comparação de similaridade perceptual entre dois vídeos usa o filtro
signature=detectmode=full:nb_inputs=2 - O hash perceptual de um vídeo de entrada gera um arquivo XML com
signature=format=xml:filename="output.xml" - Sequências de imagens podem ser reproduzidas diretamente com
ffplay -framerate 5 input_file_%06d.extsem criar um vídeo antes - A separação de faixas de áudio e vídeo usa
-map 0:v:0e-map 0:a:0 - A mesclagem de faixas de áudio e vídeo usa
-map 0:v -map 1:a -c copypara combinar o vídeo do primeiro arquivo com o áudio do segundo - Arquivos MPEG para criar uma ISO para acesso em DVD são gerados com
-aspect 4:3 -target ntsc-dvd output_file.mpg, e exigem a instalação dodvdauthor - O CSV para detecção de cena baseada em YDIF imprime os valores
lavfi.signalstats.YDIFdoffprobee designalstats - O head switching noise pode ser ocultado desenhando uma caixa preta na parte inferior do frame com
drawbox=w=iw:h=7:y=ih-h:t=max - Para fazer streaming ao vivo para um destino RTMP e gravar um MP4 local ao mesmo tempo, usa-se o muxer
tee- A entrada é redimensionada para largura de 1280px e o stream é encerrado após o tempo especificado
- O exemplo inclui a observação de que isso foi usado diariamente por cerca de 4 anos em transmissões ao vivo reais de programas de TV
- Informações sobre um decoder, encoder, demuxer, muxer ou filtro específico podem ser consultadas com
ffmpeg -h type=name- Os exemplos são
encoder=libx264,decoder=mp3,muxer=matroska,demuxer=mov,filter=crop
- Os exemplos são
Ferramentas relacionadas apresentadas junto com FFmpeg
- Ferramentas de ripping de CDDA tratam da verificação do offset da unidade de CD e do ripping preciso de CDs de áudio
- Diferentes modelos de unidade de CD começam a leitura em posições diferentes, então a correção de offset é necessária para validar checksums do mesmo conteúdo
- A identificação da unidade pode ser verificada com
cdda2wav -scanbus,cdda2wav,cdparanoia -vsQ - O offset pode ser encontrado em Accurate Rip CD drive offset list
- Como ferramenta GUI para macOS, é apresentado o XLD
- O ripping com CD Paranoia usa
cdparanoia -L -B -O [Drive Offset] [Starting Track Number]-[Ending Track Number] output_file.wav-Bé o modo batch que divide automaticamente as faixas em arquivos separados
- Cdda2wav é uma ferramenta que usa a Paranoia library para ripar CDs de áudio com precisão
- O comando de instalação via Homebrew é
brew install cdrtools - O comando de exemplo ripa o CD inteiro em um único WAV, consulta o CDDB e gera um cue sheet
- No macOS, é preciso desmontar o CD antes de executar o comando
- O comando de instalação via Homebrew é
- CD emphasis é descrito como um método de redução de ruído que pode afetar alguns CDs do começo dos anos 1980 e CDs prensados no Japão
- A verificação de presença é feita com
cdda2wav -Joucdparanoia -Q - Para corrigir durante o ripping com Cdda2wav, adicione a flag
-T
- A verificação de presença é feita com
- ImageMagick é um conjunto de softwares livres e de código aberto para exibir, converter e editar arquivos de imagem raster e vetorial
- Os comandos são chamados individualmente, como
convert,montageemogrify - A comparação de imagens usa
compare -metric ae image1.ext image2.ext null:para retornar o número de pixels diferentes - A geração de miniaturas usa
mogrify -resize 80x80 -format jpg -quality 75 -path thumbs *.jpg - Grades de imagens são criadas com
montage @list.txt -tile 6x12 -geometry +0+0 output_grid.jpg - A remoção de EXIF usa
mogrify -path ./stripped/ -strip *.jpg
- Os comandos são chamados individualmente, como
- A ferramenta
flacé um utilitário de transcodificação FLAC e manipulação de metadados criado pelo projeto FLAC- Ela tem a vantagem de poder embutir foreign metadata como BWF em comparação com outras ferramentas
- Para converter de WAV para FLAC mantendo os metadados BWF, use
flac --best --keep-foreign-metadata --preserve-modtime --verify input.wav - Para reconstruir o BWF original a partir de um FLAC, use
--bestem vez de--decode
1 comentários
Opiniões no Hacker News
Fugindo um pouco do assunto, mas considero o ffmpeg um dos melhores softwares já criados
Engenheiros talentosos como Fabrice Bellard são um grande presente para a comunidade FOSS, e até em um unicórnio avaliado em cerca de US$ 2 bilhões onde trabalhei antes, uma grande parte do produto dependia do ffmpeg
https://ffmpeg.org/donations.html
Ele também criou QEMU, TCC, QuickJS e outros
Falando sério, a quantidade de dispositivos que estão rodando código escrito por ele em qualquer dado momento é simplesmente absurda
A linha de comando do ffmpeg ainda faz a gente arrancar os cabelos mesmo com bons guias, então eu recomendaria o VapourSynth
https://www.vapoursynth.com/
É uma ferramenta otimizada de filtragem de vídeo em estilo Python, mas é muito mais do que isso: https://vsdb.top/
E o StaxRip aproveita muito bem ffmpeg, VapourSynth e dezenas de encoders e ferramentas; é por causa dele que eu reinicio do Linux para o Windows: https://github.com/staxrip/staxrip
Ele é desnecessariamente complicado e, de certa perspectiva, talvez toda a estrutura faça sentido, mas é inadequado ter que conhecer opções que parecem palavras mágicas para fazer tarefas muito comuns
Deve haver dezenas de aliases bash que reduzem comandos ffmpeg de 150 caracteres para duas palavras
O ffprobe também não faz sentido: em 99% dos casos, a ideia é executá-lo sem argumentos para ver rapidamente duração, resolução, frame rate e número de faixas de áudio, mas 99% da saída é conteúdo totalmente irrelevante, como opções de compilação
Materiais que valem ver junto:
https://ffmpeg.guide/ — criar grafos de filtros complexos do FFmpeg de forma rápida e precisa
https://www.hadet.dev/ffmpeg-cheatsheet/ — cortar, adicionar fade in/out, redimensionar, concatenar etc.
Por algum motivo desconhecido, o ffmpeg se comporta de forma diferente dependendo de você colocar as flags
-sse-t/-toantes ou depois de-i, e no meu caso funcionou melhor colocá-las antesO texto original tem o mesmo problema
É estranho forçar um grafo não linear a caber em uma linha de comando plana e linear
Só uma configuração em JSON mais detalhada já seria muito melhor
Muito útil
Comecei a usar o ChatGPT para montar comandos ffmpeg, e ficou muito mais rápido e fácil encontrar o que preciso
Também criei uma pequena ferramenta para fazer isso direto na linha de comando: https://github.com/alexkrkn/help-cli
Também fiz um vídeo relacionado: https://www.youtube.com/watch?v=pOda6TDBqcY
Recentemente, enquanto procurava uma UI para ffmpeg, encontrei o Shutter Encoder, que é open source, suporta Mac/Windows e é um software muito bom
Finalmente comecei a comprimir minha coleção pessoal de vídeos de 15 anos, com 300 GB
https://www.shutterencoder.com/
Estou comprimindo tudo em H.265, e às vezes o tamanho dos vídeos cai para 1/10. Há algum motivo para não fazer isso? Li que é preciso mais poder de processamento para reproduzir vídeos comprimidos assim, mas não sei se isso será um grande problema no futuro
Tome isso como um aviso para verificar vários vídeos antes de apagar os originais
Mas, se são 300 GB, armazenamento é barato o suficiente para simplesmente guardar os originais
Além disso, para usar no Plex sem transcodificação, isso também é mais fácil no meu homelab
Este guia recomenda
yadifcomo filtro de desentrelaçamento, mas, aos meus olhos, w3fdif parece melhorEle não faz rastreamento de movimento como o yadif, então é bem rápido, e evita os artefatos incômodos que o rastreamento de movimento às vezes cria
Acho melhor ter resultados consistentemente medianos do que resultados às vezes excelentes e às vezes ruins
Porém, ao contrário do yadif, que olha para dois campos, o w3fdif considera três campos de cada vez, escondendo melhor os artefatos de entrelaçamento
Se você vai reencodar de qualquer forma, é melhor já usar QTGMC
O w3fdif pode criar cintilação, enquanto o yadif não; então o bwdif se comporta como o yadif, mas usa o melhor field matching do w3fdif
bwdifé um híbrido deyadifew3fdifA maior barreira para a adoção do ffmpeg provavelmente são as ferramentas offline premium freemium e os front-ends web
Sites otimizam suas buscas para frases que as pessoas costumam digitar no Google, como “avi to mp4” e “mp3 to wav”
Levei mais tempo do que imaginava para aceitar um app de linha de comando, porque o mundo Windows nos ensinou que tudo precisa ter uma GUI
As pessoas dizem que o ffmpeg é complexo, mas ele não fica muito mais fácil só por receber uma GUI bonita. O que é complexo é a compressão de vídeo em si
A menos que seja uma interface de cliques, como o HandBrake, que tome decisões por você, acho que nenhum software consegue tornar isso mais fácil
Não tenho certeza, mas imagino que, depois de aprender codificação e compressão de vídeo digital em detalhes suficientes, o que fazer no ffmpeg também passe a parecer bem intuitivo. Alguém já fez isso de fato?
Na época não existiam formatos como mkv nem codecs como HEVC, mas o conceito de manipular áudio/vídeo por meio de vários filtros é excelente, e é assim que a maioria dos softwares de conversão A/V funciona
Quando comecei a olhar as páginas de manual do FFmpeg, as conexões ficaram claras e, depois de mexer por cerca de um dia, consegui usá-lo
Talvez o fato de eu gostar de linha de comando e ter o hábito de ler páginas man tenha ajudado
O ffmpeg é poderoso e uso com frequência, mas a estrutura da API não entra na minha cabeça. Seria bom ter um front-end com LLM
Boa ideia. Fazer o FFmpeg executar exatamente o que você quer é sempre intimidador
O ChatGPT ajudou, mas não foi perfeito
Sempre achei difícil memorizar opções e argumentos do OpenSSL, mas agora simplesmente uso o GPT
Ainda assim, pequenas diferenças entre sistemas operacionais continuam sendo um probleminha