From d96d4373f4b8edec71bf69fd55eeced45a099aa8 Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Fri, 15 Dec 2023 14:10:37 +0100 Subject: [PATCH] Introduce adding the original audio to the pipeline, as well as intro/outro --- demux.sh | 9 +++++++++ generate.sh | 39 +++++++++++---------------------------- merge.sh | 44 ++++++++++++++++++++++++++++++++++++++++++++ split.sh | 9 +++++++++ 4 files changed, 73 insertions(+), 28 deletions(-) create mode 100644 demux.sh create mode 100755 merge.sh create mode 100644 split.sh diff --git a/demux.sh b/demux.sh new file mode 100644 index 0000000..c268cbf --- /dev/null +++ b/demux.sh @@ -0,0 +1,9 @@ +echo "generating the demuxers..." + +# generuje ścieżki do złożenia przez ffmpega: +ts-node generate-demuxer.ts >out/demuxer.txt + +# używa demuxer.txt żeby skleić końcowe video z dźwiękiem: +echo generowanie całości +ffmpeg -y -f concat -safe 0 -i out/demuxer.txt -r $framerate -video_track_timescale $timescale -tune stillimage -pix_fmt yuv420p out/video.mp4 +# ^ daję safe 0 aby przyjmowało bezwzględne ścieżki diff --git a/generate.sh b/generate.sh index 0d09938..2e21354 100755 --- a/generate.sh +++ b/generate.sh @@ -6,34 +6,17 @@ # W katalogu z tym skryptem musisz mieć katalog "pics", w którym są pliki "left.png", "right.png", "none.png" i "both.png" # -input=/home/kuba/Downloads/odc36trim.mp3 # tutaj dajemy ścieżkę do pliku mp3 z Arkiem w jednym kanale i Kubą w drugim -framerate=25 -timescale=25000 - -aresample=8000 # to bez zmian - -echo dzielimy mp3 na dwa osobne wav -ffmpeg -i $input -map_channel 0.0.0 /tmp/left.wav -map_channel 0.0.1 /tmp/right.wav - -echo na dwóch wątkach generujemy surowe pliki -ffmpeg -i /tmp/left.wav -ac 1 -filter:a aresample=$aresample -map 0:a -c:a pcm_u8 -f data - > /tmp/leftraw & -ffmpeg -i /tmp/right.wav -ac 1 -filter:a aresample=$aresample -map 0:a -c:a pcm_u8 -f data - > /tmp/rightraw & - -# czekamy aż obydwa wątki się zakończą -wait; - -echo "generating the demuxers..."; - -# generuje ścieżki do złożenia przez ffmpega: -ts-node generate-demuxer.ts > out/demuxer.txt +export input=~/Downloads/icdw3/stereo-processed.wav # tutaj dajemy ścieżkę do pliku mp3 z Arkiem w jednym kanale i Kubą w drugim +export input_mono=~/Downloads/icdw3/mono-processed.wav # tutaj dajemy ścieżkę do pliku mp3 z Arkiem w jednym kanale i Kubą w drugim +export intro=~/projects/midline/podcast-visualizer/out/intro.mp4 # glitch +export outro=~/projects/midline/podcast-visualizer/out/intro.mp4 # to samo na końcu, co na początku +export final_output=~/Downloads/icdw3-viz.mp4 +export framerate=25 +export timescale=25000 +aresample=8000 # to bez zmian mkdir -p out -# używa demuxer.txt żeby skleić końcowe video z dźwiękiem: -echo generowanie całości -ffmpeg -y -f concat -safe 0 -i out/demuxer.txt -r $framerate -video_track_timescale $timescale -tune stillimage -vsync vfr -pix_fmt yuv420p out/video.mp4 -# ^ daję safe 0 aby przyjmowało bezwzględne ścieżki - - -echo łączenie video z dźwiękiem: -ffmpeg -i out/video.mp4 -i $input -ac 1 -video_track_timescale $timescale -tune stillimage out/video-and-audio.mp4 +source ./split.sh +source ./demux.sh +source ./merge.sh diff --git a/merge.sh b/merge.sh new file mode 100755 index 0000000..9cec0fc --- /dev/null +++ b/merge.sh @@ -0,0 +1,44 @@ +processed_intro_path=$PWD/out/intro-processed.mp4 +processed_outro_path=$PWD/out/outro-processed.mp4 + +echo łączenie video z dźwiękiem: +ffmpeg -vaapi_device /dev/dri/renderD128 \ + -i out/video.mp4 -i $input_mono \ + -video_track_timescale $timescale \ + -tune stillimage \ + -c:a aac \ + -ac 1 \ + -strict experimental \ + -vf 'format=nv12,hwupload' \ + -c:v h264_vaapi \ + out/video-and-audio.mp4 + +echo reencoding intro to enable fast concat... + +function reencode_for_demux_compatibility() { + ffmpeg -i "$1" \ + -pix_fmt yuv420p \ + -r $framerate \ + -video_track_timescale $timescale \ + -ac 1 \ + -b:a 320k \ + "$2" + +} + +reencode_for_demux_compatibility "$intro" "$processed_intro_path" + +if [ "$intro" = "$outro" ]; then + processed_outro_path="$processed_intro_path" +else + reencode_for_demux_compatibility "$outro" "$processed_outro_path" +fi + +echo "" >out/demuxer-branding.txt +echo "file $processed_intro_path" >>out/demuxer-branding.txt +echo "file video-and-audio.mp4" >>out/demuxer-branding.txt +echo "file $processed_outro_path" >>out/demuxer-branding.txt + +cat out/demuxer-branding.txt + +ffmpeg -f concat -safe 0 -i out/demuxer-branding.txt -c:v copy -b:a 320k "$final_output" diff --git a/split.sh b/split.sh new file mode 100644 index 0000000..c2d8c9f --- /dev/null +++ b/split.sh @@ -0,0 +1,9 @@ +echo dzielimy mp3 na dwa osobne wav +ffmpeg -i $input -map_channel 0.0.0 /tmp/left.wav -map_channel 0.0.1 /tmp/right.wav + +echo na dwóch wątkach generujemy surowe pliki +ffmpeg -i /tmp/left.wav -ac 1 -filter:a aresample=$aresample -map 0:a -c:a pcm_u8 -f data - >/tmp/leftraw & +ffmpeg -i /tmp/right.wav -ac 1 -filter:a aresample=$aresample -map 0:a -c:a pcm_u8 -f data - >/tmp/rightraw & + +# czekamy aż obydwa wątki się zakończą +wait