Extrair audio de um ficheiro de vídeo

Iniciado por lads, 09 de Setembro de 2009, 08:21

tópico anterior - próximo tópico

lads

Olá a todos,

Tenho um fichiero flv do qual pretendo extrair o audio (para um mp3, por exemplo). Existe muita informação sobre o assunto em diversos sítios, quase todos aconselhando o uso das aplicações mplayer e ffmpeg. O primeiro vem instalado com o Ubuntu 9.04 mas o segundo não.

Usei os comandos aconselhados aqui:

http://linux.byexamples.com/archives/229/extract-audio-from-video-or-online-stream/

O resultado usado o mplayer é o seguinte:


lads@MDK:~/temp$ mplayer -dumpaudio ls.flv -dumpfile ls1.mp3
MPlayer 1.0rc2-4.3.3 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Core(TM)2 Duo CPU     T9550  @ 2.66GHz (Family: 6, Model: 23, Stepping: 10)
CPUflags:  MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing ls.flv.
libavformat file format detected.
[lavf] Video stream found, -vid 0
[lavf] Audio stream found, -aid 1
VIDEO:  [FLV1]  768x576  0bpp  1000.000 fps    0.0 kbps ( 0.0 kbyte/s)
Core dumped ;)

Exiting... (End of file)


Instalei então o ffmpeg e experimentei:


lads@MDK:~/temp$ ffmpeg -i ls.flv -ab 128 -ar 44100 ls.mp3
FFmpeg version SVN-r19791, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-gpl --enable-pthreads --enable-encoder=libvorbis --enable-encoder=libogg --enable-encoder=liba52 --enable-encoder=libgsm --enable-encoder=dc1394 --enable-encoder=libxvid --disable-debug --enable-encoder=libfaac --enable-encoder=libmp3lame --enable-encoder=libx264 --enable-encoder=libfaad --enable-encoder=libtheora --enable-decoder=libvorbis --enable-decoder=libogg --enable-decoder=liba52 --enable-decoder=libgsm --enable-decoder=dc1394 --enable-decoder=libxvid --enable-decoder=libfaac --enable-decoder=libmp3lame --enable-decoder=libx264 --enable-decoder=libfaad
  libavutil     50. 3. 0 / 50. 3. 0
  libavcodec    52.35. 0 / 52.35. 0
  libavformat   52.38. 0 / 52.38. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0. 7. 1 /  0. 7. 1
  built on Sep  7 2009 15:57:54, gcc: 4.3.3

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 25.00 (25/1)
Input #0, flv, from 'ls.flv':
  Duration: 00:20:08.83, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: flv, yuv420p, 768x576, 25 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 44100 Hz, 2 channels, s16
  Metadata
    duration        : 1209
WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
Output #0, mp3, to 'ls.mp3':
    Stream #0.0: Audio: 0x0000, 44100 Hz, 2 channels, s16, 0 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
Encoder (codec id 86017) not found for output stream #0.0


Porque nenhuma destas aplicações funciona? Existe alguma outra forma de extrair o audio de um ficheiro de vídeo?

Obrigado.

Solid One

não sei sobre o mplayer/mencoder, mas sobre o ffmpeg, é só questão de codecs.

já que está no Jaunty, tente instalar o pacote "libavcodec-unstripped-52" pelo apt-get ou synaptic. esse pacote instala vários codecs próprios pro ffmpeg, somente assim permitindo realizar conversões para formatos proprietários, como o formato de música MP3, o contêiner de vídeo AVI, etc.

após instalá-lo, tente novamente efetuar a conversão. talvez volte a funcionar.

lads

Viva Solid,

Instalei o pacote libavcodec-unstripped-52 e voltei a tentar, o resultado não foi muito diferente:


lads@MDK:~/temp$ ffmpeg -i ls.flv -ab 128 -ar 44100 ls.mp3
FFmpeg version SVN-r19791, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-gpl --enable-pthreads --enable-encoder=libvorbis --enable-encoder=libogg --enable-encoder=liba52 --enable-encoder=libgsm --enable-encoder=dc1394 --enable-encoder=libxvid --disable-debug --enable-encoder=libfaac --enable-encoder=libmp3lame --enable-encoder=libx264 --enable-encoder=libfaad --enable-encoder=libtheora --enable-decoder=libvorbis --enable-decoder=libogg --enable-decoder=liba52 --enable-decoder=libgsm --enable-decoder=dc1394 --enable-decoder=libxvid --enable-decoder=libfaac --enable-decoder=libmp3lame --enable-decoder=libx264 --enable-decoder=libfaad
  libavutil     50. 3. 0 / 50. 3. 0
  libavcodec    52.35. 0 / 52.35. 0
  libavformat   52.38. 0 / 52.38. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0. 7. 1 /  0. 7. 1
  built on Sep  7 2009 15:57:54, gcc: 4.3.3

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 25.00 (25/1)
Input #0, flv, from 'ls.flv':
  Duration: 00:20:08.83, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: flv, yuv420p, 768x576, 25 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 44100 Hz, 2 channels, s16
  Metadata
    duration        : 1209
WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
File 'ls.mp3' already exists. Overwrite ? [y/N] y
Output #0, mp3, to 'ls.mp3':
    Stream #0.0: Audio: 0x0000, 44100 Hz, 2 channels, s16, 0 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
Encoder (codec id 86017) not found for output stream #0.0


Não será possível usar outro codec ou outro formato de audio?

Obrigado.

Solid One

estranho ele continuar dizendo que não encontrou encoder pro arquivo FLV. o som e a imagem desse arquivo é reproduzido normalmente?

a julgar pelo log do ffmpeg acima, chuto eu que isso talvez seja ausência dos pacotes "lame" para encode de áudio para formatos como MP1, MP2 e MP3. veja se os pacotes chamados "lame" e "libmp3lame0" estão instalados. se não tiverem, instale-os e tente de novo.

achteutis

Existe  um script do nautilus que extrai o audio de um video. Fiz isso com alguns FLV.

Se não me engano, o link é esse (http://www.gnome-look.org/content/show.php/Audio%2BVideo%2BImage%2BText%2BISO+Convert?content=92533), no gnome-look. Se não for, procura por lá que tem o script certo,

Pra instalar scripts no nautilus:
http://ubuntued.info/2008/01/como-instalar-scripts-do-nautilus.html

http://library.gnome.org/users/user-guide/stable/gosnautilus-444.html.pt_BR
Toshiba Satellite m302, core 2 duo 1.83Ghz, 3G de ram, chipset intel, Ubuntu Oneiric Oncelot (11.10) 32 bits.
Netiqueta: http://pt.wikipedia.org/wiki/Netiqueta
http://oquenaoestanogibi.wordpress.com/, blog crítico de HQ, no início.

lads

Citação de: Solid One online 09 de Setembro de 2009, 15:07
a julgar pelo log do ffmpeg acima, chuto eu que isso talvez seja ausência dos pacotes "lame" para encode de áudio para formatos como MP1, MP2 e MP3. veja se os pacotes chamados "lame" e "libmp3lame0" estão instalados. se não tiverem, instale-os e tente de novo.

Verifiquei com o apt-get e ambos os pacotes estão instalados. O VLC reproduz o vídeo sem problemas de som ou imagem.

Vou tentar fazer isto com outro programa.

Solid One

mas o VLC não ajuda muito nesse contexto. ultimamente, noto que ele acompanha inúmeros codecs que só funcionam para o próprio programa. não é algo que se torna acessível aos outros programas, pelo que eu noto.

tente abrir o arquivo de vídeo pelo Totem, reprodutor de vídeos padrão do Ubuntu. se ele abrir, tudo bem. se não abrir, então não deve estar instalado no sistema o plugin Gstreamer que é responsável por arquivos FLV.

aqui eu uso o Totem pra maioria dos vídeos que reproduzo. só utilizo outros players para formatos como o rmvb ou MKV/MP4 com legendas em soft-sub, porque o Totem ainda não os reproduz 100%. mas aí, tenho instalado plugins Gstreamer para rodar a maioria dos formatos de vídeo existentes.

um dos plugins Gstreamer que instalei se chama "gstreamer-ffmpeg". ele é o responsável por formatos como MPG e FLV. por mais estranho que seja, chuto eu que a ausência desse plugin (ou algo muito parecido) esteja impossibilitando essas conversões de serem realizadas pelo ffmpeg.

pressupondo que o plugin não esteja instalado aí, basta abrir qualquer vídeo FLV pelo Totem e em seguida ele pede para instalar os plugins necessários para a reprodução desse vídeo. depois de ter esse plugin instalado, tente realizar a conversão novamente.

testei essa linha de comando com um vídeo FLV que baixei agorinha no 4shared e a conversão funcionou bem direitinho. isso só pode ser algum plugin ou pacote debian (ou mesmo biblioteca dentro de algum pacote debian) ausente.

lads

Solid, obrigado pela ajuda mas ainda não foi desta.

O Totem abre o flv sem problemas reproduzindo o correctamente a imagem e o som. Verifiquei e tinho o gstream0.1-ffmpeg instalado.

Penso que o problema será a falta de um pacote com o codec para mp3, mas eu tenho o lame instalado. Poderá o ffmpeg por algum motivo não encontrar o lame?

Obrigado.

Solid One

parando para ver sobre o log do comando do FFmpeg, noto algo meio intrigante: a minha versão do FFmpeg é diferente da sua.

aqui uso o Ubuntu 9.04 Jaunty, e instalei o FFmpeg diretamente dos repositórios padrões. não peguei alguma versão SVN mais atual, inserindo repositórios de terceiros no meu sistema. e não somente a instalação do FFmpeg foi dessa forma, como também dos pacotes de codec "unstripped", dos pacotes do lame, etc. veja só a saída do comando aqui, quando fiz um teste com um arquivo de vídeo FLV ontem:


user@E-TecaServidor:~/Desktop$ ffmpeg -i mj.flv -ab 128 -ar 44100 mj.mp3
FFmpeg version 0.5-svn17737+3:0.svn20090303-1ubuntu6, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --extra-version=svn17737+3:0.svn20090303-1ubuntu6 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --disable-stripping --disable-vhook --enable-libdc1394 --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-armvfp --disable-neon --disable-altivec --disable-vis --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 0 / 52.20. 0
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Apr 10 2009 23:18:41, gcc: 4.3.3

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 30.00 (30/1)
Input #0, flv, from 'mj.flv':
  Duration: 00:04:11.08, start: 0.000000, bitrate: 405 kb/s
    Stream #0.0: Video: flv, yuv420p, 320x239, 341 kb/s, 30 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 22050 Hz, mono, s16, 64 kb/s
WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
Output #0, mp3, to 'mj.mp3':
    Stream #0.0: Audio: libmp3lame, 44100 Hz, mono, s16, 0 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
Press [q] to stop encoding
[flv @ 0x892dac0]skipping flv packet: type 250, size 725, flags 0
size=    1961kB time=251.06 bitrate=  64.0kbits/s   
video:0kB audio:1961kB global headers:0kB muxing overhead 0.001593%


apesar da sua versão do FFmpeg ser mais atual que a minha (a minha é de abril, e a sua é de setembro), deve haver alguma coisa nessa versão mais nova que esteja impossibilitando de realizar essa conversão. não sei ao certo se é ausência de algum pacote / plugin / codec, ou se é alguma configuração do FFmpeg presente na minha versão, mas ausente na sua. quem sabe se tentar usar a versão dos repositórios (mais antiga, que é de abril), não seja mais estável.

caso esse problema do FFmpeg seja de difícil resolução, há outros programas (com interface gráfica, inclusive) que fazem isso. exemplo disso são programas como "soundconverter" ou "audacity", onde um deles talvez consiga extrair o som de um vídeo só de abrí-lo nesses programas.

pigdin

Você está executando o comando dentro do mesmo diretório que se encontra o vídeo?

Se não estiver não funciona.

Desk: Phenom X3 2GB DDR II - Win 7 / Ubuntu 10.04 64 Bits
Note MUB: Core2Duo 4GB - Win7 / Ubuntu 10.04 / Bodhi Linux.
@alexpigdin

lads

Solid,

De facto instalei o ffmpeg a partir de um repositório do subversion, seguindo as instrucções desta página:

http://stream0.org/2008/01/install-ffmpeg-on-ubuntu-gutsy.html

O que agorei tentei foi reinstalar o ffmpeg, visto que agora já existe um pacote que instala tudo (não sabia disto). Portanto corri os comandos apt-get remove e apt-get install.

Acontece que o resultado é o mesmo, e indica uma versão de Setembro.

Estou inclinado a acreditar que isto nada tem que ver com o ffmpeg mas sim com algum codec em falta ou mal instalado, só não faço idea qual.

Investigarei esses programas que sugeres. Obrigado.

lads

Citação de: pigdin online 11 de Setembro de 2009, 08:35
Você está executando o comando dentro do mesmo diretório que se encontra o vídeo?

Se não estiver não funciona.

Viva pigdin, de facto estes lapsos são mais comuns do que se pensa, mas não é o caso :)

Obrigado pela mensagem.

velox256

Não seria o caso de usar o Avidemux? Basta abrir o vídeo nele, ir no menu Audio/Save, dê o nome do arquivo com extensão .mp3 e voilá, rapidex e sem rolo...
Computador perereca, com disco perereca, monitor perereca e sistema super xuxu. Visitem a minha página em http://sidserra.k6.com.br ou meu blog em http://sidserra.blogspot.com.br.

lads

Citação de: velox256 online 14 de Setembro de 2009, 13:08
Não seria o caso de usar o Avidemux? Basta abrir o vídeo nele, ir no menu Audio/Save, dê o nome do arquivo com extensão .mp3 e voilá, rapidex e sem rolo...

Obrigado velox, foi mesmo muito rápido e fácil. O avidemux gravou em disco um ficheiro mp3 com 13 Mb em apenas um segundo  :o

Obrigado a todos mais uma vez.

velox256

Só pra mostrar que vc conseguiu o que queria e marcar o post, bota "Resolvido" no título do post inisial, pra moçada que estiver querendo fazer o mesmo que vc possa achar a solução.  ;D

Citação de: lads online 15 de Setembro de 2009, 07:02
Citação de: velox256 online 14 de Setembro de 2009, 13:08
Não seria o caso de usar o Avidemux? Basta abrir o vídeo nele, ir no menu Audio/Save, dê o nome do arquivo com extensão .mp3 e voilá, rapidex e sem rolo...

Obrigado velox, foi mesmo muito rápido e fácil. O avidemux gravou em disco um ficheiro mp3 com 13 Mb em apenas um segundo  :o

Obrigado a todos mais uma vez.
Computador perereca, com disco perereca, monitor perereca e sistema super xuxu. Visitem a minha página em http://sidserra.k6.com.br ou meu blog em http://sidserra.blogspot.com.br.