Hallo Allerseits,
ich habe hier einen Video Livestream der über ffmpeg gestreamt wird. Mit tee splitte ich den Prozess Log, so dass er im Terminal und in einem Logfile geschrieben wird. Das Logfile kann anschließend über eine PHP Seite im Browser angezeigt werden.
Mein ursprünglicher Befehl sah so aus:
1 2 3 4 5 | ffmpeg -v info -hide_banner "${input[@]}" \ -vf scale=$res -sws_flags bicubic+accurate_rnd+full_chroma_int -r 25 -pix_fmt yuv420p -c:v libx264 -crf 21 -g 25 \ -maxrate $maxR -bufsize $maxR -preset slower -profile:v Main -level 3.1 -refs 3 -c:a libfdk_aac -b:a $audR -ar 44100 \ -nostdin -movflags rtphint -threads 0 -f flv "$fftarget" 2>&1 \ | tee >( grep -Ev --line-buffered "264 - core|frame=" - >> /home/user/fflog/ffreport_$dT.log ) |
Das hat soweit funktioniert, also ich konnte in PHP das Logfile einlesen, während der ffmpeg Prozess läuft.
Nun würde ich gerne per sed bestimmte Zeile bearbeiten und am Anfang ein Datum einfügen. Leider bekomme ich es nicht hin, dass das in real time stattfindet. Erst wenn ich den Prozess beende ist das Logfile befüllt. Zusätzlich wird das Datum und die Uhrzeit vom Scriptstart an die Zeilen eingefügt und nicht die tatsächlichen.
Geht mein Vorhaben so? Und habt ihr eine Idee wie?
Hier wäre mein Ansatz gewesen:
1 2 3 4 5 | ffmpeg -v info -hide_banner "${input[@]}" \ -vf scale=$res -sws_flags bicubic+accurate_rnd+full_chroma_int -r 25 -pix_fmt yuv420p -c:v libx264 -crf 21 -g 25 \ -maxrate $maxR -bufsize $maxR -preset slower -profile:v Main -level 3.1 -refs 3 -c:a libfdk_aac -b:a $audR -ar 44100 \ -nostdin -movflags rtphint -threads 0 -f flv "$fftarget" 2>&1 \ | tee >( grep -Ev --line-buffered "264 - core|frame=" - | sed "s/^\[mp/$(date +"%Y-%m-%d %T") \[mp/g;s/^Error/$(date +"%Y-%m-%d %T") Error/g" >> /home/user/fflog/ffreport_$dT.log ) |
Grüße
Jonathan