Running ffmpeg in loop seems to change reading from file


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
Running ffmpeg in loop seems to change reading from file

Hi everyone,

I am fairly new to shell scripting. I want to read in numbers from a file (one number per line). This works perfectly fine

Code:
  
while read CurrentLine
do
echo $CurrentLine
done < myfile

and yields the correct output:

Code:
 
272
745
123

If I however run a ffmpeg command in the loop

Code:
  
while read CurrentLine
do
echo $CurrentLine
ffmpeg -sameq -vframes 1 -ss 2 -i PMI_thin_02.avi -f image2  a_b.png
done < myfile

the output changes (I ommit the ffmpeg output and just give the echo command output):

Code:
 
272
5
3

If I add two spaces in the txt-file I read in, such as

Code:
 
272
  745
  123

the echo command returns the right numbers again - for some reason, the ffmpeg commands seems to result in the skipping of the first two characters in the new line.
If I put an additional for-loop around the while loop to loop over several files such as in

Code:
 
for FileName in *.txt; do
	while read CurrentLine
	do
	echo $CurrentLine
ffmpeg -sameq -vframes 1 -ss 2 -i PMI_thin_02.avi -f image2  a_b.png
	done < "${FileName}"

The first line of every file is read in correctly, but for all subsequent lines, the first two characters are skipped. Does anybody have any idea what is going on? I am very grateful for any hint.

Best,
Thriceguy
# 2  
My guess is that ffmpeg is reading two bytes from stdin. If you are using, or can use, kshell, then you can avoid that with code like this:

Code:
#!/bin/ksh

exec {fd}<data-file      # open the file assign file descriptor to fd
while read -u $fd buf   # read from fd rather than stdin
do
    echo $buf
    #ffmpeg-command and parms
done
<&$fd-      # close the file



The while reads from the file descriptor opened by the exec statement and assigned to fd and thus isn't affected by what anything in the loop might read from stdin.

If you need to, or would rather use bash, then you'll have to specifically pick a file descriptor to use:

Code:
fd=11
exec 11<data-file        # open the file assign file descriptor to fd
while read -u $fd buf   # read from fd rather than stdin
do
    echo "$buf $foo"
    ffmpeg-command here
done
<&$fd-      # close the file



And, from my small bit of testing, you have to supply a hard number on the exec when using bash, this seems not to work: exec $fd<data-file

---------- Post updated at 13:04 ---------- Previous update was at 12:58 ----------

Kludgy, but this would work allowing the variable contents to be used when opening:

Code:
fd=9
eval exec $fd\<data-file

This User Gave Thanks to agama For This Post:
# 3  
Thanks a lot, it works perfectly.

Best,
Thriceguy
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #176
Difficulty: Easy
Apple's first product was the Apple I, invented by Apple co-founder Steve Wozniak.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

To call ffmpeg in a loop

Hello, I was inquiring myself if it's possible to call ffmpeg in loop, an in each iteration, ffmpeg will pick one of the files in a directory and produce a new with a slightest different name. Can be as simple as a '*' in the beginning of the file name. I know how to use ffmpeg to do the... (2 Replies)
Discussion started by: colt
2 Replies

2. Shell Programming and Scripting

Sequential Reading from two file in a loop

Hello All, I have two files with me file1.txt and file2.txt file1.txt has: 333 222 111 file2.txt has ccc bbb aaa ccc is related to 333 only, bbb is related to 222 only and aaa is related to 111 only. I have to get the values from each of the file and pass them in the URL... (3 Replies)
Discussion started by: ankur328
3 Replies

3. Ubuntu

How to change ffmpeg default font size?

Hello, I have a problem with Greek subtitle font size when I map a subtitle file into a video in ffmpeg. I ran below code: ffmpeg -i video.mp4 -sub_charenc CP1253 -i video_sub.srt -c:v copy -c:a copy \ -c:s mov_text -metadata:s:s:0 language=gr mapped_video.mp4 When I play it in VLC,... (2 Replies)
Discussion started by: baris35
2 Replies

4. Shell Programming and Scripting

Removing \r and \n during reading file through while loop

Hi, I am writing in a file through cat command. This file will contain the path of file along with filename. e.g. /home/user/folder1/folder2/filename.txt There might be very large number of this path in same file like say 140 when I try to run while command: while read -r file do //command... (8 Replies)
Discussion started by: Pulkit Lall
8 Replies

5. Shell Programming and Scripting

reading the values from a file in C Shell for loop

Hi All, I need small help on for loop syntax in C shell. How can we read the values from a file (line by line) through C shell loop. For Ex: $Cat file1 data1 data2 data3 data4 $ I have to print those values in a variable and have to perform some steps... Can anyone help on... (2 Replies)
Discussion started by: raghu.iv85
2 Replies

6. Shell Programming and Scripting

Loop is not reading tabs from the file

Hi, I am on HP-UX and K shell. When I am using while/for loop for reading a file. It is working fine but not reading tabs: Suppose, if the line is: ; ;COMP; ; ; ; then loop is reading as ; ;COMP; ;... (5 Replies)
Discussion started by: ezee
5 Replies

7. Shell Programming and Scripting

Problem reading file in while/read loop

I know I should be able to see a way of doing this easily, but my brain just won't engage. I have a script working on an embedded device that checks to see if an item is in a blacklist before performing some actions. At the moment the code reads thus.... while read BLACKLIST ; do ... (7 Replies)
Discussion started by: Bashingaway
7 Replies

8. AIX

How to pause a while loop while reading from a file

Hi, I am building a script to grep for a string in all the files from a folder and display the results. I am reading the files one by one by placing the names in other file using while loop my code is as below while read inp do chk=`grep -c "$str" $pth/$inp` ... (2 Replies)
Discussion started by: sekhar gajjala
2 Replies

9. Shell Programming and Scripting

How to get the modified value of variable outside the while loop reading from a file

Hi Friends , Sorry if this is a repeated question , The input file contains 5 lines , so the the values of the variables i and count should b i=5; count=15 but the variables are not updating , the value of variables showing i=0 and count =0 only.:mad: can any1 help me please. (11 Replies)
Discussion started by: babusek
11 Replies

10. UNIX for Dummies Questions & Answers

How to make a loop base on reading a file?

To make it clearer: I have a file, List.txt List.txt contains: (these are actually splitted files w/c I got from ls command and dump them to the List.txt file) SAMPLEa SAMPLEb SAMPLEc SAMPLEd SAMPLEe SAMPLEf . . . . . And I want to rename these files to have a .dat extension.... (3 Replies)
Discussion started by: JohnBalayo
3 Replies

Featured Tech Videos