shell script ffmpeg

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

shell script ffmpeg

Непрочитанное сообщение pimlab » 2016-11-02 15:32:39

Решил тут свою фильмотеку привести в порядок.
На просторах нета выкопал и собрал скрипт,который пережимает и выравнивает звук у конечного ролика, но вот не задача где-то теряется точка и ffmpeg сxодит с ума.
по порядку..

Код: Выделить всё

#! /bin/sh
dir="./2007/"
for ext in AVI avi; do for file in $dir*.$ext; 
do
volumeinfo=$(ffmpeg -hide_banner -i "$file" -af volumedetect -vn -f null /dev/null 2>&1)
vfvol=$(echo "$volumeinfo" | sed -nr '/max_volume:/ s/.*[[:space:]]-?([[:digit:]\.]+)[[:space:]]+dB$/\1/p')  
echo "$file volume=${vfvol}"
 /usr/local/bin/ffmpeg -hide_banner -i "$file" \
  -c:v libx264 -preset veryslow -crf 20 -pix_fmt yuv420p -y \
 -tune film -profile:v high \
 -map_metadata 0 -vf smartblur \
 -metadata:s:a:0 language=rus -metadata:s:v:0 language=rus \
 -c:a libfdk_aac -b:a 128k \
 -ar 44100 -af "volume="${vfvol}"dB"  \
 -f mp4 $dir"$(basename  "$file" .$ext).mp4"
как и положено

Код: Выделить всё

echo "$file volume=${vfvol}"
на тeстовом ролике выводит "тест.avi volume=5.4"
Но далее в config ffmpeg уже подставляет 5 4 без точки и ffmpeg уже работает не верно... 4 для него выходной фаил.
почему теряется точка?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

shell script ffmpeg

Непрочитанное сообщение BlitzKrieg » 2016-11-03 9:58:00

Попробуйте поменять . на \. например.
В общем и целом я бы попробовал эту строчку повыполнять разным образом экранируя . с целью добиться искомого результата без скрипта.

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

shell script ffmpeg

Непрочитанное сообщение pimlab » 2016-11-03 10:24:27

BlitzKrieg писал(а):Попробуйте поменять . на \. например.
В общем и целом я бы попробовал эту строчку повыполнять разным образом экранируя . с целью добиться искомого результата без скрипта.
Где экранировать?
Мы видимо друг друга не поняли...
По ходу выполнения скрипта получаю

Код: Выделить всё

echo "$file volume=${vfvol}"
в консоли "тест.avi volume=5.4"
а далее он вставляет

Код: Выделить всё

-ar 44100 -af "volume="${vfvol}"dB"

Код: Выделить всё

-ar 44100 -af volume=5 4db
если вписать руками ,то само собой все отрабатывает

Код: Выделить всё

-ar 44100 -af volume=5.4db
, но ведь цель автоматизировать

попробуйте у себя запустить

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

shell script ffmpeg

Непрочитанное сообщение BlitzKrieg » 2016-11-03 10:52:21

Я все правильно понял. Попробуйте сделать так, чтобы у вас переменная vfvol содержала \. т.е. чтобы echo "${vfvol}" выводило 5\.4.

Отправлено спустя 12 минут 14 секунд:
И да, было бы лучше, если после /bin/bash была бы пустая строка :-) mc тогда подсвечивает :-)

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

shell script ffmpeg

Непрочитанное сообщение pimlab » 2016-11-03 11:11:54

сработало ! спасибо !

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

shell script ffmpeg

Непрочитанное сообщение BlitzKrieg » 2016-11-03 11:15:28

У вас там натурально sh или какой интерпретатор? Я попробовал с враппером+бузибокс и эффекта такого не достиг.

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

shell script ffmpeg

Непрочитанное сообщение pimlab » 2016-11-03 11:19:37

если кому надо, то вот конечный работаюший скрипт

Код: Выделить всё

#! /bin/sh

dir="./2007/"

for ext in AVI avi; do for file in $dir*.$ext;
do
volumeinfo=$(ffmpeg -hide_banner -i "$file" -af volumedetect -vn -f null /dev/null 2>&1)
vfvol=$(echo "$volumeinfo" | sed -nr '/max_volume:/ s/.*[[:space:]]-?([[:digit:]\.]+)[[:space:]]+dB$/\1/p' | sed /[.]/\. /) 
echo "$file volume=${vfvol}"
 /usr/local/bin/ffmpeg -hide_banner -i "$file" \
  -c:v libx264 -preset veryslow -crf 20 -pix_fmt yuv420p -y \
 -tune film -profile:v high \
 -map_metadata 0 -vf smartblur \
 -metadata:s:a:0 language=rus -metadata:s:v:0 language=rus \
 -c:a libfdk_aac -b:a 128k \
 -ar 44100 -af "volume="${vfvol}"dB"  \
 -f mp4 $dir"$(basename  "$file" .$ext).mp4"

Отправлено спустя 2 минуты 12 секунд:
BlitzKrieg писал(а):У вас там натурально sh или какой интерпретатор? Я попробовал с враппером+бузибокс и эффекта такого не достиг.
чтото мне кажется это из-за UTF в консоли.
с bash таже песня