Created
December 13, 2021 06:13
-
-
Save lucis/490df1ed72bc15797e36c2e9f5a45a92 to your computer and use it in GitHub Desktop.
Merge MP4 files with alphabetically sort
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/zsh | |
## Script to merge all mp4 videos in current directory (recursively 2 levels) | |
## And update chapter marks to retain the folder/filename | |
## Script for merging videos | |
filename=`basename pwd` | |
current=`pwd` | |
bname=`basename "$current"` | |
find . -maxdepth 2 -iname '*.mp4' | xargs -L 1 echo | sort -t '\0' -n | awk '{printf "file \x27%s\x27\n", $0}' >> list.txt | |
find . -maxdepth 2 -iname '*.mp4' | xargs -L 1 echo | sort -t '\0' -n | awk '{print $0}' >> files.txt | |
echo -n "Merging the files" | |
ffmpeg -f concat -safe 0 -i list.txt -c copy "$bname.mp4" -v quiet | |
echo "..........[ DONE ]" | |
## extract meta | |
# ffmpeg -i all.mp4 -f ffmetadata metafile | |
metafile="metadata.txt" | |
echo -n "Extracting meta data" | |
ffmpeg -i "$bname.mp4" -f ffmetadata $metafile -v quiet | |
echo "..........[ DONE ]" | |
## chapter marks | |
#TODO: (‘=’, ‘;’, ‘#’, ‘\’) to be escaped | |
ts=0 | |
echo -n "Identifying chapters" | |
cat files.txt | while read file | |
do | |
ds=`ffprobe -v quiet -of csv=p=0 -show_entries format=duration "$file"` | |
# echo "$ds" | |
echo "[CHAPTER]" >> $metafile | |
echo "TIMEBASE=1/1" >> $metafile | |
echo "START=$ts" >> $metafile | |
ts=`echo $ts + $ds | bc` | |
echo "END=$ts" >> $metafile | |
echo "TITLE=$file" >> $metafile | |
done | |
echo "..........[ DONE ]" | |
## update meta with chaptermarks | |
echo -n "Adding chapter meta " | |
ffmpeg -i "$bname.mp4" -i $metafile -map_metadata 1 -codec copy "$bname-meta.mp4" -v quiet | |
echo "..........[ DONE ]" | |
## cleanup | |
echo -n "Cleaning up" | |
rm files.txt list.txt $metafile | |
echo "..........[ DONE ]" | |
echo "Job Completed." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment