0

I am attempting to batch download a number of videos using ffmpeg. A list of the site addresses and save names is stored in a text file in the following format.

"site",filename.mp4

The code that I have is looping through the file and attempting to download each line by line.

#!/bin/bash

while IFS=, read dl nm
do
    echo $dl
    echo $nm
    /usr/bin/ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -i  $dl -c copy $nm
done < $1

The expected output is that on each loop ffmpeg would download the file indicated by each line and then proceed to the next iteration of the loop.

Instead, ffmpeg outputs the error message

"site": No such file or directory

When I run the same command directly in the terminal with the site name and save name directly inserted into the command, it works without any issue.

Looking at other posts seemingly related to this I have tried appending

< /dev/null

to the end of the ffmpeg call but it still has the same affect.

closed as off-topic by Jeff Schaller, Shadur, Archemar, Satō Katsura, Jesse_b Mar 17 '18 at 17:30

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions describing a problem that can't be reproduced and seemingly went away on its own (or went away when a typo was fixed) are off-topic as they are unlikely to help future readers." – Jeff Schaller, Shadur, Archemar, Satō Katsura, Jesse_b
If this question can be reworded to fit the rules in the help center, please edit the question.

  • 1
    This looks like an issue with your script. Which is the "input file" designator, the first or second option in the lines of text? If it's the first option, then are you sure that "site" is actually a file location that ffmpeg can access? Also, is there a reason you have thte "site" thing in quotes in the file itself? It'll read all that literally, so the $dl variable will be equal to "site" which is probably not what you're after. – Thomas Ward Mar 15 '18 at 15:16
  • The input file is the first option. And as I mentioned, using the input file directly in the terminal with quotes does work. I just tested it with the modification "$dl" and removed the quote from the text file, which seems to be what you were referencing, and it appears to be working. Thank you. – Javan Mar 15 '18 at 15:32
  • You're welcome. I summarized the findings and the proper solution that you tested in an answer, so you can mark the question as answered and accept the answer (if you wish) – Thomas Ward Mar 15 '18 at 16:06
0

There's some issues with your script, in that you're using quotes in the file with download URLs/locations.

Namely, that when you have the file the way you do, $dl becomes "site" and$nm` remains as you'd expect.

In order to do this, you either need to change the file so that the site download locations don't have quotes, and then you need to set quotes around $dl in the script.

So you'd end up with this:

input file list:

site,foobar.baz

Script:

#!/bin/bash

while IFS=, read dl nm
do
    echo $dl
    echo $nm
    /usr/bin/ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -i "$dl" -c copy $nm
done < $1

You might also want to wrap $nm in quotes as well in case you have a filename that has spaces in it, but that's your decision or not.

Not the answer you're looking for? Browse other questions tagged or ask your own question.