From 26b0b48de5507d8642ac965d72af22beeae53b6a Mon Sep 17 00:00:00 2001 From: Boris Paing Date: Tue, 14 Apr 2020 11:22:08 +0200 Subject: [PATCH] first commit --- .gitignore | 1 + README.md | 3 +++ reunite.sh | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ shard.sh | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100755 reunite.sh create mode 100755 shard.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e107f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +examples diff --git a/README.md b/README.md new file mode 100644 index 0000000..d4b92fc --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Video sharding + +An attemp at something weird... diff --git a/reunite.sh b/reunite.sh new file mode 100755 index 0000000..0184c3f --- /dev/null +++ b/reunite.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# usage : +# ./reunite.sh video-name.part1.mp4 + +filename=$(basename -- "$1") +extension="${filename##*.}" +filename=$(echo "${filename%.*}" | sed -r 's/(.+)\.part[0-4]{1}$/\1/g') + +# Extract audio track from one of the parts + +ffmpeg -i $1 -acodec copy $filename.aac + +# Let's use more explicit names for manipulation + +mv $filename.part1.$extension even_odd.mp4 +mv $filename.part2.$extension even_even.mp4 +mv $filename.part3.$extension odd_odd.mp4 +mv $filename.part4.$extension odd_even.mp4 + +# Rotate the 4 sub-videos clockwise in order to merge them + +ffmpeg -i even_odd.mp4 -vf "transpose=1" even_90cw_odd.mp4 +ffmpeg -i even_even.mp4 -vf "transpose=1" even_90cw_even.mp4 + +ffmpeg -i odd_odd.mp4 -vf "transpose=1" odd_90cw_odd.mp4 +ffmpeg -i odd_even.mp4 -vf "transpose=1" odd_90cw_even.mp4 + + +# Merge the 4 sub-videos into 2 + +ffmpeg -i even_90cw_odd.mp4 -i even_90cw_even.mp4 -filter_complex "[0][1]vstack,il=l=i:c=i" even_90cw.mp4 +ffmpeg -i odd_90cw_odd.mp4 -i odd_90cw_even.mp4 -filter_complex "[0][1]vstack,il=l=i:c=i" odd_90cw.mp4 + +# Rotate the 2 videos back counter-clockwise + +ffmpeg -i odd_90cw.mp4 -vf "transpose=2" odd.mp4 +ffmpeg -i even_90cw.mp4 -vf "transpose=2" even.mp4 + +# Merge the 2 videos + +ffmpeg -i odd.mp4 -i even.mp4 -filter_complex "[0][1]vstack,il=l=i:c=i" $filename.merged_no_sound.mp4 + +# Merge video with audio track + +ffmpeg -i $filename.aac -i $filename.merged_no_sound.mp4 $filename.merged.mp4 + +# Remove manipulation files + +rm even_odd.mp4 even_even.mp4 odd_odd.mp4 odd_even.mp4 even_90cw_odd.mp4 even_90cw_even.mp4 odd_90cw_odd.mp4 odd_90cw_even.mp4 even_90cw.mp4 odd_90cw.mp4 odd.mp4 even.mp4 $filename.merged_no_sound.mp4 $filename.aac + + diff --git a/shard.sh b/shard.sh new file mode 100755 index 0000000..c275757 --- /dev/null +++ b/shard.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# See : +# https://stackoverflow.com/questions/49955100/how-do-i-split-a-video-to-2-separate-files-for-odd-and-even-fields-using-ffmpeg +# Et : +# https://korben.info/ffmpeg-pour-les-nuls.html + + +# Split the 1 video in 2 + +ffmpeg -i $1 -filter_complex "[0]il=l=d:c=d,split[o][e];[o]crop=iw:ih/2:0:0[odd];[e]crop=iw:ih/2:0:ih/2[even]" -map "[odd]" odd.mp4 -map "[even]" even.mp4 + + +# Rotate the 2 videos clockwise + +ffmpeg -i odd.mp4 -vf "transpose=1" odd_90cw.mp4 +ffmpeg -i even.mp4 -vf "transpose=1" even_90cw.mp4 + + +# Split each of the 2 videos in 2 +# We now have 4 videos + +ffmpeg -i odd_90cw.mp4 -filter_complex "[0]il=l=d:c=d,split[o][e];[o]crop=iw:ih/2:0:0[odd];[e]crop=iw:ih/2:0:ih/2[even]" -map "[odd]" odd_90cw_odd.mp4 -map "[even]" odd_90cw_even.mp4 +ffmpeg -i even_90cw.mp4 -filter_complex "[0]il=l=d:c=d,split[o][e];[o]crop=iw:ih/2:0:0[odd];[e]crop=iw:ih/2:0:ih/2[even]" -map "[odd]" even_90cw_odd.mp4 -map "[even]" even_90cw_even.mp4 + +# Rotate these 4 video back to normal (counter-clockwise) + +ffmpeg -i even_90cw_odd.mp4 -vf "transpose=2" even_odd.mp4 +ffmpeg -i even_90cw_even.mp4 -vf "transpose=2" even_even.mp4 +ffmpeg -i odd_90cw_odd.mp4 -vf "transpose=2" odd_odd.mp4 +ffmpeg -i odd_90cw_even.mp4 -vf "transpose=2" odd_even.mp4 + +# Get filename + +filename=$(basename -- "$1") +extension="${filename##*.}" +filename="${filename%.*}" + +# Extract audio from original file + +ffmpeg -i $1 -acodec copy $filename.aac + +# Merge audio track into each one of the 4 videos + +ffmpeg -i $filename.aac -i even_odd.mp4 $filename.part1.$extension +ffmpeg -i $filename.aac -i even_even.mp4 $filename.part2.$extension +ffmpeg -i $filename.aac -i odd_odd.mp4 $filename.part3.$extension +ffmpeg -i $filename.aac -i odd_even.mp4 $filename.part4.$extension + +# Remove useless files + +rm odd.mp4 even.mp4 odd_90cw.mp4 even_90cw.mp4 even_90cw_odd.mp4 even_90cw_even.mp4 odd_90cw_odd.mp4 odd_90cw_even.mp4 even_odd.mp4 even_even.mp4 odd_odd.mp4 odd_even.mp4 $filename.aac +