Add images_to_video

This commit is contained in:
augustin64 2024-02-23 18:11:55 +01:00
parent 2301af6e2d
commit 8adea8f37d
5 changed files with 65 additions and 23 deletions

2
requirements.txt Normal file
View File

@ -0,0 +1,2 @@
ffmpeg-python
music21

22
src/images_to_video.md Normal file
View File

@ -0,0 +1,22 @@
Write a timestamp file like this
```concat.txt
ffconcat version 1.0
file 0.png
duration 97
file 97.png
duration 81
file 178.png
duration 64
file 242.png
duration 54
file 296.png
duration 67
file 363.png
```
where duration is in seconds
```bash
ffmpeg -f concat -i concat.txt -vf "fps=25,format=yuv420p" -vsync vfr output.webm
```

19
src/images_to_video.sh Normal file
View File

@ -0,0 +1,19 @@
#!/bin/bash
IN=$1
[[ $IN ]]|| IN="concat.txt"
FILES=$(cat $IN | grep file | awk '{print $2}')
echo $FILES
# Get the larger width and height of all the images
WIDTH=$(identify -format "%w\n" $FILES | sort -nr | head -1)
HEIGHT=$(identify -format "%h\n" $FILES | sort -nr | head -1)
echo $WIDTH x $HEIGHT
# Center all the images and pad them to the larger width and height
# Set the border color to the dominant color of the image
for f in $FILES; do
convert $f -gravity center -background none -extent ${WIDTH}x${HEIGHT} -bordercolor $(convert $f -format "%[pixel:p{0,0}]" info:) -border 0x0 $f
done

View File

@ -5,7 +5,7 @@ import os
MSCORE="mscore" MSCORE="mscore"
REMOVE_MID_FILES=False REMOVE_MID_FILES=True
def get_elements(stream, classe): def get_elements(stream, classe):
@ -79,19 +79,26 @@ def __main__():
OUT=sys.argv[2] OUT=sys.argv[2]
os.makedirs(OUT, exist_ok=True) os.makedirs(OUT, exist_ok=True)
if SCORE.split(".")[-1] == "mscz":
# Create midi file # Create midi file
subprocess.call([MSCORE, SCORE, "-o", f"{OUT}/{basename(SCORE)}.mid"]) MIDI_SCORE=f"{OUT}/{basename(SCORE)}.mid"
subprocess.call([MSCORE, SCORE, "-o", MIDI_SCORE])
elif SCORE.split(".")[-1] in ["mid", "midi"]:
MIDI_SCORE=SCORE
else:
print(f"Unknown file extension {SCORE.split('.')[-1]}")
exit(1)
midi_files = separate_instruments(f"{OUT}/{basename(SCORE)}.mid", OUT) midi_files = separate_instruments(MIDI_SCORE, OUT)
for file in midi_files: for file in midi_files:
change_instrument(file, file) change_instrument(file, file)
print("=== Creating audios ===") print("=== Creating audios ===")
#create_audios(midi_files, OUT) create_audios(midi_files, OUT)
if REMOVE_MID_FILES: if REMOVE_MID_FILES:
os.remove(f"{OUT}/{basename(SCORE)}.mid") os.remove(MIDI_SCORE)
for file in midi_files: for file in midi_files:
os.remove(file) os.remove(file)

View File

@ -1,24 +1,18 @@
#!/bin/bash #!/bin/bash
IN=recordings/le_roi.mkv usage () {
echo "Usage: $0 <file.webm|mp4|...>"
exit 1
}
IN=$1
[[ $IN ]] || usage $0
AUDIOS=out AUDIOS=out
OUT=videos OUT=videos
#TEMPO=90 mkdir -p "$OUT"
#ADDED_TEMPS=3
#TEMP_DIR=$(mktemp -d)
#OFFSET=$(bc <<< "scale=20; 60.0/$TEMPO * $ADDED_TEMPS")
mkdir -p "$VIDEOS"
add_audio () { add_audio () {
#temp_file=$TEMP_DIR/$(basename $2)
#echo temp: $temp_file
#ffmpeg -i $2 \
# -ss $OFFSET \
# -acodec copy \
# $temp_file
ffmpeg -y \ ffmpeg -y \
-i $1 \ -i $1 \
-i $2 \ -i $2 \
@ -26,8 +20,6 @@ add_audio () {
-map 0:v:0 \ -map 0:v:0 \
-map 1:a:0 \ -map 1:a:0 \
$3 $3
#rm $temp_file
} }
add_audio "$IN" "$AUDIOS/instrument_1.mp3" "$OUT/soprane.mkv" add_audio "$IN" "$AUDIOS/instrument_1.mp3" "$OUT/soprane.mkv"