On Wed, Feb 7, 2018 at 9:24 PM, Steve Boyer <[email protected]> wrote:
> > On Feb 7, 2018 6:37 PM, "Shaun Nixon" <[email protected]> wrote: > > i am working on an FFmpeg Bash script in linux. > I am currently using HD Homerun which downloads ,TS files or transport > stream which is a container with an mpeg2 inside with a closed caption > steam for the subtitles. Plex media server will not recognize the closed > caption though VLC will. > > my solution to date is to shrink the .ts file using ffmpeg and then extract > the subtitle using ccextract. > > at present I run a bash script in each folder containing .ts files, but > would like one I can run from the main directory that would look in all sub > directories find .ts files remux them to mp4, extract the closed caption > stream to .srt and then remove the .ts files. > > so far i have the following script. Steven Penny from Stack Exchange > contributed code and i added in the ffmpeg and ccextract lines: > > #! /bin/bash > for x in *.ts > do > y=$(basename "$x" .ts) > ffmpeg -i "$x" -vf scale=-1:720 -c:v libx264 -crf 23 -preset ultrafast > -c:a copy "$y".mp4 > ccextractor "$x" -o "$y".srt > done > > > This works well if I run it in a directory. I would like to add to it > though and maybe have something like a > Find . -name *.ts > statement or some way for it to look in all folders on multimedia hdd for > .ts files and then do the For Loop but am unsure how. > > > Couple of suggestions: > 1) tweak the script so it takes in an argument - the .ts file name that > does the FFmpeg command and other programs. Generalize it. > 2) instead of doing a for loop, do a "find . -iname '*.ts' -type f > -execdir scriptname {} \+" > > This will find all filenames that end (case insensitive) with .ts, and > execute your script on it. > > > I also want to add something like > rm /s *.ts > but am unsure if this will work or where to add it after the For Loop. > Would it need a [wait] statement after [done] on the last line. > > > Another suggestion I've used in the past is FFmpeg returns 0 if > successfully. In the script, have the if statement it checks be the FFmpeg > command. If no problem, it returns 0 (if I recall correctly). Check this > value and delete if you want. Give me a bit and I have an automatic DVD > creation script I can copy and paste a section from. > NOTE: I'VE NOT EXECUTED THESE TONIGHT - MIGHT NOT WORK OR MIGHT NEED A FEW TWEAKS script.sh: if [ ! -e lock ]; then touch lock; if ffmpeg -y -i "$1" <options here> $(basename "$i" .ts) "$i.mp4"; then rm "$1"; fi Not at that box ATM (pulled script from my github repo), but should be able to be invoked via find <directory> -iname '*.ts' -type f -execdir /path/to/script.sh "{}" \; I actually have that running as a crobjob that is ran every second. And the "find" command actually ends in \+ for my use, which is really the wrong way to do a find -execdir. Is it glamorous? no. Is there better way to write it? yes. Have I taken the time to figure out if I can just use the \; instead of \+? Nope - it is working, I ain't fixing it. Steve > any advice on writing a bash script that would search for .ts files, > convert them to mp4, and then remove the .ts files would be greatly > appreciated. > > -shaun > > > Steve > > _______________________________________________ > ffmpeg-user mailing list > [email protected] > http://ffmpeg.org/mailman/listinfo/ffmpeg-user > > To unsubscribe, visit link above, or email > [email protected] with subject "unsubscribe". > > > _______________________________________________ ffmpeg-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-user To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
