Я не очень хорошо разбираюсь в командной строке, так что, надеюсь, это не слишком глупый вопрос.
Если я бегу:
ffmpeg -i videofile.avi
Я получаю вывод, такой как этот:
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
Если бы меня интересовала только команда, выводящая «640x480», как я мог бы это сделать?
Я полагаю, я должен передать вывод и выполнить регулярное выражение? Не знаю, как это сделать. Спасибо!
0x44...
и второе - это разрешение).width x height
видеопоток в несколько строк. Этого можно избежать при желании с помощьюffprobe
или добавивhead -n 1
команду в ответ.Использование
ffprobe
из пакета ffmpeg:См. Документацию ffprobe и FFmpeg Wiki: советы ffprobe для получения дополнительной информации.
источник
выполнять работу без каких - либо
grep
сОднострочник выглядит так:
Это возвращает строку WxH, которую вы искали.
источник
Я вижу здесь только примеры использования
exiftool
и парсинга его вывода, что кажется странным выбором.exiftool
может быть использован прямым способом для получения разрешения (и почти любых других метаданных):exiftool -ImageSize -s3 filename
Будет ли приводит к выходу в форме
WIDTHxHEIGHT
(экв:1280×720
)ПРИМЕЧАНИЕ:
-s3
указывает exiftool создать кратчайший формат вывода (без имен тегов, кавычек и т. Д.)источник
Вы можете сделать это с помощью регулярных выражений и
ffmpeg
, но я бы предпочел, использоватьexiftool
часть пакета libimage-exiftool-perl :Почему
exiftool
?ffmpeg
/avprobe
утилитах печать строки в форме ,Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480
где один или несколько значений формAAAxBBB
возможны (как вы можете видеть в вашем примере). Определить, какое из них является разрешением, может быть сложно.exiftool
с другой стороны, выводит данные видаType : Value
. Так проще получить точное поле, а именноImage Size
. Кроме того, учитывая способ указания полей (разделенных двоеточием и пробелом), вы можете легко извлечь значение.Что
awk
делает команда:' *: *'
- двоеточие,:
окруженное любым количеством пробелов.$1
)Image Size
print $2
).Альтернативная версия будет:
Image
,Size
,:
и1242x480
все разные поля.^
) сImage Size
, мы получаем правильную строку.Image
, какSize
и:
первые три поля).источник
/usr/share/example
). : DСлегка эзотерическое использование
mediainfo
легко извлечет ширину и высоту в том формате, в котором вы находитесь после использования простого однострочного. Посмотрите на следующий пример в моей системе:Можно увидеть различные дополнительные параметры, которые можно использовать таким образом,
mediainfo --Info-Parameters
но, возможно, вам достаточно этого простого использования ...источник
Я сделал 1 линейный
for
цикл для извлечения разрешения из каталога файлов.источник
ls
не закончится хорошо ... цитирование не исправит беспорядок