2010-05-19 25 views
10

A menudo tengo problemas para leer un archivo AVI con mi reproductor de DVD de TV si no son divx o xvid (DX50, es decir, no es legible).cómo reconocer el códec de video de un archivo con ffmpeg

Me gustaría hacer un script rápido para reconocer el códec de video de estos archivos antes de grabarlo en cdrom/dvd.

El comando:

ffmpeg -i file.avi 

dar el "contenedor" de la secuencia de vídeo (MPEG4, MPEG2, etc), no el códec.

¿Alguna pista?

Gracias

+0

No se puede reproducir. ffmpeg-0.5-5.20091026svn.fc12.x86_64 –

Respuesta

2

FFmpeg proporciona el códec también. Tire de la línea Stream #0.0: Video y puede ver el códec. (Tenga en cuenta que técnicamente podría tener un número de flujo diferente, como 0.1.) El resultado a continuación utiliza el MS Video-1. Esto es diferente, al igual que usted desee, desde el contenedor que se denota por Input #0, avi

ej .:

FFmpeg version 0.5, Copyright (c) 2000-2009 Fabrice Bellard, et al. 
    configuration: --prefix=/opt/local --disable-vhook --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libfaac --enable-libfaad --enable-libxvid --enable-libx264 --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64 
    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 1. 4. 0/1. 4. 0 
    libswscale  1. 7. 1/1. 7. 1 
    libpostproc 51. 2. 0/51. 2. 0 
    built on Jan 8 2010 15:34:15, gcc: 4.2.1 (Apple Inc. build 5646) (dot 1) 
Input #0, avi, from 'Movies/fvss_demo.avi': 
    Duration: 00:02:00.30, start: 0.000000, bitrate: 719 kb/s 
    Stream #0.0: Video: msvideo1, rgb555, 160x120, 10 tbr, 10 tbn, 10 tbc 
    Stream #0.1: Audio: pcm_u8, 8000 Hz, mono, s16, 64 kb/s 
At least one output file must be specified 
manoa:~ stu$ 
2

Trate MediaInfo lugar.

Enumera el códec para cada flujo y su salida es lo suficientemente simple como para analizar; también hay una opción de salida XML si prefiere las consultas tipo XPath.

20

mediainfo

mediainfo --Inform="Video;%Codec%" video.mkv 

Mi caso de retorno:

V_MPEG4/ISO/AVC 

respuesta posible gracias a How to find duration of a video file using mediainfo in seconds or other formats?

ffprobe (ffmpeg) forma fácil

Asumiendo que su vídeo tiene una solo transmisión de video:

ffprobe -v error -select_streams v:0 -show_entries stream=codec_name \ 
    -of default=noprint_wrappers=1:nokey=1 video.mkv 

Will en mi caso de retorno:

h264 

respuesta posible gracias a How to get video duration in seconds?

ffprobe (ffmpeg) manera sucia

Este método es más fácil de entender, pero desordenado.

Para obtener la información del códec sin reproducir el archivo, use ffprobe.

$ ffprobe video.mkv 
[...] 
Input #0, matroska,webm, from 'video.mkv': 
    Metadata: 
    ENCODER   : Lavf56.25.101 
    Duration: 00:28:05.15, start: 0.000000, bitrate: 4353 kb/s 
    Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p, 1280x960, SAR 1:1 DAR 4:3, 29.97 fps, 29.97 tbr, 1k tbn, 59.94 tbc (default) 
    Metadata: 
     ENCODER   : Lavc56.26.100 libx264 
    Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default) 
    Metadata: 
     ENCODER   : Lavc56.26.100 libvorbis 

para extraer la información de códec de vídeo - desde ffmpeg envía información a stderr - pipe y GrEP que:

$ ffprobe video.mkv 2>&1 >/dev/null | grep Stream.*Video 
    Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p, 1280x960, SAR 1:1 DAR 4:3, 29.97 fps, 29.97 tbr, 1k tbn, 59.94 tbc (default)

Para reducir esto aun más lejos, introducir SED:

$ ffprobe video.mkv 2>&1 >/dev/null |grep Stream.*Video | sed -e 's/.*Video: //' -e 's/[, ].*//' 
h264
+2

También puede usar -show_streams (y otras opciones relacionadas) en lugar de utilizar las opciones sed/grep algo oscuras e inestables. "ffprobe $ file -show_streams | grep^codec_name =" daría el resultado del códec, pero en un método más compatible con el futuro. –

0

ffmpeg lo tiene. En Mac lo hice de esta manera:

primera ffmpeg descarga esta manera:

brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-frei0r --with-libass --with-libvo-aacenc --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-tools 

y luego ejecutar desde la línea de comandos:

ffmpeg -filter:v idet \ 
    -frames:v 100 \ 
    -an \ 
    -f rawvideo -y /dev/null \ 
    -i ~/Downloads/yourfile.mp4 

continuación, comprobar si hay algo como esto en la salida :

Duración: 00: 00: 05,48, empezar: 0,000000, tasa de bits: 952 kb/s corriente # 0: 0 (eng): vídeo: h264 (Principal) (avc1/0x31637661), yuv420p (tv, bt709), 750x1334, 619 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (predeterminado)

Cuestiones relacionadas