Creating web-browser playable webm files with vp8 SDK? - c++

I'm using the vp8 SDK (www.webmproject.org) to create a vp8-encoded video file. However, the SDK sample produces an IVF file, which the browser doesn't play.
I know the webm format is a matroska container so I guess I should store the video data in that format, but the mkv format specification is lengthy and complex and I don't think I should reinvent the wheel by figuring it out by myself.
So I would like to know if someone can recommend a sample of how to encode and produce a playable webm vp8 file.
If there is no such sample (as my searches on google suggest) at least point me to a simple and usable matroska lib which is proven to work for the browsers.

Related

How to embed auto-generated English subtitles with either youtube-dl or yt-dlp?

The key here is to be able to embed the auto-generated subtitles.
The tool can download the autogenerated subtitles but can only embed the real subtitle file, if it exists. I wondered if there would be a way to embed or capture in the video the auto-generated subs. Thanks!
Emmbed Subtitle To Video
--embed-subs: Embed subtitles in the video (only for mp4, webm and mkv videos)
When --embed-subs and --write-subs are used together, the subtitles are written to disk and also embedded in the media file. You can use just --embed-subs to embed the subs and automatically delete the separate file.
don't forget to list the available subtitles using --list-subs.
You can find more like this here
Burn Subtitles To Video
Burn subtitles into the video is also an easy step. You can do this just using commonly used VLC Media Player and can be downloaded from here. I found a great video about this. you can do this with just 4 easy steps by following this video

supported formats BASS_StreamCreateURL

I have a C++ program that plays a video file from a host. I am playing audio using BASS_StreamCreateURL, but the problem is still there, I used mp4 format changing moov and mdat blocks. I use movavi, it doesn't have web optimization (to replace blocks), it's not very convenient to use other programs. So what other formats can be used with bass

Speech to Text audio formats

Can we use MP3 audio file in speech to text Watson API ?
What are the popular unsupported formats for speech to text Watson API ?
I suggest you use WAV format, in the case: popular format. Depends the case use.
If you really need to use MP3, you can simple to convert MP3 to WAV.
But, the formats Speech to Text support is:
audio/flac: Free Lossless Audio Codec (FLAC), a lossless compressed audio coding format. For more information, see en.wikipedia.org/wiki/FLAC.
audio/l16: Linear 16-bit Pulse-Code Modulation (PCM), an uncompressed audio data format. Use this media type to pass a raw PCM file. Note that linear PCM audio can also reside inside a container Waveform Audio File Format (WAV) file. For more information, see the Internet Engineering Task Force (IETF) Request for Comment (RFC) 2586 and en.wikipedia.org/wiki/Pulse-code_modulation.
audio/wav: Waveform Audio File Format (WAV), a standard created by Microsoft® and IBM. A WAV file is a container that is often used for uncompressed audio bitstreams but can contain compressed audio, as well. For more information, see en.wikipedia.org/wiki/WAV.
The service supports WAV files that use any encoding. It accepts audio with a maximum of nine channels (due to an FFmpeg limitation).
audio/ogg/ audio/ogg;codecs=opus / audio/ogg; codecs=vorbis: Ogg is a free, open container format maintained by the Xiph.org Foundation; for more information, see www.xiph.org/ogg/.
Both codecs are free, open, lossy audio-compression formats. Opus is the preferred codec. If you omit the codec, the service automatically detects it from the input audio.
audio/webm/ audio/webm;codecs=opus/ audio/webm;codecs=vorbis: Web Media (WebM) is an open media-file format; for more information, see webmproject.org. WebM supports audio streams compressed with the Opus and Vorbis audio codecs; Opus is the preferred codec. If you omit the codec, the service automatically detects it from the input audio. For JavaScript code that shows how to capture audio from a microphone in a Chrome browser and encode it into a WebM data stream.
But, all formats with more details you can see in the Speech to Text Official Documentation.
I suggest you to edit with more details and read the documentation, commonly, the documentation from IBM is very objective and complete.
No MP3 support:
Watson Speech to Text audio formats
Don't struggle with choosing particular audio format for speech to text conversion, most of the manual speech to text or transcription services accepts all available formats. When we go for automatic speech to text service, i always prefer wav over mp3, since it contains high bit audio data without losing the quality of the audio and accepting by most speech engines. And here are the list of formats supported by any Transcription Company: https://www.transcriptionwave.com/format.html

QMultimedia - Which Video/Audio encodings and containers are supported?

I'm trying to make a multimedia database system using Qt. I'm using QMultimedia to play back videos in a QVideoWidget.
The following is the code I am using to play a video file in a QVideo Widget:
mMediaPlayer = new QMediaPlayer();
mMediaPlaylist = new QMediaPlaylist();
QMediaContent content(QMediaResource())
mMediaPlaylist->addMedia(QUrl::fromLocalFile(QDir(QString("data")).absoluteFilePath(QString("%1.dat").arg(mMedia.GetUID()))));
mMediaPlayer->setPlaylist(mMediaPlaylist);
mVideoWidget = new QVideoWidget();
mMediaPlayer->setVideoOutput(mVideoWidget);
this->setCentralWidget(mVideoWidget);
mVideoWidget->show();
mMediaPlayer->play();
Basically, it plays a file called 1.dat for example, which is just a renamed video file (video.mp4 for example). However, playing the video never works, and the following error is produced:
DirectShowPlayerService::doRender: Unresolved error code 80040266
With some google searching, I found that this error is because QMultimedia doesn't have the required codecs/filters to play the format of the video. I've tried converting my videos to many different formats using ffmpeg, while trying formats specified at Supported Formats in DirectShow and Supported Media Formats in Media Foundation. I've also tried installing Directshow Filters for Ogg Vorbis, Speex, Theora, FLAC, and WebM, and converting my video to theora/vorbis in an ogg container. Still no go.
I should note that I did manage to play one mpg file, so I do know QMultimedia is working. But I tried converting another video to mimic the properties of that mpg file, and it didn't seem to work, so it seems QMultimedia is extremely specific in what formats it supports.
What system is QMultimedia using for its backend decoding? How can I find out what types of encodings and containers it supports? Is it possible to write my own decoder in Qt?
Thanks
this document describe features supported by QMultimedia backends. Render to widget is not supported now.
I recommend to use another library for encoding/decoding multimedia(f.e. ffmpeg) - QMultimedia now is not stable and I think that correct work only examples from documentation :(

c++ audio conversion ( mp3 -> ogg ) question

I was wondering if anyone knew how to convert an mp3 audio file to an ogg audio file. I know there are programs you can buy online, but I would rather just have my own little app that allowed me to convert as many files I wanted.
It's realtive simple. I wouldn't use the Windows Media Format SDK. Simply because of the fact that it's overkill for the job.
You need a MP3 decoder and a OGG encoder and a little bit of glue code around that (opening files, setting up the codecs, piping raw audio data around ect.)
For the MP3 decoder I suggest that you take a look at the liblame library or use this decoding lib http://www.codeproject.com/KB/audio-video/madlldlib.aspx as a starting point.
For OGG there aren't many choices. You need libogg and libvorbis. Easy as that. The example codes that come with the libs show you how to do the encoding.
Good luck.
It's a bad idea. To quote from the Vorbis FAQ
You can convert any audio format to
Ogg Vorbis. However, converting from
one lossy format, like MP3, to another
lossy format, like Vorbis, is
generally a bad idea. Both MP3 and
Vorbis encoders achieve high
compression ratios by throwing away
parts of the audio waveform that you
probably won't hear. However, the MP3
and Vorbis codecs are very different,
so they each will throw away different
parts of the audio, although there
certainly is some overlap. Converting
a MP3 to Vorbis involves decoding the
MP3 file back to an uncompressed
format, like WAV, and recompressing it
using the Ogg Vorbis encoder. The
decoded MP3 will be missing the parts
of the original audio that the MP3
encoder chose to discard. The Ogg
Vorbis encoder will then discard other
audio components when it compresses
the data. At best, the result will be
an Ogg file that sounds the same as
your original MP3, but it is most
likely that the resulting file will
sound worse than your original MP3. In
no case will you get a file that
sounds better than the original MP3.
Since many music players can play both
MP3 and Ogg files, there is no reason
that you should have to switch all of
your files to one format or the other.
If you like Ogg Vorbis, then we would
encourage you to use it when you
encode from original, lossless audio
sources (like CDs). When encoding from
originals, you will find that you can
make Ogg files that are smaller or of
better quality (or both) than your
MP3s.
(If you must absolutely must convert
from MP3 to Ogg, there are several
conversion scripts available on
Freshmeat.)
http://www.vorbis.com/faq/#transcode
And, for the sake of accuracy, from the same FAQ:
Ogg Ogg is the name of Xiph.org's
container format for audio, video, and
metadata.
Vorbis Vorbis is the name of
a specific audio compression scheme
that's designed to be contained in
Ogg. Note that other formats are
capable of being embedded in Ogg such
as FLAC and Speex.
I imagine it's theoretically possible to embed MP3 in Ogg, though I'm not sure why anyone would want to. FLAC is a lossless audio codec. Speex is a very lossy audio codec optimised for encoding speech. Vorbis is a general-use lossy audio codec. "Ogg audio" is, therefore, a bit of a misnomer. Ogg Vorbis is the proper term for what I imagine you mean.
All that said, if you still want to convert from MP3 to Ogg Vorbis, you could (a) try the Freshmeat link above, (b) look at the other answers, or (c) look at FFmpeg. FFmpeg is a general-purpose library for converting lots of video and audio codecs and formats. It can do a lot of clever stuff. I have heard that its default Vorbis encoder is poor quality, but it can be configured to use libvorbis instead of its inbuilt Vorbis encoder. (That last sentence may be out of date now. I don't know.)
Note that FFmpeg will be using LAME and libvorbis, just as you already are. It won't do anything new for you that way. It just gives you the option to do all sorts of other conversions too.
Foobar2000 (http://www.foobar2000.org/) is free and makes it quite easy to convert between file formats. It would take only a few clicks to convert from MP3 to OGG.
Keep in mind that moving from a lossy format to a lossy format will reduce the quality of the audio more than moving from a lossless format (FLAC, CD Audio, Apple Lossless Codec) to a lossy format (MP3, OGG, M4A). If you have access to the lossless source audio use that to convert it instead.
You will need to decode mp3 then encode into ogg.
One possibility is to use liblame for mp3 decoding and libogg/libvorbis for encoding into ogg. Or just use the command line versions of those.
But I wouldn't say converting from one lossy format to another is a great idea.
You can certainly do this in C++ with the Windows Media Format SDK.
I have only used WMFSDK9 myself. It contains a sample called UncompAVIToWMV, which may get you started. From the Readme:
It shows how to merge samples for
audio and video streams from several
AVI files and either merge these into
similar streams or create a new stream
based on the source stream profile.
It also shows how to create an
arbitrary stream, do multipass
encoding and add SMPTE time codes.