Me gustaría usar FFmpeg en la línea de comandos de Mac Terminal para convertir un archivo .WMV. Estoy familiarizado con la sintaxis:
ffmpeg -i /path/OriginalMovieFile.wmv /path/NewMovieFile.???
Sin embargo, mi intento reciente de convertir un archivo .WMV de 38 MB a .MP4 resultó en un archivo de 800 MB que no se reproducía. Tal vez haya un error en mi sintaxis anterior. O tal vez necesito instalar un paquete especial para manejar .WMV.
¿Cómo puedo convertir archivos .WMV usando FFmpeg desde la línea de comandos de Mac Terminal?
wmv a menudo se detecta como 90k FPS por ffmpeg. (Ese es un valor de marcador de posición ya que el demuxer no mira la transmisión de inmediato para ver los intervalos entre los primeros cuadros).
El valor predeterminado de ffmpeg para la salida mp4 es el modo CFR, duplicando fotogramas para aumentar la velocidad de fotogramas (a 90000FPS en este caso). Incluso los códecs más eficientes toman unos pocos bytes para codificar un cuadro que es un duplicado exacto del anterior.
-vsync vfr
(igual que -vsync 2
) en la línea de comando debería solucionar el problema (permitiendo que ffmpeg no elimine ni duplique ningún cuadro, sino que solo use las marcas de tiempo de entrada para los cuadros de salida). Va después del archivo de entrada pero antes del archivo de salida, ya que es una opción de salida.
Aparte de eso, consulte https://trac.ffmpeg.org/wiki/Encode/H.264 , por ejemplo, para saber cómo elegir la configuración adecuada para lo que está haciendo. (por ejemplo, -preset veryslow
gastar mucho tiempo de CPU en una tarea de codificación única en la que la ganancia de calidad por tamaño de archivo se beneficiará muchas veces).
mplayer
solía mostrar los fps de los archivos wmv como 90k. En realidad, creo que vi algo como esto con salida mp4 y una entrada VFR mp4 real. Cuando codifica desde una fuente wmv, ¿qué formato de salida utiliza? El valor predeterminado de ffmpeg para la mayoría de los muxers es -vsync vfr
, pero se cambió a -vsync cfr
mp4 como una solución para algún error que puede ocurrir en un caso de esquina. re: 1) : este archivo de salida probablemente no esté cerca del nivel 5.2, si mi teoría es correcta. Si ffmpeg / x264 lo etiqueta como tal, eso es un error.Ambos avconv
y ffmpeg
sufren de los valores predeterminados mal elegidos para cada contenedor y códec. Por lo tanto, no debe simplemente dar el comando en el formato que ha presentado, sino también decirle qué hacer.
Yo uso avconv
, pero si aún lo usa ffmpeg
, el formato es bastante similar, por lo que debería poder seguirlo.
Deberá especificar la configuración de audio. En muchos casos, deseará copiar su audio sin volver a codificarlo. Esto se hace a través de -c:a copy
. Por ejemplo:
avconv -i video.wmv -c:a copy (...) video.mkv
Esta no era una línea completa, así que aún no la intentes.
También puede optar por volver a codificar su audio, en ese caso, en lugar de copy
usar el nombre del códec (o, por alguna razón, a menudo, la biblioteca que realiza la codificación). Por ejemplo, puedes escribir:
avconv -i video.wmv -c:a libvorbis (...) video.mkv
Pero esto no producirá buenos resultados, porque no proporcionamos ningún parámetro para la conversión de audio. Démosle una configuración de calidad, y luego estaremos listos con el audio:
avconv -i video.wmv -c:a libvorbis -q:a 3 (...) video.mkv
Ahora el vídeo. A menudo podemos simplemente copiar ese también, pero esto rara vez es lo que queremos. Si solo desea remuxar el archivo (lo que significa que desea cambiar el formato, pero no los códecs), puede hacer lo siguiente:
avconv -i video.wmv -c:a copy -c:v copy video.mkv
Como veis hemos copiado tanto el vídeo como el audio, y los metemos en el nuevo archivo que es de formato Matroska. Esta línea de comando ya funcionará, y puede intentarlo.
Debe tener en cuenta que no todos los formatos pueden aceptar todos los códecs posibles, algunos de ellos son más exigentes que otros.
Digamos que ahora desea volver a codificar el video en algo. Personalmente, prefiero libtheora, debido a que es un códec gratuito, pero puedes tener diferentes preferencias. Te dejaré decidir por ti mismo cuál usar.
Entonces podemos tener algo como esto:
avconv -i video.wmv -c:a copy -c:v libtheora -q:v 8 video.mkv
Allí pedí avconv
copiar el audio, pero recodificar el video con la biblioteca libtheora
y una calidad de video de 8. Todo se guardará dentro de video.mkv, lo que significa que es un archivo Matroska.
Puede jugar con la configuración, pero muy rara vez debe usar los ajustes preestablecidos predeterminados. Y tenga en cuenta que, incluso si el formato del archivo es el mismo para la salida que para la entrada, avconv
se volverá a codificar de forma predeterminada. Si desea copiar flujos, debe especificarlo manualmente.
llogan
-t
opción si la codificación de una duración corta es suficiente para ayudar a explicar el problema.