Wie ist mpeg verschachtelt?

693
Dries

Ich muss wissen, nach wie vielen Videoframes der Audioteil für eine MPEG-Datei beginnt. Zum Beispiel gibt es zunächst 5 Videoframes und danach 10 Audio-Samples. Dies würde für die gesamte Datei wiederholt werden.

Extra: Gibt es eine Möglichkeit, diese Informationen in ffmpeg zu setzen?

EDIT: Weitere Informationen

Ich habe einen Videostream im RGBA-Format. Diese Frames werden in den Encoder geschrieben.
Ich habe auch einen Audiostream im s16le-Format, den ich dem Encoder zuführen möchte.

Wenn ich den Videostream im RGBA-Format verwende und ihm eine normale WAV-Datei als Audio hinzufüge, funktioniert alles einwandfrei. Ich muss jedoch meinen eigenen Audiostrom hinzufügen. Wenn ich dies versuche, bekomme ich kein Audio und das Video ist defekt. Es gleitet von rechts nach links und von oben nach unten. Der Teil des Frames, der herunterfällt, wird auf der anderen Seite gerendert (z. B. befindet sich der Frame 20px nach rechts, der 20px, der heruntergefallen ist, wird auf der linken Seite gerendert).

Ich denke, ich muss herausfinden, in welcher Reihenfolge ich meinen Audiostream in den Encoder schreiben muss. Dieser Teil des Konsolenbefehls verwaltet mein Audio:

-f s16le -ac 1 -i - 

Als ich es mit einer normalen .wav-Datei versuchte, schrieb ich gerade

-i file_name.wav 

Ich hoffe, das macht es etwas klarer.

WEITERE BEARBEITUNG:

Ich schreibe derzeit 18 Frames an den Encoder und danach schreibe ich 18 Frames Audio-Samples an den Encoder. Das wiederholt sich. Wenn ich auf eine niedrigere Frequenz gehe, bekomme ich grüne Blitze im Video

FFMPEG BEFEHL:

ffmpeg -r 24 -pix_fmt rgba -s 1280x720 -f rawvideo -y -i - -f s16le -ac 1 -i - -vf vflip -vcodec mpeg1video -qscale 4 -bufsize 500KB -maxrate 5000KB OUTPUT_FILE 
0
Ihre Frage ist nicht sehr klar. Zunächst einmal sagen Sie MPEG, aber MPEG selbst ist kein Format, sondern eine Arbeitsgruppe. Es gibt Dutzende von Formaten, die von MPEG veröffentlicht werden. Wir müssen wissen, über welches Sie sprechen. Können Sie Ihrer Frage auch weitere Details hinzufügen, macht dies im Allgemeinen keinen Sinn. heavyd vor 9 Jahren 0
Ich habe weitere Informationen hinzugefügt. Ich hoffe es ist jetzt klarer Dries vor 9 Jahren 0
Schreiben Sie Video und Audio in stdin? heavyd vor 9 Jahren 0
Ich verwende `fwrite ()`, um das Audio und das Video zu schreiben Dries vor 9 Jahren 0
Können Sie Ihre vollständige FFMPEG-Befehlszeile freigeben? heavyd vor 9 Jahren 0
Der Befehl wurde der Frage hinzugefügt Dries vor 9 Jahren 0
Wie wird dein Video an FFMPEG übergeben? Sie liefern keine Argumente für "-i". heavyd vor 9 Jahren 0
Woops, das ist ein Tippfehler. Es sollte ein "-" sein (in der Frage geändert) Dries vor 9 Jahren 0
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/21039/discussion-between-heavyd-and-dries). heavyd vor 9 Jahren 0

2 Antworten auf die Frage

0
Overmind

Ich sage nicht, dass es eine allgemeine Regel dafür gibt. Es kann wie V0 A0 V1 A1 V2 A2 oder V0 V1 A01 V2 V3 A23 sein. Das genau davon sollte von der Komprimierung und der Qualität von Video und Audio abhängen. Die einzige tatsächliche Regel ist, dass sowohl der Videostrom von Frames (V0, V1 usw.) als auch der entsprechende Audiostrom von Blöcken (A0, A1 usw.) Ganzzahlen sein müssen.

Ich habe das zuerst gemacht, indem ich das Video pro Frame mit der Anzahl der Sound-Samples verschachtele, die ich brauche, aber das ergibt seltsame Ergebnisse Dries vor 9 Jahren 0
Aber was versuchst du zu tun? Vielleicht musst du nicht so tief graben. Overmind vor 9 Jahren 0
Ich versuche, das Audio, das ich im s16le-Format habe, manuell zum Encoder hinzuzufügen. Das Video wird auch pro Frame in den Encoder geschrieben. Ich muss die Reihenfolge richtig bestimmen, in der ich die Daten sende, damit der Encoder sie in der mpeg-Datei in der richtigen Reihenfolge ablegen kann Dries vor 9 Jahren 0
Sie möchten es also so machen, weil Sie 16-Bit-PCM-Samples anstelle von 24-Bit- oder 32-Bit-Samples aufbewahren müssen? Wenn 16-Bit-Samples nicht erforderlich sind, ist es viel einfacher, Video und Audio einfach in zwei bekannte, weit verbreitete Formate zu konvertieren. Anschließend können sie mit einer anständigen Neucodierungssoftware synchronisiert werden. Overmind vor 9 Jahren 0
Ich muss dieses Format nicht beibehalten. Es schien ein einfacher Test zu sein. Diese Video- und Audiosachen sind übrigens Streams. Es ist nicht so, dass ich beides zuerst in eine andere Datei konvertieren kann, um es einfacher zu machen. Nein, 16-Bit ist nicht erforderlich, aber das ist die Größe pro Audio-Sample, die ich gerade habe (dies kann jedoch geändert werden). Ich muss dies jedoch mit ffmpeg tun, da diese Funktion in meiner Anwendung enthalten ist Dries vor 9 Jahren 0
0
heavyd

Sie schreiben sowohl die Audio- als auch die Videodaten in den gleichen Eingangsstrom. FFMPEG muss die beiden Streams voneinander trennen, damit sie ordnungsgemäß multiplext werden können. Ich würde nachsehen, Named Pipes zu verwenden, um zwei getrennte Streams an FFMPEG zu übergeben. Etwas wie das:

ffmpeg -r 24 -pix_fmt rgba -s 1280x720 -f rawvideo -y -i \\.\pipe\videopipe -f s16le -ac 1 -i \\.\pipe\audiopipe -vf vflip -vcodec mpeg1video -qscale 4 -bufsize 500KB -maxrate 5000KB OUTPUT_FILE