Site Tools


linux:scripts:audiostreamconvert

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
linux:scripts:audiostreamconvert [2023/05/28 23:10] lunetikklinux:scripts:audiostreamconvert [2023/06/05 22:49] (current) lunetikk
Line 1: Line 1:
 ====== Convert .mkv Audio ====== ====== Convert .mkv Audio ======
  
-Currently this script will convert any audiostream of a .mkv file to EAC3 764k with the same channels (via ffmpeg), then remux these audiostreams to a new .mkv (via mkvmerge)+Currently this script will convert any audiostream of a .mkv file to EAC3 768k with the same channels (via ffmpeg), then remux these audiostreams to a new .mkv (via mkvmerge)
  
 ===== Prerequisites ===== ===== Prerequisites =====
  
-mkvtoolnix - Matroska tools+mkvtoolnix - Matroska tools\\
 ffmpeg - Audio conversion tool ffmpeg - Audio conversion tool
  
Line 27: Line 27:
  
 # Set new bitrate\\ # Set new bitrate\\
-newbitrate="768k"\\+new_bitrate="768k"\\
  
 If you run the script, it will convert all files inside the "input_dir", the output file will have all audio streams converted to the set "new_codec" and "new_bitrate" but with the same channels as before. If the original audio stream had 7.1 channels it will be set to 5.1 because ffmpeg EAC3 only supports up to 5.1. If you run the script, it will convert all files inside the "input_dir", the output file will have all audio streams converted to the set "new_codec" and "new_bitrate" but with the same channels as before. If the original audio stream had 7.1 channels it will be set to 5.1 because ffmpeg EAC3 only supports up to 5.1.
Line 33: Line 33:
 ===== Code ===== ===== Code =====
  
-<code - shellscript>+<code bash convert.sh>
 #!/bin/bash #!/bin/bash
  
 # Comment in to see debug messages # Comment in to see debug messages
-set -x+#set -x
  
 # Directory containing the video files # Directory containing the video files
Line 76: Line 76:
     temp_files=()     temp_files=()
  
-    # Create an array to store the audio stream options for mkvmerge +    # Create an array to store the languages for mkvpropedit
-    audio_options=() +
     languages=()     languages=()
  
Line 96: Line 94:
       echo "Language: $language"       echo "Language: $language"
  
-   # If channels equal 8, change it to 6 (7.1 EAC3 is currently not supported by ffmpeg)+      # If channels equal 8, change it to 6 (7.1 EAC3 is currently not supported by ffmpeg)
       if [ "$channels" -eq 8 ]; then       if [ "$channels" -eq 8 ]; then
             channels="6"             channels="6"
       fi       fi
  
-   # If language is not set, dont set any metadata, if it is set then set the correct option+      # If language is not set, dont set any metadata, if it is set then set the correct option
       if [ -z "$language" ]; then       if [ -z "$language" ]; then
         lang1=""         lang1=""
Line 107: Line 105:
       else       else
         lang1="-metadata:s:a:0 language=$language"         lang1="-metadata:s:a:0 language=$language"
- lang2="--edit track:a$index --set language=$language "+        lang2="--edit track:a$index --set language=$language "
       fi       fi
  
Line 113: Line 111:
       temp_eac3_file="$temp_dir/${filename%.*}_stream_$index.eac3"       temp_eac3_file="$temp_dir/${filename%.*}_stream_$index.eac3"
       ffmpeg -i "$file" -map 0:$index $lang1 -c:a $new_codec -b:a $new_bitrate -ac $channels "$temp_eac3_file"       ffmpeg -i "$file" -map 0:$index $lang1 -c:a $new_codec -b:a $new_bitrate -ac $channels "$temp_eac3_file"
 +      
 +      # Construct the temporary EAC3 audio files for mkvmerge
       temp_files+=("$temp_eac3_file")       temp_files+=("$temp_eac3_file")
- 
-      # Construct the audio stream option for mkvmerge 
-      audio_options+=("$temp_eac3_file") 
        
-   # Construct the audio stream language for mkvmerge+      # Construct the audio stream language for mkvmerge
       languages+=("$lang2")       languages+=("$lang2")
     done     done
Line 131: Line 128:
     mkvmerge -o "$output_filename" -A "$file" "${temp_files[@]}"     mkvmerge -o "$output_filename" -A "$file" "${temp_files[@]}"
   
- # Set language metadata for the new audio streams using mkvpropedit +    # Set language metadata for the new audio streams using mkvpropedit 
- mkvpropedit "$output_filename"${temp_files[@]}+    mkvpropedit "$output_filename" ${languages[@]}
  
     echo "Conversion complete for file: $filename"     echo "Conversion complete for file: $filename"
     echo "----------------------------------"     echo "----------------------------------"
 +    
 +    # Clean up temporary directory files
 +    rm $temp_dir/*
 +
   fi   fi
 done done
linux/scripts/audiostreamconvert.1685308259.txt.gz · Last modified: 2023/05/28 23:10 by lunetikk