LINUX.ORG.RU

CSV + ffmpeg = No such file or directory

 , ,


1

1

Люди знающие, помогите разобраться. Убил кучу времени, но так и не смог понять.

Задача: есть CSV файлик с двумя столбцами данных, разделенные точкой с запятой. Нужно из файла вынуть данные и заставить ffmpeg сделать скриншоты из каждого RTSP-url. Скрины раскидать по папкам с именем из первого столбца. А ссылка на RTSP - второй столбец.

[code]

#!/bin/sh

INPUT=/home/projects/SCR/ID.csv

OLDIFS=$IFS

IFS=‘;’

[ ! -f $INPUT ] && { echo «$INPUT file not found»; exit 99; }

while read id url

do

mkdir -p /SSP_DATA/projects/SCR/$id

#url=«rtsp://admin:12345@10.10.10.10:554/h264» - если раскомментировать, то файл $id-n.jpg создается

ffmpeg -rtsp_transport tcp -i $url -f image2 -an -r 1 -vframes 1 -y /home/projects/SCR/$id/$id-n.jpg

done < $INPUT

IFS=$OLDIFS

[/code]

Содержимое файла ID.csv:

10138;«rtsp://admin:12345@10.10.10.10:554/h264»

10139;«rtsp://admin:12345@10.10.10.11:554/h264»

10140;«rtsp://admin:12345@10.10.10.12:554/h264»

Итог выполнения ffmpeg: No such file or directory, но при этом, если указать RTSP-url внутри скрипта, файл создается.

Спасибо за помощь заранее!

Ответ на: комментарий от anonymous

Что то парень завис. Ладно, помогу еще немного

cat 1.txt

10138;«rtsp://admin:12345@10.10.10.10:554/h264»
10139;«rtsp://admin:12345@10.10.10.11:554/h264»
10140;«rtsp://admin:12345@10.10.10.12:554/h264»

while IFS=';' read -r id url; do echo "$id - $url"; done < 1.txt

10138 - «rtsp://admin:12345@10.10.10.10:554/h264»
10139 - «rtsp://admin:12345@10.10.10.11:554/h264»
10140 - «rtsp://admin:12345@10.10.10.12:554/h264»
anonymous ()

Всем огромное спасибо за наводки по решению проблемы. После долгих мучений, все же была найдена проблема: при сохранении *.csv в Win (Excel), в конце строк дописываются спецсимволы ^M, которые является лишними для Unix. Перед обработкой требуется очистка файла с помощью dos2unix.

Ниже привожу пример рабочего скрипта:


#!/bin/sh

csvFile=/url_to_file.csv

dos2unix /url_to_file.csv # Чистим файл для unix!!!

while read -r line

do

ID=$(echo $line | awk -F’;’ ‘{printf «%s», $1}’ | tr -d ‘"’)

URI=$(echo $line | awk -F’;’ ‘{printf «%s», $2}’ | tr -d ‘"’)

Смотрим работу скрипта

echo "                      "

echo "                      "

echo "                      "

echo "--------START---------"

echo "ID : $ID"

echo "URL: $URI"

echo "----------------------"

mkdir -p /url_to_screenshots/SCR/$ID

Смотрим параметры, передаваемые FFMPEG

echo «———————-»

echo «ffmpeg -rtsp_transport tcp -i $URI -f image2 -an -r 1 -vframes 1 -y /url_to_screenshots/SCR/$ID/$ID-d.jpg»

echo «———————-»

Снимаем скриншот, сохраняем

ffmpeg -nostdin -rtsp_transport tcp -i $URI -f image2 -an -r 1 -vframes 1 -s 1280x720 -y /url_to_screenshots/SCR/$ID/$ID-d.jpg

chmod 777 /url_to_screenshots/SCR/$ID

done < $csvFile


Сам CSV файл выглядит таким образом:

1245456;rtsp://cam_ip1/av0_0

1245457;rtsp://cam_ip2/av0_0

1245458;rtsp://cam_ip3/av0_0

Далее - запуск по CRON в нужное время.

Enjoy!

Dr_Diesel ()