How to escape colon sign from variable in shell?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to escape colon sign from variable in shell?
# 1  
Old 09-13-2018
How to escape colon sign from variable in shell?

Hello,
Below script works fine when I manually enter required information for each file. When it comes to shell in auto mode, it gives various errors.
I am under ubuntu 14.04 / trusty.

manual_run.sh:
Code:
#!/bin/bash
/usr/bin/ffmpeg -start_at_zero -copyts -i nicki.mp4 -c:v mpeg2video \
-b:v 500k -minrate 500k -maxrate 500k \
-vf "[in]drawtext=fontsize=12:fontcolor=White:fontfile='/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf':\
text='%{pts\:gmtime\:0\:%M\\\\\:%S}':x=60:y=20, \
drawtext=fontsize=12:fontcolor=Yellow:fontfile='/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf':\
text='nicki':x=360:y=20,\
drawtext=fontsize=12:fontcolor=White:fontfile='/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf':\
text='00\:05\:22.22':x=660:y=20:[out]" \
-metadata service_provider="stream" -metadata service_name="Info Kanalen" -f mpegts \
 /var/www/html/output.mp4

auto_sh:
Code:
#!/bin/bash
while read -r COL1 COL2
do
/usr/bin/ffmpeg -start_at_zero -copyts -i "$COL1" -c:v mpeg2video \
-b:v 500k -minrate 500k -maxrate 500k \
-vf "[in]drawtext=fontsize=12:fontcolor=White:fontfile='/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf':\
text='%{pts\:gmtime\:0\:%M\\\\\:%S}':x=60:y=20, \
drawtext=fontsize=12:fontcolor=Yellow:fontfile='/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf':\
text='"$COL1"':x=360:y=20,\
drawtext=fontsize=12:fontcolor=White:fontfile='/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf':\
text='"$COL2"':x=660:y=20:[out]" \
-metadata service_provider="stream" -metadata service_name="Info Kanalen" -f mpegts \
/var/www/html/$(basename "${COL1/.mp4}")_t.mp4
done < duration

duration:
Code:
restaurant.mp4 00:02:30.51
nicki.mp4 00:05:22.22

The difference between manual and auto sh files are subjected to column2. Seems like I am unable to escape colon ( : ) sign as it was assigned to a variable.

output_error1:
Code:
[Parsed_drawtext_2 @ 0x286de80] Could not load font "02": cannot open resource
[AVFilterGraph @ 0x266a400] Error initializing filter 'drawtext' with args 'fontsize=12:fontcolor=White:fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf:text=00:02:30.51:x=660:y=20:'
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0

output_error2:
Code:
icki.mp4: No such file or directory

Also, I do not understand why it gives no file found error, why the letter n for nicki is missed etc ..


I'd kindly appreciate your help

Many thanks
Boris
# 2  
Old 09-13-2018
That missing n could indicate some non-printing control char in your input file. Sure there's none? How did you create that file?


If you need the colons in your input file escaped, you could use

- "process substitution" for your input file, like done < <(sed 's/:/\\:/g' duration)
- "parameter expansion" for the COL2 variable, like inserting COL2=${COL2//:/\\:}; before the ffmpeg command.
This User Gave Thanks to RudiC For This Post:
# 3  
Old 09-13-2018
Dear Rudic,
Thanks for your answer. You saved my time.
Lesson learnt:
- New notation for me: done < <(sed 's/:/\\:/g' duration)
-vf is not supported while loop

Kind regards
Boris




Many thanks
Boris
# 4  
Old 09-13-2018
There's no particular reason -vf shouldn't work in a while loop. It's just very tricky to get all the quoting and escaping right. Shove printf "\t%s\n" in front of ffmpeg to see what its really doing - it will print each separate argument on its own line. You'll be able to tell if your quotes broke somewhere.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Escape characters in a variable

Debian 9 64x - LXDE How can i disable escape sequences in a variable? #!/bin/bash #mainscript . "./links.bash" echo "$red_start This text should be red $color_end"#!/bin/bash #links.bash #colors red_start="\eOutput that i get: \e Output expected: This text should be... (5 Replies)
Discussion started by: int3g3r
5 Replies

2. Shell Programming and Scripting

Variable has value with = or == sign

I have a script which is reading value from property file and doing replacement in source location which contains multiple files. property file has values abc=xyz; yux=1;version=3.0; bcd=123;apple==mango when my script does search and reads value from property file. its replacing value... (1 Reply)
Discussion started by: Shamkamde
1 Replies

3. Shell Programming and Scripting

How to store a escape character in a Variable.?

How to store escape character in the variable. Var=abc,def,ghi,jkl echo ${Var} | sed -e "s/,/|\\\\./g;s/^/\\\\./g" \.abc|\.def|\.ghi|\.hjk Var1=`echo ${Var} | sed -e "s/,/|\\\./g;s/^/\\\./g"` Actual: ------- echo $Var1 .abc|.def|.ghi|.jkl Expected: --------- echo $Var1... (4 Replies)
Discussion started by: deepakwins
4 Replies

4. Shell Programming and Scripting

Shell not parsing $ sign from file

PFB my shell script which reads a csv file to process it ############################################### fn_java(){ echo JAVA_TOP is $JAVA_TOP echo "cp $filename $filepath/$filename" cp $filename $filepath/$filename } #########################################... (9 Replies)
Discussion started by: Prasannag87
9 Replies

5. Shell Programming and Scripting

PERL : check + or - sign in a variable

I have a variable $max = -3; It can be $max = +3; I need to check if this variable is a positive/negative value. if its positive, should print "positive" if not "negative" How can this be done? Thanks in advance (2 Replies)
Discussion started by: irudayaraj
2 Replies

6. Shell Programming and Scripting

awk not escape my bash variable

I tried to parse data from switch configuration files vlan 1727 name SQ5506-15 by port tagged ethe 8/1 to 8/2 untagged ethe 1/13 ! vlan 2105 name SQ5620-7007(BR2) by port tagged ethe 8/1 to 8/2 untagged ethe 1/17 ! interface ethernet 1/13 port-name SQ5506-15.nic0 rate-limit... (2 Replies)
Discussion started by: winggundamth
2 Replies

7. UNIX for Dummies Questions & Answers

Variable with @ sign is driving me crazy

Ok so I am working on a command that is going to do a Dig @ a certain IP address which is enclosed in a variable. Now I thought I had this figure out because it works. The problem is that it does not ALWAYS work. the variable is IP=192.168.1.1 the commands I have tried are dig... (2 Replies)
Discussion started by: MrEddy
2 Replies

8. Shell Programming and Scripting

How to escape from the shell

In a Script I need to push several messages to a function. My problem here is: I have to print the string v$LOCK on the resulting line which spits out the message. What I want here is not printing the contents of $LOCK I want to escape the shell and printout v$LOCK on the line. But don't know how... (3 Replies)
Discussion started by: sdohn
3 Replies

9. UNIX for Dummies Questions & Answers

Need help to escape special characters in Korn shell script

Hi, I would like to display the following message from my shell (Korn) script Copy "old_file.txt" to "new_file.txt" My code looks as follows print "Copy "old_file.txt" to "new_file.txt"" However, when I execute the script, I get the following output Copy old_file.txt to... (6 Replies)
Discussion started by: rogers42
6 Replies

10. Shell Programming and Scripting

Sign on/Sign off logging script

I'd like to make a script that I can execute every time I sign on to my linux box that keeps track of the time and allows to me to add a remark to a file. So basically once I log in, I run the script, and it outputs the date and time to a text file (log.txt). But that isn't my problem. I need... (1 Reply)
Discussion started by: Glider
1 Replies
Login or Register to Ask a Question