I need your help on FFmpeg and an audio track tag.
I'm generating a ProRes LT whose main language is Galician.
I know that FFmpeg is based on List of ISO 639-2 codes but after several attempts, nothing helps. I tried "glg", "gal", "gl", "glc" but the audio remains untagged.
For information, I made a test with MKVToolNix and it manages to tag the language.
Could you help me to find the right solution to do the same with FFmpeg?
Thanks a lot for your help.
Currently not possible with FFmpeg for MOV
The FFmpeg MOV muxer does not yet support the Extended Language Tag Atom (elng). So you are limited to the legacy Macintosh Language Codes which does not include Galician.
See:
Bug report #7905: ISO 639-2 Code "frm" Support
Abandoned patch [FFmpeg-devel] avformat/isom: allow ISO 639 codes for mov
Related
I need source code that loads and starts music in python without importing any modules at all. Is that possible or should I try other languages like c# or c++ because every modules are written in cpython!
First off I think it depends on the type of file but if your file of choice is WAV, AU, AIFF, MP3, CSL, SD, SMP, or NIST/Sphere, you can use The Snack Sound Toolkit. I know you asked for not using a module but this is very good and can be used on a plethora of files. It works like this:
snd = Sound()
snd.read('ex1.wav')
snd.play()
Also it can also be used to show the graphical representation of the sound by this:
c = SnackCanvas()
c.pack()
c.create_waveform(0, 0, sound=snd)
In JavaCard, can somebody please tell me what is the purpose of the maskgen tool?
What I have heard from my senior colleagues that it is the tool which converts the Java codes into C code for that particular JavaCard platform. But is answer seems to broad and lacking the exact particularity. If the above mentioned purpose is correct then my few questions are
1. How does it convert the java source code into C code ?
2. How can I see the source code of this maskgen tool ?
3. How can I convert my Java card source code using maskgen tool?
Quoted from Java Card 3 Platform Development Kit User Guide:
What id Maskgen tool?
The maskgen tool produces a mask file from a set of Java Card Assembly
files produced by the Converter. The format of the output mask file is
targeted to a specific platform. The plug-ins that produce each
different maskgen output format are called generators. The supported
generators are cref, which supports the Java Card RE, and size, which
reports size statistics for the mask. Other generators that are not
supported in this release include jref, which supports the Java
programming language Java Card RE, and a51, which supports the Keil
A51 assembly language interpreter. Java Card Assembly Syntax Example
provides additional information about the contents of a Java Card
Assembly file.
Where I can find Maskgen tool source?
The maskgen tool is not available or of use outside of a source
release bundle, so [...] if you do not have a source release of the
development kit you would have maskgen tool. If you have a source
release, you can localize locale-specific data associated with the
maskgen tool, see Localizing With The Development Kit.
How to convert Java Card sources using Maskgen tool?
Check Running Maskgen oracle page:
maskgen Example
This example uses a text file (args.txt) to pass command line
arguments to maskgen:
maskgen -o mask.c cref #args.txt
where the contents of the file args.txt is:
first.jca second.jca third.jca
This is equivalent to the command line:
maskgen -o mask.c cref first.jca second.jca third.jca
This command produces an output file mask.c that is compiled with a C
compiler to produce mask.o, which is linked with the Java Card RE
interpreter. Refer to Using the Reference Implementation for more
information about this target platform.
Above ".JCA" (Java Card Assembly) files are generated using Converter tool. Here is its manual.
Some related quoted info from here:
maskgen actually generates a mask.c file which contains VM bytecodes
that are interpreted by the JCVM and the applet is executed. The
mask.c file should be loaded onto the card. This method is used only
for static use of JavaCard.
And
Maskgen takes the CAP file (which is generated by the converter ), and
generates a mask.c file which will be a part of the cref in static
cards. The parameters for memory configuration of your MCU/processor
can be set in maskgen.cfg file.
Anyway, you need a binary release of JCDK to have this tool and its source.
I have upgrade my gstreamer to the lastest version 1.4.0 on Linux, including the gst-plugins-base/good/bad/ugly. But when I try to play a video, I cannot find many elements, such as xvimagesink, videotestsrc and autovideosink.
I want to know how can I add these elements?
gst-launch --gst-debug-level=3 !filesrc location=FlickAnimation.avi !avidemux name=demux demux.video_00 ! queue ! ffdec_mpeg4 !ffmpegcolorspace !autovideosink
Post the result of gst-inspect of the three plugins which you have mentioned.
Try to locate below three files, these are libraries for the mentioned plugins. Please change the folder name of gstreamer version according to what you have in your machine
Filename: /usr/lib/i386-linux-gnu/gstreamer-0.10/libgstvideotestsrc.so
Filename: /usr/lib/i386-linux-gnu/gstreamer-0.10/libgstxvimagesink.so
Filename: /usr/lib/i386-linux-gnu/gstreamer-0.10/libgstautodetect.so
A possible reason: You may have installed mulitple versions of gstreamer
P.S. xvimagesink generally works only when you have a graphics card or a harwdware for graphics
If you're using gstreamer 1.x you probably want to use gst-launch-1.0 and gst-inspect-1.0. It's just a guess, but maybe you installed gstreamer 1.x plugins but are using the tools from 0.10 that will look for 0.10 plugins.
Hopefully, you will find a solution following one of the steps provided in this thread.
In my case, runnig export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib made it work.
Since most of these plugins and their names keep changing with the various versions, if not specifically required, I'd recommend using the 'autoaudiosink','autovideosink', .....'auto*src' etc.
Takes out most complications (beginner point of view)
I'm porting an OpenCV 2.2 app from Unix (that works) onto Windows 7 64-bit and I receive the following exception when cv::imwrite is called
"OpenCV Error: Unspecified error (could not find a writer for the specified extension) in unknown function, file highgui\src\loadsave.cpp"
The original unix app works fine on my Mac and Linux boxes.
Does anyone know what library or compiler config I could be missing that makes this work on Windows?
UPDATE:
I did the following things to get OpenCV running:
Downloaded the binaries for v2.2 from the OpenCV site for windows. I'm using 2.2 because the original app uses it and I don't want to complicate my build at this stage.
I am trying to imwrite to a .png file. I looked at the OpenCV code and noticed the necessity for external libs for Encoders such as Pngs or jpegs, so I tried writing to .ppm, .bmp which seems not to require deps, but I get the identical error.
An example of my usage is cv::imwrite("out.png", cv_scaled); where cv_scaled is of type cv::Mat with format CV_32FC1
Please remember the identical code works fine in unix
The fact .bmp or .ppm doesn't work this raises more questions:
Why don't these very simple formats work?
Is there a way to see a list of installed Encoders programmatically?
Thanks again for your kind assistance in helping me debug this problem.
Your current installation of OpenCV doesn't support the file format you are trying to create on disk.
Check if the extension of the file is right. If it is, you'll have to recompile OpenCV and add support to this format and possibly install the libraries you are missing.
That's all that can be said without more information.
EDIT:
As I have also failed building an application that uses the C++ interface of OpenCV (v2.3 on VS2005) I ended up using the following workaround: convert the C++ types to the C types when necessary.
To convert from IplImage* to cv::Mat is pretty straight forward:
IplImage* ipl_img = cvLoadImage("test.jpg", CV_LOAD_IMAGE_UNCHANGED);
Mat mat_img(ipl_img);
imshow("window", mat_img);
The conversion cv::Mat to IplImage* is not so obvious, but it's also simple, and the trick is to use a IplImage instead of a IplImage*:
IplImage ipl_from_mat((IplImage)mat_img);
cvNamedWindow("window", CV_WINDOW_AUTOSIZE);
// and then pass the memory address of the variable when you need it as IplImage*
cvShowImage("window", &ipl_from_mat);
Try
cvSaveImage("test.jpg", &(IplImage(image)));
instead of
imwrite("test.jpg", image);
This is a known bug in the version you are using.
From the OpenCV 2.2 API:
The function imwrite saves the image to the specified file. The image format is chosen based on the filename extension, see imread for the list of extensions. Only 8-bit (or 16-bit in the case of PNG, JPEG 2000 and TIFF) single-channel or 3-channel (with ‘BGR’ channel order) images can be saved using this function. If the format, depth or channel order is different, use Mat::convertTo , and cvtColor to convert it before saving, or use the universal XML I/O functions to save the image to XML or YAML format.
You might have more luck converting your file to 8 or 16 bits before saving.
However, even with single channel 8 bit files I have had unknown extension errors trying to save jpg or png files but found that bmp works.
Very soon we are going to work on a project with open source s/w that does many things and one of the modules concerns with capturing live feed from a usb based camera for upto 48 hours and overwriting it in a nonstop loop. This would be going on in parallel with other operations in the application. We also have to display the captured feed of the least 48 hours to the user as a menu option.
I would like you all to suggest a suitable open source technology stack taking into account the audio/video part of the module, without this feature I can definitely use Qt to do my stuff but with this feature that becomes a difficult proposition. I have developed GUI applications with Qt on Linux platform but haven't been able to come up with something that can record and display video in an application. Qt has phonon but setting it up is a nightmare. Earlier some of you had suggest v4linux. I tried to compile the sample program capture.c on RHEL 4 machine and it gave the following errors.
usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:436: warning: no semicolon at end of struct or union
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:436: error: syntax error before '*' token
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:438: error: syntax error before '*' token
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:438: warning: data definition has no type or storage class
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:439: error: syntax error before '}' token
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:810: error: field `win' has incomplete type
So hit a dead end, besides I haven't come up with concrete workable examples for the same. Also the website isn't being updated frequently suggesting a stagnancy in development process.
Since the application will be graphical with menu based user interaction, it would need to use Qt or something similar to it for the graphical part. The headache is I haven't been able to figure out, how I can implement/integrate the video capture/display feature in a dummy application (my try was with Qt may be some of you have done it with some other library or language).
EDIT:
Was able to compile the program by importing a local copy of videodev2.h and adding define statement to include a __user macro. But now it won't run as it cannot find /dev/video device. So again stuck at a dead end in video4linux
You could try the FFmpeg family of libraries. As of fairly recently (I think), it also comes with the libavdevice library that supports V4L and V4L2 for video capture, and it shouldn't be very difficult to build a FFmpeg pipeline to read video from an avdevice source and write it using avcodec and avformat into a file...
gstreamer is a very capable multimedia stack for capturing, and pygst and PyQt4 bindings exist for use in Python.
If it said "can't find /dev/video", that is because Linux numbers the devices.
If you would have looked in the .c file you would have seen there were several arg_opts
as -d ... (where ... would become /dev/video0) or you can go in the .c file and add a 0 to /dev/video, you'll find it somewhere about line 590 in the beginning of int main.