title: passing script variable of filename with spaces in bash to external program (ffmpeg) fails
body: <p>Short story:  I'm trying to write a script that will use FFmpeg to convert the many files stored in one directory to a "standard" mp4 format and save the converted files in another directory. It's been a learning experience (a fun one!) since I haven't done any real coding since using Pascal and FORTRAN on an IBM 370 mainframe was in vogue.</p>
  
  <p>Essentially the script takes the filename, strips the path and extension off it, reassembles the filename with the path and an mp4 extension and calls FFmpeg with some set parameters to do the conversion. If the directory contains only video files with without spaces in the names, then everything works fine.  If the filenames contain spaces, then FFmpeg is not able to process the file and moves on to the next one.  The error indicates that FFMpeg is only seeing the filename up to the first space. I've included both the script and output below.</p>
  
  <p>Thanks for any help and suggestions you may have.  If you think I should be doing this in another way, please by all means, give me your suggestions.  As I said, it's been a long time since I did anything like this.  I'm enjoying it though.</p>
  
  <p>I've include the code first followed by example output.</p>
  
  <pre><code>for file in ./TBC/*.mp4
      do
  
      echo "Start of iteration"
      echo "Full text of file name:" $file
  
      #Remove everything up to  "C/" (filename without path)
      fn_orig=${file#*C/}
      echo "Original file name:" $fn_orig
  
      #Length of file name
      fn_len=${#fn_orig}
      echo "Filename Length:" $fn_len
  
      #file name without path or extension
      fn_base=${fn_orig:0:$fn_len-4}
      echo "Base file name:" $fn_base
  
      #new filename suffix
      newsuffix=".conv.mp4"
  
      fn_out=./CONV/$fn_base$newsuffix
      echo "Converted file name:" $fn_out
  
      ffmpeg -i $file -metadata title="$fn_orig" -c:v libx264 -c:a libfdk_aac -b:a 128k $fn_out
  
      echo "End of iteration"
      echo
      done
  echo "Script completed"
  </code></pre>
  
  <p>With the ffmpeg line commented out, and two files in the ./TBC directory, this is the output that I get</p>
  
  <pre><code>    Start of iteration
      Full text of file name: ./TBC/Test file with spaces.mp4
      Original filename: Test file with spaces.mp4
      Filename Length: 25
      Base filename: Test file with spaces
      Converted file name: ./CONV/Test file with spaces.conv.mp4
      End of iteration
  
      Start of iteration
      Full text of file name: ./TBC/Test_file_with_NO_spaces.mp4
      Original file name: Test_file_with_NO_spaces.mp4
      Filename Length: 28
      Base file name: Test_file_with_NO_spaces
      Converted file name: ./CONV/Test_file_with_NO_spaces.conv.mp4
      End of iteration
  
      Script completed
  </code></pre>
  
  <p>I won't bother to post the results when ffmpeg is uncommented, other than to state that it fails with the error:
      ./TBC/Test: No such file or directory</p>
  
  <p>The script then continues to the next file which completes successfully because it has no spaces in its name. The actual filename is "Test file with spaces.mp4" so you can see that ffmpeg stops after the word "Test" when it encounters a space.</p>
  
  <p>I hope this has been clear and concise and hopefully someone will be able to point me in the right direction. There is a lot more that I want to do with this script such as parsing subdirectories and ignoring non-video files, etc.  </p>
  
  <p>I look forward to any insight you can give!</p>