Ich arbeite an einem Video-Streaming-Projekt, bei dem ich aus Sicherheitsgründen in Echtzeit ein dynamisches Wasserzeichen (z. B. Benutzername und E-Mail) anwenden muss. Das Video wird im DASH-Format gestreamt und die Segmentdateien liegen im .m4s-Format vor und werden über FFmpeg generiert. Herausforderungen:
Ist das möglich? Dynamisches Wasserzeichen direkt auf .m4s-Segmentdateien anwenden?
Videosegmente werden mit FFmpeg mit dem folgenden Befehl generiert:
Was ich versucht habe:
Ich habe versucht, FFmpeg zu verwenden, um mithilfe des Drawtext-Filters dynamisch ein Wasserzeichen auf die .m4s-Dateien anzuwenden, aber auf .m4s-Dateien werden nicht immer als gültige Eingabe für FFmpeg-Vorgänge erkannt.
video-streaming-backend | [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f1bf99cc640] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1012): unspecified pixel format
video-streaming-backend | Consider increasing the value for the 'analyzeduration' (10000000) and 'probesize' (5000000) options
video-streaming-backend | Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'http://web:8000/media/stream_video/chunks/ec1db006-b488-47ad-8220-79a05bcaae39/segments/init-stream0.m4s':
video-streaming-backend | Metadata:
video-streaming-backend | major_brand : iso5
video-streaming-backend | minor_version : 512
video-streaming-backend | compatible_brands: iso5iso6mp41
video-streaming-backend | encoder : Lavf60.16.100
video-streaming-backend | Duration: N/A, bitrate: N/A
video-streaming-backend | Stream #0:0[0x1](und): Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1012, SAR 1:1 DAR 480:253, 12288 tbr, 12288 tbn (default)
video-streaming-backend | Metadata:
video-streaming-backend | handler_name : VideoHandler
video-streaming-backend | vendor_id : [0][0][0][0]
video-streaming-backend | Stream mapping:
video-streaming-backend | Stream #0:0 (h264) -> drawtext:default
video-streaming-backend | drawtext:default -> Stream #0:0 (libx264)
video-streaming-backend | Press [q] to stop, [?] for help
video-streaming-backend | Cannot determine format of input stream 0:0 after EOF
video-streaming-backend | Error marking filters as finished
video-streaming-backend | Error while filtering: Invalid data found when processing input
video-streaming-backend | [out#0/mp4 @ 0x7f1bf8e73100] Nothing was written into output file, because at least one of its streams received no packets.
video-streaming-backend | frame= 0 fps=0.0 q=0.0 Lsize= 0kB time=N/A bitrate=N/A speed=N/A
video-streaming-backend | Conversion failed!
Aufgrund dieser Fehler habe ich mich gefragt, ob .m4s ein brauchbares Format für dynamische Wasserzeichen ist. Wenn nicht, was wäre der richtige Ansatz?
Ich arbeite an einem Video-Streaming-Projekt, bei dem ich aus Sicherheitsgründen in Echtzeit ein dynamisches Wasserzeichen (z. B. Benutzername und E-Mail) anwenden muss. Das Video wird im DASH-Format gestreamt und die Segmentdateien liegen im .m4s-Format vor und werden über FFmpeg generiert. [b]Herausforderungen:[/b] Ist das möglich? Dynamisches Wasserzeichen direkt auf .m4s-Segmentdateien anwenden? Videosegmente werden mit FFmpeg mit dem folgenden Befehl generiert: [code]ffmpeg .input(video_path) .output(mpd_path, format='dash', map='0', video_bitrate='2400k', video_size='1920x1080', vcodec='libx264', seg_duration='4', # Sets segment duration to 4 seconds acodec='copy') .run()
[/code] [b]Was ich versucht habe:[/b] Ich habe versucht, FFmpeg zu verwenden, um mithilfe des Drawtext-Filters dynamisch ein Wasserzeichen auf die .m4s-Dateien anzuwenden, aber auf .m4s-Dateien werden nicht immer als gültige Eingabe für FFmpeg-Vorgänge erkannt. [code]# FFmpeg command to add watermark to m4s file try: # FFmpeg processing out, err = ( ffmpeg .input(m4s_file_path) # Input the segment file .filter( "drawtext", text=user_info, fontfile="font/dejavu-sans/DejaVuSans-Bold.ttf", fontsize=24, fontcolor="white", x=10, y=10 ) .output( "pipe:", # Stream output as a byte stream format="mp4", # Output format as MP4 (compatible with MPEG-DASH) vcodec="libx264", acodec="copy", movflags="frag_keyframe+empty_moov" ) .run(capture_stdout=True, capture_stderr=True) )
logger.info(f"FFmpeg process completed. stdout length: {len(out)}, stderr: {err.decode('utf-8')}") logger.error(f"FFmpeg stderr: {err.decode('utf-8')}") return out # Return the processed video stream data
except ffmpeg.Error as e: stderr_output = e.stderr.decode('utf-8') if e.stderr else "No stderr available" logger.error(f"FFmpeg error: {stderr_output}")
[/code] [b]Fehler, mit dem ich konfrontiert war:[/b] [code]video-streaming-backend | [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f1bf99cc640] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1012): unspecified pixel format video-streaming-backend | Consider increasing the value for the 'analyzeduration' (10000000) and 'probesize' (5000000) options video-streaming-backend | Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'http://web:8000/media/stream_video/chunks/ec1db006-b488-47ad-8220-79a05bcaae39/segments/init-stream0.m4s': video-streaming-backend | Metadata: video-streaming-backend | major_brand : iso5 video-streaming-backend | minor_version : 512 video-streaming-backend | compatible_brands: iso5iso6mp41 video-streaming-backend | encoder : Lavf60.16.100 video-streaming-backend | Duration: N/A, bitrate: N/A video-streaming-backend | Stream #0:0[0x1](und): Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1012, SAR 1:1 DAR 480:253, 12288 tbr, 12288 tbn (default) video-streaming-backend | Metadata: video-streaming-backend | handler_name : VideoHandler video-streaming-backend | vendor_id : [0][0][0][0] video-streaming-backend | Stream mapping: video-streaming-backend | Stream #0:0 (h264) -> drawtext:default video-streaming-backend | drawtext:default -> Stream #0:0 (libx264) video-streaming-backend | Press [q] to stop, [?] for help video-streaming-backend | Cannot determine format of input stream 0:0 after EOF video-streaming-backend | Error marking filters as finished video-streaming-backend | Error while filtering: Invalid data found when processing input video-streaming-backend | [out#0/mp4 @ 0x7f1bf8e73100] Nothing was written into output file, because at least one of its streams received no packets. video-streaming-backend | frame= 0 fps=0.0 q=0.0 Lsize= 0kB time=N/A bitrate=N/A speed=N/A video-streaming-backend | Conversion failed!
[/code] Aufgrund dieser Fehler habe ich mich gefragt, ob .m4s ein brauchbares Format für dynamische Wasserzeichen ist. Wenn nicht, was wäre der richtige Ansatz?
Ich verwende dieses CSS, um meinen Bildern auf meiner Website ein Wasserzeichen hinzuzufügen. Wenn es auf einen Telefonbildschirm passt, würde das Wasserzeichen-Logo fast größer aussehen, wenn ich...
Ich verwende dieses CSS, um meinen Bildern auf meiner Website ein Wasserzeichen hinzuzufügen. Wenn es auf einen Telefonbildschirm passt, würde das Wasserzeichen-Logo fast größer aussehen, wenn ich...
Es gibt ein Problem damit, dass das CSS nach der Erstellung des Projekts nicht angewendet wird. Lokal wird das CSS korrekt angezeigt, wenn npm run start verwendet wird. Beim lokalen Erstellen und...
Ich bin mir nicht sicher, wie ich das mit einer MySQL-Abfrage erreichen kann:
Ich habe eine Liste mit Anzeigen, die von mehreren Benutzern gepostet wurden, und einige Benutzer posten mehrere Anzeigen...
Ich versuche, speziell mit PDFBox ein Wasserzeichen zu einer PDF-Datei hinzuzufügen. Ich habe es geschafft, dass das Bild auf jeder Seite angezeigt wird, aber es verliert die Hintergrundtransparenz,...