Me gustaría cambiar el códec de audio, pero mantener la configuración de video con ffmpeg

27

Tengo un video para el que me gustaría convertir el códec de audio a AAC 320 kbps / 44.100 kHz. ¿Qué usaría para los interruptores ffmpeg de modo que todas las configuraciones de video y códec permanezcan iguales, pero solo cambien la configuración y el códec de audio?

Aquí está mi video:

$ ffmpeg -i Winnipeg.rb\ Scala-Talk.mov 
FFmpeg version SVN-r25375, Copyright (c) 2000-2010 the FFmpeg developers
  built on Oct  6 2010 13:02:41 with gcc 4.2.1 (Apple Inc. build 5664)
  configuration: --enable-libmp3lame --enable-shared --disable-mmx --arch=x86_64
  libavutil     50.32. 2 / 50.32. 2
  libavcore      0. 9. 1 /  0. 9. 1
  libavcodec    52.92. 0 / 52.92. 0
  libavformat   52.80. 0 / 52.80. 0
  libavdevice   52. 2. 2 / 52. 2. 2
  libavfilter    1.48. 0 /  1.48. 0
  libswscale     0.12. 0 /  0.12. 0

Seems stream 0 codec frame rate differs from container frame rate: 2000.00 (2000/1) -> 10.00 (10/1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Winnipeg.rb Scala-Talk.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
  Duration: 01:10:53.00, start: 0.000000, bitrate: 283 kb/s
    Stream #0.0(eng): Video: h264, yuv420p, 800x598, 94 kb/s, 10 fps, 10 tbr, 1k tbn, 2k tbc
    Stream #0.1(eng): Audio: adpcm_ima_qt, 22050 Hz, 1 channels, s16
    Stream #0.2(eng): Audio: adpcm_ima_qt, 22050 Hz, 1 channels, s16
At least one output file must be specified

¡Muchas gracias de antemano! Una cosa con ffmpeg que nunca he podido asimilar es cómo "ajustar" los archivos sin tener que regurgitar cada pequeña configuración para las cosas que no desea cambiar.

Craig Tataryn
fuente
El audio (así como el video) parece tener una calidad bastante baja. Tenga en cuenta que en realidad no aumentará la calidad del audio cambiando el formato, aumentando la frecuencia de muestreo y aumentando la tasa de bits.
Force Flow

Respuestas:

35

Una agregación de la respuesta de Ehsan con el comentario de fletom que funciona para mí, gracias a ambos.

ffmpeg -i input.avi -acodec mp3 -vcodec copy out.avi
igorushi
fuente
solo como referencia, ya que siempre olvido esta -vcodec copyparte
igorushi
2
¿Puedes ampliar un poco tu respuesta para explicarla? Gracias.
Fixer1234
2
-i input.aviespecifica el archivo que desea convertir. out.avies el archivo convertido -acodec mp3dice convertir la secuencia de audio a mp3 mientras la escribe en el archivo de salida. vcodec copydice que simplemente copie la transmisión de video en el archivo de salida sin cambiarlo.
Wodin
8

Es difícil juzgar lo que está haciendo, ya que el comando ffmpeg fue un poco confuso en su publicación.

Para reemplazar una pista de audio:

ffmpeg -i test.avi -i normalized.mp3 -map 0:0 -map 1:0 -vcodec copy -acodec copy new_test.avi

Se puede encontrar más información sobre los parámetros anteriores en: Documentación de FFmpeg .

harrymc
fuente
1
Gracias. Esto resolvió mi problema. Cuando ejecuto ffmpeg -i old.mkv -i onlySound.m4a out.mkvla operación lleva más tiempo. ¿Por qué es así?
Zeta
6

Si solo desea cambiar los códecs de audio y / o video, puede agregarlos como parámetros de la siguiente manera:

Simplemente cambie el códec de audio a mp3 (cualquiera que sea el códec original)

ffmpeg -i input.avi -acodec mp3 out.avi

Simplemente cambie el códec de video a h264

ffmpeg -i input.avi -vcodec h264 out.avi

Es bueno tener en cuenta que ffmpeg debe admitir la codificación del nuevo códec. Ver /programming/3377300/what-are-all-codecs-supported-by-ffmpeg

Ehsan88
fuente
55
Esto funcionó para mí, pero necesitaba agregarlo -vcodec copypara evitar que intentara transcodificar mi video a h.264. No sé por qué lo hizo por defecto.
fletom
-1

¿Por qué no usas Handbrake, que permite guardar el video y cambiar el audio? Es una GUI para FFmpeg y funciona de maravilla.

Benny
fuente
3
HandBrake en realidad no puede hacer esto; puede hacer una copia simple de secuencias de audio o subtítulos, pero siempre vuelve a codificar el video.
evilsoup