Bagaimana mpeg disisipkan?

0

Saya perlu tahu setelah berapa banyak frame video bagian audio dimulai untuk file mpeg. Jadi misalnya, pertama ada 5 frame video dan setelah itu ada 10 sampel audio. Ini akan diulang untuk seluruh file.

Extra: Apakah ada cara untuk mengatur informasi ini di ffmpeg?

Sunting: informasi lebih lanjut

Saya memiliki aliran video dalam format RGBA. Frame ini ditulis ke encoder.
Saya juga memiliki aliran audio dalam format s16le yang ingin saya beri makan ke encoder.

Jika saya menggunakan aliran video dalam format RGBA dan menambahkan file .wav biasa ke dalamnya sebagai audio semuanya berfungsi dengan baik. Namun, saya perlu menambahkan aliran audio saya sendiri. Ketika saya mencoba melakukan ini, saya tidak mendapatkan audio dan videonya rusak. Ini meluncur dari kanan ke kiri dan dari atas ke bawah. Bagian bingkai yang jatuh ditampilkan di sisi lain (misalnya, bingkai 20px ke kanan, 20px yang jatuh diberikan di sisi kiri).

Saya pikir saya harus menemukan urutan mana yang harus saya tulis stream audio saya ke encoder. Bagian ini dari perintah konsol mengatur audio saya:

-f s16le -ac 1 -i - 

Ketika saya mencobanya dengan file .wav biasa saya baru saja menulis

-i file_name.wav

Saya harap ini membuatnya sedikit lebih jelas.

EDIT LEBIH LANJUT:

Saya saat ini menulis 18 frame ke encoder dan setelah itu saya menulis sampel audio 18 frame ke encoder. Ini berulang. Jika saya pergi ke frekuensi yang lebih rendah dari ini saya mendapatkan flash hijau di video

PERINTAH FFMPEG:

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
Dries
sumber
Pertanyaan Anda tidak terlalu jelas. Pertama-tama Anda mengatakan MPEG, tetapi MPEG itu sendiri bukan format, itu adalah kelompok kerja. Ada puluhan format yang diterbitkan oleh MPEG, kita perlu tahu yang mana yang sedang Anda bicarakan. Juga, dapatkah Anda menambahkan detail lain ke pertanyaan Anda, secara umum tidak masuk akal.
heavyd
Saya menambahkan beberapa informasi lebih lanjut. Saya harap ini lebih jelas sekarang
Dries
Apakah Anda menulis video dan audio ke stdin?
heavyd
saya menggunakan fwrite() untuk menulis audio dan video
Dries
Bisakah Anda membagikan baris perintah FFMPEG lengkap Anda?
heavyd

Jawaban:

0

Anda sedang menulis data audio dan video ke aliran input yang sama. FFMPEG perlu memisahkan kedua aliran sehingga dapat melipatgandakannya dengan benar. Saya akan melihat menggunakan pipa bernama untuk melewati dua aliran terpisah ke FFMPEG. Sesuatu seperti ini:

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
heavyd
sumber
0

Saya tidak menganggap ada aturan umum untuk ini. Ini bisa seperti V0 A0 V1 A1 V2 A2 atau V0 V1 A01 V2 V3 A23. Persisnya ini harus bergantung pada kompresi dan kualitas video dan audio. Satu-satunya aturan aktual adalah bahwa aliran video dari frame (V0 V1, dll) dan aliran audio blok yang sesuai (A0, A1, dll) harus bilangan bulat.

Overmind
sumber
Saya melakukan itu pada awalnya, interleaving video per frame dengan jumlah sampel suara yang saya butuhkan tetapi itu memberikan hasil yang aneh
Dries
Tetapi apa yang Anda coba lakukan? Mungkin Anda tidak perlu menggali sedalam itu.
Overmind
Saya mencoba untuk secara manual menambahkan audio yang saya miliki dalam format s16le ke encoder. Video ini ditulis per frame ke encoder juga. Saya perlu mendapatkan urutan yang benar di mana saya mengirim data sehingga encoder dapat meletakkannya di file mpeg dalam urutan yang benar
Dries
Jadi Anda ingin melakukannya seperti ini karena Anda perlu menyimpan sampel PCM 16 bit alih-alih 24 bit atau 32 bit? Jika sampel 16-bit bukan persyaratan, maka akan jauh lebih mudah untuk hanya mengkonversi video dan audio menjadi dua format yang dikenal luas dan kemudian perangkat lunak pengkodean ulang yang layak dapat menyinkronkannya.
Overmind
Saya tidak perlu menyimpan format itu tidak. Sepertinya ini ujian yang mudah. Hal-hal video dan audio ini adalah aliran btw, tidak seperti saya dapat mengkonversi keduanya ke file lain terlebih dahulu untuk membuatnya lebih mudah. Jadi tidak, 16-bit tidak diperlukan tapi itu ukuran per sampel audio yang saya miliki sekarang (tapi ini bisa diubah). Saya PERLU untuk melakukan ini menggunakan ffmpeg karena fungsi ini termasuk dalam aplikasi saya
Dries