No estoy muy versado en la línea de comando, así que espero que no sea una pregunta demasiado estúpida.
Si corro:
ffmpeg -i videofile.avi
Me sale una salida como esta:
ffmpeg version git-2013-11-21-6a7980e Copyright (c) 2000-2013 the FFmpeg develop ers
built on Nov 21 2013 12:06:32 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configuration: --prefix=/home/user/ffmpeg_build --extra-cflags=-I/home/user/ffmpeg_build/include --extra-ldflags=-L/home/user/ffmpeg_build/lib --b indir=/home/user/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable -libfdk- aac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-l ibx264 --enable- nonfree
libavutil 52. 53.100 / 52. 53.100
libavcodec 55. 44.100 / 55. 44.100
libavformat 55. 21.100 / 55. 21.100
libavdevice 55. 5.100 / 55. 5.100
libavfilter 3. 91.100 / 3. 91.100
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, avi, from 'videofile.avi':
Metadata:
encoder : Lavf52.68.0
Duration: 00:23:07.68, start: 0.000000, bitrate: 2390 kb/s
Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 23.98 fps, 23.98 tbr, 23.98 tbn, 1199 tbc
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 128 k b/s
Si solo estuviera interesado en el comando que genera "640x480", ¿cómo podría hacerlo?
Me imagino que tengo que canalizar la salida y realizar una expresión regular. No tengo idea de cómo hacer eso. ¡Gracias!
0x44...
y la segunda son la resolución).width x height
transmisión por video en varias líneas. Esto se puede evitar si se desea conffprobe
, o agregandohead -n 1
al comando en la respuesta.Usando
ffprobe
desde el paquete ffmpeg:Consulte la documentación de ffprobe y FFmpeg Wiki: consejos de ffprobe para obtener más información.
fuente
hacer el trabajo sin ningún
grep
sOne-liner se ve así:
Eso devuelve la cadena WxH que estaba buscando.
fuente
Solo veo aquí ejemplos de uso
exiftool
y análisis de su salida, lo que parece ser una elección extraña.exiftool
se puede usar de manera directa para obtener la resolución (y casi cualquier otro metadato):exiftool -ImageSize -s3 filename
Will resultados de la producción en una forma
WIDTHxHEIGHT
(eq:1280×720
)NOTA:
-s3
indica a exiftool que produzca el formato de salida más corto (sin nombres de etiquetas, comillas, etc.)fuente
Puede hacer esto usando expresiones regulares y
ffmpeg
, pero prefiero usarexiftool
, parte del paquete libimage-exiftool-perl :¿Por qué
exiftool
?ffmpeg
/avprobe
utilities imprimen líneas del formularioStream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480
donde es posible uno o más valores del formularioAAAxBBB
(como puede ver en su ejemplo). Determinar cuál es la resolución puede ser difícil.exiftool
, por otro lado, genera datos del formularioType : Value
. Por lo tanto, es más fácil obtener el campo exacto, a saberImage Size
. Además, dada la forma en que se especifican los campos (separados por dos puntos y espacios en blanco), puede extraer fácilmente el valor.Lo que hace el
awk
comando es:' *: *'
- dos puntos:
rodeados por cualquier número de espacios.$1
) esImage Size
print $2
).Una versión alternativa sería:
Image
,Size
,:
y1242x480
son todas diferentes campos.^
) conImage Size
, obtenemos la línea correcta.Image
,Size
y:
son los primeros tres campos).fuente
/usr/share/example
). : DUn uso ligeramente esotérico de
mediainfo
extraerá fácilmente el ancho y la altura en el formato que está utilizando una línea simple. Observe el siguiente ejemplo en mi sistema:Se pueden ver los diversos parámetros adicionales que se pueden utilizar de esta manera,
mediainfo --Info-Parameters
pero tal vez este simple uso por sí solo sea suficiente para usted ...fuente
Hice un
for
bucle de 1 línea para extraer la resolución del directorio de archivos.fuente
ls
no terminará bien ... las citas no solucionarán el problema