Konverter mediefiler med ffmpeg

frogmaster
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Konverter mediefiler med ffmpeg

Konverter mediefiler med ffmpeg

HandBrake er fyldt med GUI funktioner til konvertering af medie filer, der er noget nemmere at overskue end ffmpeg, i hvertfald for folk der ikke er vant til terminalen, men HandBrake kan ikke merge filer, og den er betydelig langsommere end ffmpeg til at konvertere.

Har du mod på at prøve ffmpeg, så er der et par eksempler her. Har du en mappe med mange fx mkv filer, ønsker at konvertere dem til fx mp4, og ønsker at beholde fil navnene. Kommandoerne skal køres i terminalen fra den mappe der indeholder filerne:

# No recode:
for f in *.mkv;do ffmpeg -i "$f" -c copy -strict -2  "${f%mkv}mp4";done

Flaget -strict -2 er eksperimentel, men virker formentlig. Hvis filerne du ønsker at konvertere er i et andet format el. container, eller du ønsker at konvertere filerne til noget andet end mp4, så ændr det i koden.

# With recode:
for f in *.mkv;do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%mkv}mp4";done

Ønsker du noget andet end 'aac' (Advanced Audio Coding), så prøv dig frem.

Hvis du vil samle filerne til en:

# Create a list file (needed):
ls > list.txt

# Insert single quotes sign before and after the segment names in all the lines (this may not be needed, if no path is involved):
sed -i~ -e "s/^/'/;s/$/'/" list.txt

# Insert the word "file" (followed by a "space") as the first word in every line (needed):
sed -i -e 's_.*_file &_' list.txt

# Merge all segments into one movie using ffmpeg:
ffmpeg -safe 0 -f concat -i list.txt -vcodec copy -acodec copy merged-movie.mp4


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Er der tab i framerate,

Er der tab i framerate, billedformat og kvalitet ved brug af ffmpeg i forhold til HandBrake? En af grundene til, at HandBrake tager så lang tid er fordi den encoder høj kvalitet. Og det bruger meget CPU.

Jeg tænker særligt på konvertering og encoding af af MakeMKV rippede bluray-film


marlar
Antal: 3159
Tilmeldt:
05-12-2009
User is offline
Handbrake bruger ffmpeg

Handbrake bruger ffmpeg internt. så kvalitetsmæssigt er der nok ingen forskel. Men Handbrake er nemmere at bruge da den har en fin GUI.

Dette er mit eget script, ts2mp4, jeg bruger til at konvertere TS-filer optaget med fx TV4ever.

#!/bin/bash
for f in $*
do
  filename=$(basename "$f")
  extension="${filename##*.}"
  basename="${filename%.*}"
  ffmpeg -i $filename -acodec copy -vcodec copy -bsf:a aac_adtstoasc $basename.mp4
  touch -r $filename $basename.mp4
done

touch-kommandoen gør at mp4-filerne får samme tidsstempel som originalerne.

Det bruges sådan: ts2mpg *.ts. Eller ts2mp4 minvideo.ts osv.

På trods af navnet er det nu ligeglad med kildeformatet. Det konverterer lige så fint fx avi til mp4.


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Er der tab i framerate,

#1: Er der tab i framerate, billedformat og kvalitet ved brug af ffmpeg i forhold til HandBrake?
Nej, ikke til det brug jeg benytter ffmpeg til. Fil størrelserne i de konverterede filer, er omtrent det samme som originalerne, hvilket kræver nogen forståelse fra HandBrake's faneblade.

Vil jeg for alvor ændre på noget i en medie fil, så benytter jeg HandBrake, mest fordi jeg ikke er medie freek.

Det er (rettelse - #2) ikke korrekt at HandBrake bruger FFmpeg, og bemærk at FFmpeg ikke bliver installeret fordi HandBrake er. Det er en forskel fra Youtube-DL og Youtube-GUI. FFmpeg skal muligvis installeres, hvis ikke det er præinstalleret i OS. Forskellen er dog at Youtube-DL ikke virker uden fx FFmpeg er eksplicit installeret. Det skyldes Youtube-DL bruger FFmpeg.

Edit - rettelse: Det ser ikke ud til at HandBrake bruger FFmpeg, eller de to programmer har noget med hinanden at gøre. Det er beskrevet i #15


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Jeg har lige forsøgt at

Jeg har lige forsøgt at konvertere en bluray- 1920x1080p-mkv-fil til 1920x1080p-mp4-fil. Der valgte jeg Super HQ Surround 1080p, det tager 10 timer på min i7, 4 kerner 2.8 GHZ.

Ved Very Fast 1080p bliver kvaliteten sænket til det uacceptable med tab af framerate. Ubuntu 20.04.


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
det tager 10 timer på

#4: det tager 10 timer på min i7, 4 kerner 2.8 GHZ.
LOL, Ja det kan tage timer. Brugte du HandBrake?


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Ja. Og afbrød igen. Det var

Ja. Og afbrød igen. Det var her til aften. :-D


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Ja. Og afbrød igen. Det

#6: Ja. Og afbrød igen. Det var her til aften. :-D
Prøv med ffmpeg. Bemærk forskelle i ffmpeg's flags i #0 og #2. De giver ikke altid samme resultat.


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Der reddede du lige min

Der reddede du lige min bluray-samling, min aften og mit humør! Hold kæft, hvor er det her fedt, mand! 10 timer, vs. 5 minutter. Det kan intet konkurrere med.


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
#5 Det er ret fedt ;)

#5

Det er ret fedt ;)


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Utroligt, at der kan være

Utroligt, at der kan være så astronomisk forskel. Men det kan der altså. Ingen tab af kvalitet, 5. min. Så spiller det.


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Utroligt, at der kan

#10: Utroligt, at der kan være så astronomisk forskel.
Teknisk kender jeg ikke årsagen, jeg kan kun gætte, fordi jeg ikke ved nok.

For hvad det er værd ...

Nyere versioner af ffmpeg,

Rå funktion i terminalen, der ikke involvere GUI programmers brugervenlighed eller DE ressourcer, der måske ikke er optimalt vedligeholdt.


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Mit gæt:Dimensions, crop,

Mit gæt:

Dimensions, crop, og alt det gejl HandBrake presets laver. Her får man rå skønhed, som en slank 25 årig jomfru med lyst hår, når man lader ffmpeg bearbejde den pure data, lade det slå en kolbøtte og folde det ud som en lilje, uden bloat og filtre.


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Dette script konvertere

Dette script konvertere medie filer i forskellige formater til mp4, og kopiere dem til en separat mappe. Scriptet er en one-liner, og skal blot kopieres til den mappe mediefilerne befinder sig i.

Scriptet lader ikke ffmpeg recode filerne, og det er forklaringen på at det går så hurtigt (muxer).

#!/bin/bash

# Converts media files to a separate folder called 'converted'
# Copy this script to the directory containing the media files and run it

# If you run the script on macOS and intend to watch the media files with QuickTime, you probably need to recode the files and you'll need to install ffmpeg. Some formats such as 'webm' may need more thorough (and slow) encoding.

# To install ffmpeg on macOS you may find it easiest through Homebrew (Note: Not older macOS no longer supported by Apple), run the command:

# /bin/bash -c "$(curl -fsSL https ://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

# Then run the command: brew install ffmpeg

# function - Wait for Enter to be pressed.
PAUSE1(){
    echo "Do you wish to convert?"
    read -p "Press [Enter] key to continue..." fackEnterKey
}

PAUSE1

# Let the terminal read the path to the directory (Linux only)
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

# Start converting to mp4
# Please, add more formats if needed
mkdir -p "converted"

# No recode
for f in *.mkv;do ffmpeg -i "$f" -c copy -strict -2  "converted/${f%mkv}mp4";done
for f in *.webm;do ffmpeg -i "$f" -c copy -strict -2  "converted/${f%webm}mp4";done
for f in *.ts;do ffmpeg -i "$f" -c copy -strict -2  "converted/${f%ts}mp4";done

# With recode
#for f in *.mkv;do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "converted/${f%mkv}mp4";done
#for f in *.webm;do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "converted/${f%webm}mp4";done
#for f in *.ts;do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "converted/${f%mkv}ts";done

$SHELL


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Hvis du ønsker at

Hvis du ønsker at installere ffmpeg på Windows 10, har du to muligheder fra repositories

Et Windows repos, Chocolatey. FFmpeg køres fra en DOS prompt. Efter installering af Chocolatey er kommandoen:

chocolatey install ffmpeg

WSL - Windows Subsystem for Linux. Efter installering af WSL, afhænger ffmpeg installeringen af hvilken Linux du har valgt.


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
I forbindelse med Handbrake,

I forbindelse med Handbrake, ser det ud til at Handbrake's udviklere ikke har tænkt sig at tilføre Handbrake multiplekser funktion af mediefiler. De begrunder det med at Handbrake er tænkt som en encoder og ikke en muxer.

De siger også at det er for besværligt at ændre Handbrake, også at det ikke handler om kompleksitet, hvad de så mener med det, og iøvrigt at Handbrake ikke er en frontend til ffmpeg.

Sagen er at mange mediefiler (ikke alle), er udmærket coded med x264 m.f., og ikke behøver en total langvarig recode, fx hvis de afspilles med VLC, SMPlayer eller på visse TV. Det kan Handbrake, og mange andre tilsvarende programmer, så ikke levere.

Konsekvensen er derfor at bruge ffmpeg, hvis fuld encoding ikke er nødvendig.


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Problemet med ffmpeg, er, at

Problemet med ffmpeg, er, at det er uden lyd på Samsung Smart TV. Det sker ikke med HandBrake. Der er lyd på.


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
#16I det tilfælde kan

#16
I det tilfælde kan Samsung's medieafspiller, tilsyneladende ikke håndtere audio kodningen fra ffmpeg uden recode af den specifikke fil. Det er muligvis samme problem som sker med Apple's QuickTime.

Der er rettet i kommentaren.
Du kan forsøge om lyden virker med recode fx fra scriptet i #13 (du skal selv (un)comment), eller fra scriptet i #31, der er nemmere at bruge, og du kan forsøge om medie filen fungere på dit TV, forbundet til en computer med et HDMI kabel, hvor det er computeren, og ikke TV, der afspiller filen. VLC burde virke, fra ethvert HW eller VM installeret OS, inklusiv macOS (bortset fra på en VM installeret Mac).

FFmpeg med recode tager længere tid.


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Jeg bruger min gamle Dell

Jeg bruger min gamle Dell Precision T1600. Den blæser min T550 omkuld. Så Handbrake tager ultra kort tid nu på denne Intel Xeon E31245 (8) @ 3.292GHz processor i forhold til den i7 der er i min T550.

Så det ser ikke ud til at ffmpeg er nødvendigt nu. Men det er altid godt at have i baghånden.


marlar
Antal: 3159
Tilmeldt:
05-12-2009
User is offline
Scriptet er en

#18: Scriptet er en one-liner, og skal blot kopieres til den mappe mediefilerne befinder sig i.

En one-liner er det nu ikke. Det er en 38-liner :-)


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
#19;)Det er mest denne

#19
;)

Det er mest denne linje der er en one-liner:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

Dit link i #19 skal da lige bogmærkes


marlar
Antal: 3159
Tilmeldt:
05-12-2009
User is offline
Dit link i #19 skal da

#20: Dit link i #19 skal da lige bogmærkes

Ja, der er mange gode one-liners på siden.


FrugalMan
FrugalMan's picture
Antal: 1465
Tilmeldt:
18-12-2007
User is offline
En one-liner er det nu

#19: En one-liner er det nu ikke. Det er en 38-liner :-)

Bare et fedt site. Det er bokmarket.

"Man kan modstå alt undtagen fristelser" - Oscar Wilde
Frit Software


Heste_HunD
Antal: 2
Tilmeldt:
02-06-2020
User is offline
Mit Samsung Tv, afspiller

#16
Mit Samsung Tv, afspiller mkv filer direkte ud af kassen, så jeg har derfor
ingen grund til at omkode/formatere/ændre dem. Og dog! Jeg kan ikke få
tekst på mine blu ray rips uden at hårdkode dem ind i filmen.

Bemærk: Jeg er en tåbe, men prøver ikke at lede tråden i en anden retning.
Jeg finder blot emnet i tråden interessant.
Jeg har afprøvet alle frogmasters konverterings forslag og de har alle virket
på mit Tv.

Kun havet frygter ikke en tåbe


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Og dog! Jeg kan ikke

#23: Og dog! Jeg kan ikke få tekst på mine blu ray rips uden at hårdkode dem ind i filmen.

Det kan jeg heller ikke på mit Philips TV, med mindre jeg kopiere mediefilen, inklusiv en UTF-8 formateret undertekst, fx en *.srt, til en USB, og forbinder USB direkte til et af fjernsynets USB porte. Det virker uanset om det er en mkv, mp4, mov eller avi. Du skal imidlertid sikre dig, at underteksten har tegnsættet UTF-8, og ikke en eller anden ISO-whatever ... og det er bedst at navnet på undertekst filen, har samme navn som filmen.

En anden metode er at tilslutte en computer til TV med HDMI, og køre filerne (mp4, mkv, mov og avi m.f.), med eksempelvis VLC. Det viser også underteksterne.

Med begge metoder slipper du for at hardcode underteksterne ind i filmen.

Med andre ord, hvis du ændre vaner, så vil samtlige film fremtidigt fungere på TV med eksterne undertekster, uden de først er hårdtkodede ind i filmene.

Alt det her er naturligvis ikke nødvendigt, hvis MKV filen virker med de eventuelt indlejrede/embedded (bemærk, ikke hårdtkodede) undertekster, eller du benytter en metode hvor en ekstern undertekst fungere. Det gør de ikke med en medieserver på lokalnettet.

For intresserede ...

Du kan ekstrahere undertekster fra mkv, hvis de indeholder sådan nogle. Det gør Bluray ofte. Jeg bruger Windows programmet Subtitle Edit (https://www.nikse.dk/subtitleedit/) til det. Subtitle Edit, der iøvrigt er skrevet af en dansker - Nikse, er nemmest at installere på Windows, men kan installeres på Linux og macOS med CrossOver el. Wine. Det er desværre ikke så nemt.

En kort video herunder, viser hvordan man hiver en undertekst ud af en Bluray mkv, der tilfældigvis hedder Extraction.mkv (Official Trailer: https://www.youtube.com/watch?v=L6P3nI6VnlY):

https://www.dropbox.com/s/arnjt8ygea363cx/extract-...


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Det der med at ændre vaner,

Det der med at ændre vaner, er ikke altid så nemt som det måske lyder. Derfor vil jeg godt vise, så kort som muligt, for interesserede, hvad du kan gøre for at undgå at hardcode undertekster ind i film, og alligevel at gøre det hurtigt og nemt at vise film med undertekster på dit TV.

Du skal installere en Remote Desktop server på den maskine der er forbundet til TV med HDMI. Mit fortrukne er RealVNC, fordi det fungere med samtlige launchd (macOS), systemd (Linux) og Windows 10 OS.

TV skal være tilsluttet til computeren med et HDMI kabel el. trådløs HDMI, og du skal vælge HDMI porten i fjernsynets menu. I eksemplet er det en macOS, men kunne også være en systemd kompatibel Linux eller Windows. Resten vises i videoen herunder:

https://www.dropbox.com/s/zvr9s8wr9zguram/realvncl...

Så skal jeg iøvrigt undlade at gentage fra tidligere, at Apple først udviklede launchd, og senere at Linux udviklede systemd, for at erstatte FreeBSD's init og SystemStarter, med noget mere brugervenligt ...


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Så skal jeg iøvrigt

Så skal jeg iøvrigt undlade at gentage fra tidligere, at Apple først udviklede launchd, og senere at Linux udviklede systemd, for at erstatte FreeBSD's init og SystemStarter, med noget mere brugervenligt ...

Med fare for, at gå for offtopic, må jeg lige smide en lille rettelse ind, at det var FreeBSD's RC init i MacOS, der blev erstattet af launchd, og UNIX System V Init, der blev erstattet af systemd i Linux.


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
#26Du har ret i at det er

#26
Du har ret i at det er off-topic ;) Det hører til i en ny tråd.

Sagen er blot at det er overordentligt besværligt at crossplatform administrere maskinerne, iHT hurtig visning af film med eksterne undertekster fra lokalnettet på et TV, uden launchd, systemd eller Windows 10.

Ellers er der stadig metoden med en USB tilsluttet TV. Det virker glimrende med eksterne undertekster. Visse TV registrere selv at en USB er tilsluttet, og tilbyder at vise film på den, uden at enter TV's menu. Det kan ikke blive meget mere brugervenligt.


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Hvis man da ellers har en

Hvis man da ellers har en kraftig desktop maskine stående kan man med fordel bruge Handbrake, og så tilvælge hardcoded undertekster.

Men har man ikke kan det blive noget mere bøvlet, at få undertekster i de forskellige respektive formater. Der er dog løsninger, og du, frogmaster, gør en forbilledlig indsats mht. den problemstilling. :-)


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Handbrake er en super

Handbrake er en super encoder. Jeg bruger den ofte, blot ikke til at hardcode subtitles. Jeg hardcoder aldrig subtitles med noget som helst, fordi det ikke er nødvendigt.

Jeg bruger heller ikke TV's USB porte. Til gengæld en medie server (Twonky), hvis ikke undertekster er nødvendige, og en remote desktop hvis de er.

Har man først vænnet sig til metoderne, så går det hurtigt.


OracleJMT
OracleJMT's picture
Antal: 1152
Tilmeldt:
26-05-2013
User is offline
Evt. kan en NAS - som også

Evt. kan en NAS - som også er en medieserver i hjemmet - løse problemet vha. Plex + NAS.

Det bundsolide FreeBSD-baserede FreeNAS, som kører med ZFS filsystemet, med mulighed for RAID og dynamisk disk-udskiftning på kørende system og meget mere - kan forbinde til Plex via. et plugin, der installeres i et grafisk webinterface, der minder om localhost:631 (CUPS)

Der er selvfølgelig masser af muligheder - endda Raspberry Pi mediaserver og meget meget mere. En stor verden af Open source for dine fødder.


frogmaster
frogmaster's picture
Antal: 4794
Tilmeldt:
20-05-2010
User is offline
Dette bash er en menu, der

Dette bash er en menu, der blot skal kopieres til mappen der indeholder medie filer du ønsker at konvertere til MP4 med FFmpeg. Du får valgene mellem med og uden recode uden at gøre yderligere.

Beklager lidt Disclaimer, men jeg kan ikke fordrage licens-trippere ...

#!/bin/bash

# Disclaimer:

# This script is published under the Copyweird NFL license (No Freaking License) version 0.0 or newer.
# By using this script, you acknowledges you are obligated to obey NFL and thereby committing to the terms of NFL.  
# Any usage of this script is your responsibility and yours alone. No one but you, as the user of this script, can be held responsible for any damage this script might cause unconsciously or deliberately.
# Copyweird infringement and complaints about the conditions, will be met with the optional legal requirement that you flush your head in the lavatory bowl.

# This script use 'FFmpeg' to convert media files and has absolutely nothing to do with the NFL license. FFmpeg is licensed under GNU Lesser General Public License (LGPL) version 2.1 or later. However, FFmpeg incorporates several optional parts and optimizations that are covered by the GNU General Public License (GPL) version 2 or later.

# IMPORTANT. This script need to be copied to the folder containing the media files you wish to convert.

# Define variables
PURPLE='\033[35;1m'
RED='\033[0;41;37m'  # White font - red background
RED1='\033[31;1m'
RED2='\033[31;5;1m'  # flashing red font (ubuntu 18.04 only)
RED3='\033[31m'
STD='\033[0;0;39m'
YEL='\033[33;1m'
WFBG='\033[40;37;1m' # bold font - black background, using 256 color background sequence
BFBG='\033[104;30m'  # dark blue font - light blue background
GREEN='\033[32;1m'
CYAN='\033[36;1m'

PROGRAM_1="ffmpeg"   # System name
PROG_1="FFmpeg"      # User friendly name

# Check for preconditions
if ! [ -x "$(command -v $PROGRAM_1 )" ]; then
    echo -e $RED"$PROG_1 is not installed but needed to convert."$STD
    echo
    echo -e $YEL"This script is created for Debian-Ubuntu and derivats only"$STD
    echo -e $GREEN"On such ${PROG_1} will be automatically installed if you continue ..."$STD
    echo -e $RED1"On all other Linux, you'll need to install ${PROG_1}according to the respective Packet Managers"$STD
    sudo apt-get update && sudo apt-get install $PROGRAM_1
else
    echo
    echo -e ${GREEN}"$PROG_1 is installed."$STD
    echo
fi

# Let the terminal read the path to the directory (Linux only)
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

# Function
PAUSE(){
  read -p "  Press [Enter] key to continue..." fackEnterKey
}

# call item 1
one(){
echo "one() called"
        PAUSE
}

# call item 2
two(){
echo "two() called"
        PAUSE
}

# function to display menu
show_menus() {
clear
    echo
    echo -e "  ${WFBG}                                     "${STD}
echo -e "  ${WFBG}     C O N V E R T  2  M P 4         "${STD}
    echo -e "  ${WFBG} ${CYAN}                                    "${STD}
echo -e "  ${WFBG} ${CYAN} 1. No recode            (Fast)     "${STD}
echo -e "  ${WFBG} ${CYAN} 2. Recode media files   (Slow)     "${STD}
    echo -e "  ${WFBG} ${RED2}                                    "${STD} && sleep 1
echo -e "  ${WFBG} ${RED2} q. Quit menu                       "${STD}
    echo -e "  ${WFBG} ${RED2}                                    "${STD}
    echo -e  ${STD}
}

# read input from the keyboard and take an action
read_options(){
echo -e  ${RED1}"  IMPORTANT${YEL} This scipt need to be copied to the folder who"${STD}
echo -e  ${YEL}"  contain the media files you wish to convert to MP4."${STD}
echo -e  ${RED1}"  If you haven't done that, please Quit and correct ..."${STD}
echo
local choice
    tput setaf 2
    tput bold
    read -p "  Select option and press Enter [1 - q] "  choice
    tput sgr0
case $choice in
1) # No recode
           echo -e ${YEL}"  You have selected the fast option with no recode."${STD}
           echo -e ${PURPLE}"  A folder ${GREEN}converted-no-recode${PURPLE} will be created within this folder containing the converted files"${STD}
           # Wait for Enter to be pressed.
           PAUSE
           # Start converting to mp4
           # Please, add more formats below if needed
           mkdir -p "converted-no-recode"
               for f in *.mkv;do ffmpeg -i "$f" -c copy -strict -2  "converted-no-recode/${f%mkv}mp4";done
               for f in *.webm;do ffmpeg -i "$f" -c copy -strict -2  "converted-no-recode/${f%webm}mp4";done
               for f in *.ts;do ffmpeg -i "$f" -c copy -strict -2  "converted-no-recode/${f%ts}mp4";done
               for f in *.mp4;do ffmpeg -i "$f" -c copy -strict -2  "converted-no-recode/${f%mp4}mp4";done ;;
2) # With recode
           echo -e ${YEL}"  You have selected the slow option with recode."
           echo -e ${YEL}"  It might take hours with very large files."${STD}
           echo -e ${PURPLE}"  A folder ${GREEN}converted-recoded${PURPLE} will be created within this folder containing the converted files"${STD}
           # Wait for Enter to be pressed.
           PAUSE
           # Start converting to mp4
           # Please, add more formats below if needed
           mkdir -p "converted-recoded"
               for f in *.mkv;do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "converted-recoded/${f%mkv}mp4";done
               for f in *.webm;do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "converted-recoded/${f%webm}mp4";done
               for f in *.ts;do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "converted-recoded/${f%mkv}ts";done
               for f in *.mp4;do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "converted-recoded/${f%mp4}mp4";done ;;
q) exit 0;;
*) echo -e "${RED}  Please select a valid menu item...${STD}" && sleep 2
esac
}

# Trap CTRL+C, CTRL+Z and quit singles - Note: Not in usage
trap '' SIGINT SIGQUIT SIGTSTP

# Infinite menu loop
while true
do
show_menus
read_options
done