Novos meios de captura no FFmpeg
A ferramenta de linha de comando ffmpeg é bastante útil para conversões diversas e para gravar áudio e vídeo a partir dos dispositivos da máquina. A configuração fina de cada codec é meio complicada (com exceção da libx264), mas depois de aprendido é tranquilo.
As versões recentes possuem duas novidades importantes: suporte para entrada via DirectShow no Windows e PulseAudio no Linux.
PulseAudio
Vamos começar pelo dispositivo de entrada "pulse", que permite capturar áudio usando a libpulse.
Em
Se você quiser modificar os parâmetros que o FFmpeg requesitará para a libpulse, existem opções para este fim, como
O dispositivo de entrada
DirectShow
Faça download de compilações prontas em http://ffmpeg.zeranoe.com/builds/ (a versão "Static", 32 ou 64-bit, provavelmente é o que você precisa).
É suportada faz tempo a obsoleta interface VfW para captura de vídeo no Windows, mas o suporte ao DirectShow sempre foi muito esperado no FFmpeg, principalmente para ser possível capturar áudio.
Primeiro, liste os dispositivos com:
O comando retornará algo como:
Agora, sabendo os nomes dos dispositivos, para capturar vídeo:
Áudio:
Como por exemplo:
É possível mudar a especificação do formato de captura requisitado ao DirectShow. Para saber o que o dispositivo suporta, rode:
Cada comando retornará, respectivamente, algo como:
As opções que podem ser usadas estão listadas aqui e devem ser colocadas entre as opções
Exemplo final que combina captura de áudio e vídeo:
Que tripa!
Miúdos
Você deve ter notado que não usei as opções
As versões recentes possuem duas novidades importantes: suporte para entrada via DirectShow no Windows e PulseAudio no Linux.
PulseAudio
Vamos começar pelo dispositivo de entrada "pulse", que permite capturar áudio usando a libpulse.
ffmpeg -f pulse -i default <resto>
Em
<resto>
você completa com as demais configurações, como tipo de codec, bitrate e arquivo de saída. Algo como:ffmpeg -f pulse -i default -c:a libvorbis -b:a 128k audio.ogg
Se você quiser modificar os parâmetros que o FFmpeg requesitará para a libpulse, existem opções para este fim, como
-channels
e -sample_rate
(veja mais aqui). A biblioteca fará as modificações necessárias automaticamente (reamostragem e downmix) quando necessário. Devem ser posicionadas entre as opções -f
e -i
.ffmpeg -f pulse -channels 1 -sample_rate 32000 -i default <resto>
O dispositivo de entrada
default
será o padrão configurado no PulseAudio, que você pode mudar usando o controle de volume do Gnome/KDE. É possível requisitar diretamente um determinado dispositivo, especificando o seu nome no lugar de default
. Você obtém uma lista dos dispositivos de entrada com pactl list sources
.DirectShow
Faça download de compilações prontas em http://ffmpeg.zeranoe.com/builds/ (a versão "Static", 32 ou 64-bit, provavelmente é o que você precisa).
É suportada faz tempo a obsoleta interface VfW para captura de vídeo no Windows, mas o suporte ao DirectShow sempre foi muito esperado no FFmpeg, principalmente para ser possível capturar áudio.
Primeiro, liste os dispositivos com:
ffmpeg -list_devices true -f dshow -i dummy
O comando retornará algo como:
[dshow @ 0000000001F6CDE0] DirectShow video devices [dshow @ 0000000001F6CDE0] "Laptop Integrated Webcam" [dshow @ 0000000001F6CDE0] DirectShow audio devices [dshow @ 0000000001F6CDE0] "Grupo de microfones (SigmaTel H"
Agora, sabendo os nomes dos dispositivos, para capturar vídeo:
ffmpeg -f dshow -i video="Laptop Integrated Webcam" -pix_fmt yuv420p <resto>
Áudio:
ffmpeg -f dshow -i audio="Grupo de microfones (SigmaTel H" <resto>
Como por exemplo:
ffmpeg -f dshow -i video="Laptop Integrated Webcam" -pix_fmt yuv420p -c:v mpeg4 -b:v 1000k video.avi ffmpeg -f dshow -i audio="Grupo de microfones (SigmaTel H" -c:a libmp3lame -b:a 128k audio.mp3
É possível mudar a especificação do formato de captura requisitado ao DirectShow. Para saber o que o dispositivo suporta, rode:
ffmpeg -list_options true -f dshow -i video="Laptop Integrated Webcam"
ffmpeg -list_options true -f dshow -i audio="Grupo de microfones (SigmaTel H"
Cada comando retornará, respectivamente, algo como:
[dshow @ 00000000003CCEC0] DirectShow video device options [dshow @ 00000000003CCEC0] Pin "Capturar" [dshow @ 00000000003CCEC0] min s=640x480 fps=30 max s=640x480 fps=30 [dshow @ 00000000003CCEC0] min s=160x120 fps=30 max s=160x120 fps=30 [dshow @ 00000000003CCEC0] min s=176x144 fps=30 max s=176x144 fps=30 [dshow @ 00000000003CCEC0] min s=320x240 fps=30 max s=320x240 fps=30 [dshow @ 00000000003CCEC0] min s=352x288 fps=30 max s=352x288 fps=30 [dshow @ 00000000003CCEC0] min s=800x600 fps=30 max s=800x600 fps=30 [dshow @ 00000000003CCEC0] min s=1024x768 fps=10 max s=1024x768 fps=10 [dshow @ 00000000003CCEC0] min s=1280x1024 fps=10 max s=1280x1024 fps=10 [dshow @ 00000000003CCEC0] min s=1600x1200 fps=10 max s=1600x1200 fps=10 [dshow @ 00000000003CCEC0] min s=640x480 fps=10 max s=640x480 fps=10 [dshow @ 00000000003CCEC0] min s=160x120 fps=30 max s=160x120 fps=30 [dshow @ 00000000003CCEC0] min s=176x144 fps=30 max s=176x144 fps=30 [dshow @ 00000000003CCEC0] min s=320x240 fps=30 max s=320x240 fps=30 [dshow @ 00000000003CCEC0] min s=352x288 fps=30 max s=352x288 fps=30e
[dshow @ 000000000031CF10] DirectShow audio device options [dshow @ 000000000031CF10] Pin "Capture" [dshow @ 000000000031CF10] min ch=1 bits=8 rate= 11025 max ch=2 bits=16 rate=44100
As opções que podem ser usadas estão listadas aqui e devem ser colocadas entre as opções
-f
e -i
.Exemplo final que combina captura de áudio e vídeo:
ffmpeg -f dshow -channels 1 -sample_rate 32000 -video_size 1024x768 -framerate 10 -i audio="Grupo de microfones (SigmaTel H":video="Laptop Integrated Webcam" -pix_fmt yuv420p -c:a libmp3lame -c:v mpeg4 -b:a 128k -b:v 1000k saida.avi
Que tripa!
Miúdos
Você deve ter notado que não usei as opções
-ab
e -vb
para definir o bitrate. Essas opções estão obsoletas e a recomendação é usar a nova sintaxe -b:a
(áudio) e -b:v
(vídeo).
Alguem saberia me dizer o motivo ???
ResponderExcluir- uma mesma linha de comando funciona em um arquivo e em outro nao.
> ok
ffmpeg -i C:\FFMPEG\input.mp4 -filter:v scale=-1:480 -c:v h264 -b:v 512k -minrate 512k -maxrate 512k -bufsize 512k -r 23 -c:a copy C:\FFMPEG\output.MP4
> erro
ffmpeg -i C:\FFMPEG\input.mkv -filter:v scale=-1:480 -c:v h264 -b:v 512k -minrate 512k -maxrate 512k -bufsize 512k -r 23 -c:a copy C:\FFMPEG\output.MP4
Como passar audio da placa de audio para o icecast?
ResponderExcluir