Recherche avancée

Médias (0)

Mot : - Tags -/gis

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (70)

  • Amélioration de la version de base

    13 septembre 2013

    Jolie sélection multiple
    Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
    Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)

  • Le plugin : Gestion de la mutualisation

    2 mars 2010, par

    Le plugin de Gestion de mutualisation permet de gérer les différents canaux de mediaspip depuis un site maître. Il a pour but de fournir une solution pure SPIP afin de remplacer cette ancienne solution.
    Installation basique
    On installe les fichiers de SPIP sur le serveur.
    On ajoute ensuite le plugin "mutualisation" à la racine du site comme décrit ici.
    On customise le fichier mes_options.php central comme on le souhaite. Voilà pour l’exemple celui de la plateforme mediaspip.net :
    < ?php (...)

  • Gestion de la ferme

    2 mars 2010, par

    La ferme est gérée dans son ensemble par des "super admins".
    Certains réglages peuvent être fais afin de réguler les besoins des différents canaux.
    Dans un premier temps il utilise le plugin "Gestion de mutualisation"

Sur d’autres sites (7199)

  • Libavformat/FFMPEG : Muxing into mp4 with AVFormatContext drops the final frame, depending on the number of frames

    27 octobre 2020, par Galen Lynch

    I am trying to use libavformat to create a .mp4 video&#xA;with a single h.264 video stream, but the final frame in the resulting file&#xA;often has a duration of zero and is effectively dropped from the video.&#xA;Strangely enough, whether the final frame is dropped or not depends on how many&#xA;frames I try to add to the file. Some simple testing that I outline below makes&#xA;me think that I am somehow misconfiguring either the AVFormatContext or the&#xA;h.264 encoder, resulting in two edit lists that sometimes chop off the final&#xA;frame. I will also post a simplified version of the code I am using, in case I'm&#xA;making some obvious mistake. Any help would be greatly appreciated : I've been&#xA;struggling with this issue for the past few days and have made little progress.

    &#xA;

    I can recover the dropped frame by creating a new mp4 container using ffmpeg&#xA;binary with the copy codec if I use the -ignore_editlist option. Inspecting&#xA;the file with a missing frame using ffprobe, mp4trackdump, or mp4file --dump, shows that the final frame is dropped if its sample time is exactly the&#xA;same the end of the edit list. When I make a file that has no dropped frames, it&#xA;still has two edit lists : the only difference is that the end time of the edit&#xA;list is beyond all samples in files that do not have dropped frames. Though this&#xA;is hardly a fair comparison, if I make a .png for each frame and then generate&#xA;a .mp4 with ffmpeg using the image2 codec and similar h.264 settings, I&#xA;produce a movie with all frames present, only one edit list, and similar PTS&#xA;times as my mangled movies with two edit lists. In this case, the edit list&#xA;always ends after the last frame/sample time.

    &#xA;

    I am using this command to determine the number of frames in the resulting stream,&#xA;though I also get the same number with other utilities :

    &#xA;

    ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 video_file_name.mp4&#xA;

    &#xA;

    Simple inspection of the file with ffprobe shows no obviously alarming signs to&#xA;me, besides the framerate being affected by the missing frame (the target was&#xA;24) :

    &#xA;

    $ ffprobe -hide_banner testing.mp4&#xA;Input #0, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;testing.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : isom&#xA;    minor_version   : 512&#xA;    compatible_brands: isomiso2avc1mp41&#xA;    encoder         : Lavf58.45.100&#xA;  Duration: 00:00:04.13, start: 0.041016, bitrate: 724 kb/s&#xA;    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 100x100, 722 kb/s, 24.24 fps, 24 tbr, 12288 tbn, 48 tbc (default)&#xA;    Metadata:&#xA;      handler_name    : VideoHandler&#xA;

    &#xA;

    The files that I generate programatically always have two edit lists, one of&#xA;which is very short. In files both with and without a missing frame, the&#xA;duration one of the frames is 0, while all the others have the same duration&#xA;(512). You can see this in the ffmpeg output for this file that I tried to put&#xA;100 frames into, though only 99 are visible despite the file containing all 100&#xA;samples.

    &#xA;

    $ ffmpeg -hide_banner -y -v 9 -loglevel 99 -i testing.mp4  &#xA;...&#xA;<edited to="to" remove="remove" the="the" class="class" printing="printing">&#xA;type:&#x27;edts&#x27; parent:&#x27;trak&#x27; sz: 48 100 948&#xA;type:&#x27;elst&#x27; parent:&#x27;edts&#x27; sz: 40 8 40&#xA;track[0].edit_count = 2&#xA;duration=41 time=-1 rate=1.000000&#xA;duration=4125 time=0 rate=1.000000&#xA;type:&#x27;mdia&#x27; parent:&#x27;trak&#x27; sz: 808 148 948&#xA;type:&#x27;mdhd&#x27; parent:&#x27;mdia&#x27; sz: 32 8 800&#xA;type:&#x27;hdlr&#x27; parent:&#x27;mdia&#x27; sz: 45 40 800&#xA;ctype=[0][0][0][0]&#xA;stype=vide&#xA;type:&#x27;minf&#x27; parent:&#x27;mdia&#x27; sz: 723 85 800&#xA;type:&#x27;vmhd&#x27; parent:&#x27;minf&#x27; sz: 20 8 715&#xA;type:&#x27;dinf&#x27; parent:&#x27;minf&#x27; sz: 36 28 715&#xA;type:&#x27;dref&#x27; parent:&#x27;dinf&#x27; sz: 28 8 28&#xA;Unknown dref type 0x206c7275 size 12&#xA;type:&#x27;stbl&#x27; parent:&#x27;minf&#x27; sz: 659 64 715&#xA;type:&#x27;stsd&#x27; parent:&#x27;stbl&#x27; sz: 151 8 651&#xA;size=135 4CC=avc1 codec_type=0&#xA;type:&#x27;avcC&#x27; parent:&#x27;stsd&#x27; sz: 49 8 49&#xA;type:&#x27;stts&#x27; parent:&#x27;stbl&#x27; sz: 32 159 651&#xA;track[0].stts.entries = 2&#xA;sample_count=99, sample_duration=512&#xA;sample_count=1, sample_duration=0&#xA;...&#xA;AVIndex stream 0, sample 99, offset 5a0ed, dts 50688, size 3707, distance 0, keyframe 1&#xA;Processing st: 0, edit list 0 - media time: -1, duration: 504&#xA;Processing st: 0, edit list 1 - media time: 0, duration: 50688&#xA;type:&#x27;udta&#x27; parent:&#x27;moov&#x27; sz: 98 1072 1162&#xA;...&#xA;</edited>

    &#xA;

    The last frame has zero duration :

    &#xA;

    $ mp4trackdump -v testing.mp4&#xA;...&#xA;mp4file testing.mp4, track 1, samples 100, timescale 12288&#xA;sampleId      1, size  6943 duration      512 time        0 00:00:00.000 S&#xA;sampleId      2, size  3671 duration      512 time      512 00:00:00.041 S&#xA;...&#xA;sampleId     99, size  3687 duration      512 time    50176 00:00:04.083 S&#xA;sampleId    100, size  3707 duration        0 time    50688 00:00:04.125 S&#xA;

    &#xA;

    Non-mangled videos that I generate have similar structure, as you can see in&#xA;this video that had 99 input frames, all of which are visible in the output.&#xA;Even though the sample_duration is set to zero for one of the samples in the&#xA;stss box, it is not dropped from the frame count or when reading the frames back&#xA;in with ffmpeg.

    &#xA;

    $ ffmpeg -hide_banner -y -v 9 -loglevel 99 -i testing_99.mp4  &#xA;...&#xA;type:&#x27;elst&#x27; parent:&#x27;edts&#x27; sz: 40 8 40&#xA;track[0].edit_count = 2&#xA;duration=41 time=-1 rate=1.000000&#xA;duration=4084 time=0 rate=1.000000&#xA;...&#xA;track[0].stts.entries = 2&#xA;sample_count=98, sample_duration=512&#xA;sample_count=1, sample_duration=0&#xA;...&#xA;AVIndex stream 0, sample 98, offset 5d599, dts 50176, size 3833, distance 0, keyframe 1&#xA;Processing st: 0, edit list 0 - media time: -1, duration: 504&#xA;Processing st: 0, edit list 1 - media time: 0, duration: 50184&#xA;...&#xA;

    &#xA;

    $ mp4trackdump -v testing_99.mp4&#xA;...&#xA;sampleId     98, size  3814 duration      512 time    49664 00:00:04.041 S&#xA;sampleId     99, size  3833 duration        0 time    50176 00:00:04.083 S&#xA;

    &#xA;

    One difference that jumps out to me is that the mangled file's second edit list&#xA;ends at time 50688, which coincides with the last sample, while the non-mangled&#xA;file's edit list ends at 50184, which is after the time of the last sample&#xA;at 50176. As I mentioned before, whether the last frame is clipped depends on&#xA;the number of frames I encode and mux into the container : 100 input frames&#xA;results in 1 dropped frame, 99 results in 0, 98 in 0, 97 in 1, etc...

    &#xA;

    Here is the code that I used to generate these files, which is a MWE script&#xA;version of library functions that I am modifying. It is written in Julia,&#xA;which I do not think is important here, and calls the FFMPEG library version&#xA;4.3.1. It's more or less a direct translation from of the FFMPEG muxing&#xA;demo, although the codec&#xA;context here is created before the format context. I am presenting the code that&#xA;interacts with ffmpeg first, although it relies on some helper code that I will&#xA;put below.

    &#xA;

    The helper code just makes it easier to work with nested C structs in Julia, and&#xA;allows . syntax in Julia to be used in place of C's arrow (->) operator for&#xA;field access of struct pointers. Libav structs such as AVFrame appear as a&#xA;thin wrapper type AVFramePtr, and similarly AVStream appears as&#xA;AVStreamPtr etc... These act like single or double pointers for the purposes&#xA;of function calls, depending on the function's type signature. Hopefully it will&#xA;be clear enough to understand if you are familiar with working with libav in C,&#xA;and I don't think looking at the helper code should be necessary if you don't&#xA;want to run the code.

    &#xA;

    # Function to transfer array to AVPicture/AVFrame&#xA;function transfer_img_buf_to_frame!(frame, img)&#xA;    img_pointer = pointer(img)&#xA;    data_pointer = frame.data[1] # Base-1 indexing, get pointer to first data buffer in frame&#xA;    for h = 1:frame.height&#xA;        data_line_pointer = data_pointer &#x2B; (h-1) * frame.linesize[1] # base-1 indexing&#xA;        img_line_pointer = img_pointer &#x2B; (h-1) * frame.width&#xA;        unsafe_copyto!(data_line_pointer, img_line_pointer, frame.width) # base-1 indexing&#xA;    end&#xA;end&#xA;&#xA;# Function to transfer AVFrame to AVCodecContext, and AVPacket to AVFormatContext&#xA;function encode_mux!(packet, format_context, frame, codec_context; flush = false)&#xA;    if flush&#xA;        fret = avcodec_send_frame(codec_context, C_NULL)&#xA;    else&#xA;        fret = avcodec_send_frame(codec_context, frame)&#xA;    end&#xA;    if fret &lt; 0 &amp;&amp; !in(fret, [-Libc.EAGAIN, VIO_AVERROR_EOF])&#xA;        error("Error $fret sending a frame for encoding")&#xA;    end&#xA;&#xA;    pret = Cint(0)&#xA;    while pret >= 0&#xA;        pret = avcodec_receive_packet(codec_context, packet)&#xA;        if pret == -Libc.EAGAIN || pret == VIO_AVERROR_EOF&#xA;             break&#xA;        elseif pret &lt; 0&#xA;            error("Error $pret during encoding")&#xA;        end&#xA;        stream = format_context.streams[1] # Base-1 indexing&#xA;        av_packet_rescale_ts(packet, codec_context.time_base, stream.time_base)&#xA;        packet.stream_index = 0&#xA;        ret = av_interleaved_write_frame(format_context, packet)&#xA;        ret &lt; 0 &amp;&amp; error("Error muxing packet: $ret")&#xA;    end&#xA;    if !flush &amp;&amp; fret == -Libc.EAGAIN &amp;&amp; pret != VIO_AVERROR_EOF&#xA;        fret = avcodec_send_frame(codec_context, frame)&#xA;        if fret &lt; 0 &amp;&amp; fret != VIO_AVERROR_EOF&#xA;            error("Error $fret sending a frame for encoding")&#xA;        end&#xA;    end&#xA;    return pret&#xA;end&#xA;&#xA;# Set parameters of test movie&#xA;nframe = 100&#xA;width, height = 100, 100&#xA;framerate = 24&#xA;gop = 0&#xA;codec_name = "libx264"&#xA;filename = "testing.mp4"&#xA;&#xA;((width % 2 !=0) || (height % 2 !=0)) &amp;&amp; error("Encoding error: Image dims must be a multiple of two")&#xA;&#xA;# Make test images&#xA;imgstack = map(x->rand(UInt8,width,height),1:nframe);&#xA;&#xA;pix_fmt = AV_PIX_FMT_GRAY8&#xA;framerate_rat = Rational(framerate)&#xA;&#xA;codec = avcodec_find_encoder_by_name(codec_name)&#xA;codec == C_NULL &amp;&amp; error("Codec &#x27;$codec_name&#x27; not found")&#xA;&#xA;# Allocate AVCodecContext&#xA;codec_context_p = avcodec_alloc_context3(codec) # raw pointer&#xA;codec_context_p == C_NULL &amp;&amp; error("Could not allocate AVCodecContext")&#xA;# Easier to work with pointer that acts like a c struct pointer, type defined below&#xA;codec_context = AVCodecContextPtr(codec_context_p)&#xA;&#xA;codec_context.width = width&#xA;codec_context.height = height&#xA;codec_context.time_base = AVRational(1/framerate_rat)&#xA;codec_context.framerate = AVRational(framerate_rat)&#xA;codec_context.pix_fmt = pix_fmt&#xA;codec_context.gop_size = gop&#xA;&#xA;ret = avcodec_open2(codec_context, codec, C_NULL)&#xA;ret &lt; 0 &amp;&amp; error("Could not open codec: Return code $(ret)")&#xA;&#xA;# Allocate AVFrame and wrap it in a Julia convenience type&#xA;frame_p = av_frame_alloc()&#xA;frame_p == C_NULL &amp;&amp; error("Could not allocate AVFrame")&#xA;frame = AVFramePtr(frame_p)&#xA;&#xA;frame.format = pix_fmt&#xA;frame.width = width&#xA;frame.height = height&#xA;&#xA;# Allocate picture buffers for frame&#xA;ret = av_frame_get_buffer(frame, 0)&#xA;ret &lt; 0 &amp;&amp; error("Could not allocate the video frame data")&#xA;&#xA;# Allocate AVPacket and wrap it in a Julia convenience type&#xA;packet_p = av_packet_alloc()&#xA;packet_p == C_NULL &amp;&amp; error("Could not allocate AVPacket")&#xA;packet = AVPacketPtr(packet_p)&#xA;&#xA;# Allocate AVFormatContext and wrap it in a Julia convenience type&#xA;format_context_dp = Ref(Ptr{AVFormatContext}()) # double pointer&#xA;ret = avformat_alloc_output_context2(format_context_dp, C_NULL, C_NULL, filename)&#xA;if ret != 0 || format_context_dp[] == C_NULL&#xA;    error("Could not allocate AVFormatContext")&#xA;end&#xA;format_context = AVFormatContextPtr(format_context_dp)&#xA;&#xA;# Add video stream to AVFormatContext and configure it to use the encoder made above&#xA;stream_p = avformat_new_stream(format_context, C_NULL)&#xA;stream_p == C_NULL &amp;&amp; error("Could not allocate output stream")&#xA;stream = AVStreamPtr(stream_p) # Wrap this pointer in a convenience type&#xA;&#xA;stream.time_base = codec_context.time_base&#xA;stream.avg_frame_rate = 1 / convert(Rational, stream.time_base)&#xA;ret = avcodec_parameters_from_context(stream.codecpar, codec_context)&#xA;ret &lt; 0 &amp;&amp; error("Could not set parameters of stream")&#xA;&#xA;# Open the AVIOContext&#xA;pb_ptr = field_ptr(format_context, :pb)&#xA;# This following is just a call to avio_open, with a bit of extra protection&#xA;# so the Julia garbage collector does not destroy format_context during the call&#xA;ret = GC.@preserve format_context avio_open(pb_ptr, filename, AVIO_FLAG_WRITE)&#xA;ret &lt; 0 &amp;&amp; error("Could not open file $filename for writing")&#xA;&#xA;# Write the header&#xA;ret = avformat_write_header(format_context, C_NULL)&#xA;ret &lt; 0 &amp;&amp; error("Could not write header")&#xA;&#xA;# Encode and mux each frame&#xA;for i in 1:nframe # iterate from 1 to nframe&#xA;    img = imgstack[i] # base-1 indexing&#xA;    ret = av_frame_make_writable(frame)&#xA;    ret &lt; 0 &amp;&amp; error("Could not make frame writable")&#xA;    transfer_img_buf_to_frame!(frame, img)&#xA;    frame.pts = i&#xA;    encode_mux!(packet, format_context, frame, codec_context)&#xA;end&#xA;&#xA;# Flush the encoder&#xA;encode_mux!(packet, format_context, frame, codec_context; flush = true)&#xA;&#xA;# Write the trailer&#xA;av_write_trailer(format_context)&#xA;&#xA;# Close the AVIOContext&#xA;pb_ptr = field_ptr(format_context, :pb) # get pointer to format_context.pb&#xA;ret = GC.@preserve format_context avio_closep(pb_ptr) # simply a call to avio_closep&#xA;ret &lt; 0 &amp;&amp; error("Could not free AVIOContext")&#xA;&#xA;# Deallocation&#xA;avcodec_free_context(codec_context)&#xA;av_frame_free(frame)&#xA;av_packet_free(packet)&#xA;avformat_free_context(format_context)&#xA;

    &#xA;

    Below is the helper code that makes accessing pointers to nested c structs not a&#xA;total pain in Julia. If you try to run the code yourself, please enter this in&#xA;before the logic of the code shown above. It requires&#xA;VideoIO.jl, a Julia wrapper to libav.

    &#xA;

    # Convenience type and methods to make the above code look more like C&#xA;using Base: RefValue, fieldindex&#xA;&#xA;import Base: unsafe_convert, getproperty, setproperty!, getindex, setindex!,&#xA;    unsafe_wrap, propertynames&#xA;&#xA;# VideoIO is a Julia wrapper to libav&#xA;#&#xA;# Bring bindings to libav library functions into namespace&#xA;using VideoIO: AVCodecContext, AVFrame, AVPacket, AVFormatContext, AVRational,&#xA;    AVStream, AV_PIX_FMT_GRAY8, AVIO_FLAG_WRITE, AVFMT_NOFILE,&#xA;    avformat_alloc_output_context2, avformat_free_context, avformat_new_stream,&#xA;    av_dump_format, avio_open, avformat_write_header,&#xA;    avcodec_parameters_from_context, av_frame_make_writable, avcodec_send_frame,&#xA;    avcodec_receive_packet, av_packet_rescale_ts, av_interleaved_write_frame,&#xA;    avformat_query_codec, avcodec_find_encoder_by_name, avcodec_alloc_context3,&#xA;    avcodec_open2, av_frame_alloc, av_frame_get_buffer, av_packet_alloc,&#xA;    avio_closep, av_write_trailer, avcodec_free_context, av_frame_free,&#xA;    av_packet_free&#xA;&#xA;# Submodule of VideoIO&#xA;using VideoIO: AVCodecs&#xA;&#xA;# Need to import this function from Julia&#x27;s Base to add more methods&#xA;import Base: convert&#xA;&#xA;const VIO_AVERROR_EOF = -541478725 # AVERROR_EOF&#xA;&#xA;# Methods to convert between AVRational and Julia&#x27;s Rational type, because it&#x27;s&#xA;# hard to access the AV rational macros with Julia&#x27;s C interface&#xA;convert(::Type{Rational{T}}, r::AVRational) where T = Rational{T}(r.num, r.den)&#xA;convert(::Type{Rational}, r::AVRational) = Rational(r.num, r.den)&#xA;convert(::Type{AVRational}, r::Rational) = AVRational(numerator(r), denominator(r))&#xA;&#xA;"""&#xA;    mutable struct NestedCStruct{T}&#xA;&#xA;Wraps a pointer to a C struct, and acts like a double pointer to that memory.&#xA;The methods below will automatically convert it to a single pointer if needed&#xA;for a function call, and make interacting with it in Julia look (more) similar&#xA;to interacting with it in C, except &#x27;->&#x27; in C is replaced by &#x27;.&#x27; in Julia.&#xA;"""&#xA;mutable struct NestedCStruct{T}&#xA;    data::RefValue{Ptr{T}}&#xA;end&#xA;NestedCStruct{T}(a::Ptr) where T = NestedCStruct{T}(Ref(a))&#xA;NestedCStruct(a::Ptr{T}) where T = NestedCStruct{T}(a)&#xA;&#xA;const AVCodecContextPtr = NestedCStruct{AVCodecContext}&#xA;const AVFramePtr = NestedCStruct{AVFrame}&#xA;const AVPacketPtr = NestedCStruct{AVPacket}&#xA;const AVFormatContextPtr = NestedCStruct{AVFormatContext}&#xA;const AVStreamPtr = NestedCStruct{AVStream}&#xA;&#xA;function field_ptr(::Type{S}, struct_pointer::Ptr{T}, field::Symbol,&#xA;                           index::Integer = 1) where {S,T}&#xA;    fieldpos = fieldindex(T, field)&#xA;    field_pointer = convert(Ptr{S}, struct_pointer) &#x2B;&#xA;        fieldoffset(T, fieldpos) &#x2B; (index - 1) * sizeof(S)&#xA;    return field_pointer&#xA;end&#xA;&#xA;field_ptr(a::Ptr{T}, field::Symbol, args...) where T =&#xA;    field_ptr(fieldtype(T, field), a, field, args...)&#xA;&#xA;function check_ptr_valid(p::Ptr, err::Bool = true)&#xA;    valid = p != C_NULL&#xA;    err &amp;&amp; !valid &amp;&amp; error("Invalid pointer")&#xA;    valid&#xA;end&#xA;&#xA;unsafe_convert(::Type{Ptr{T}}, ap::NestedCStruct{T}) where T =&#xA;    getfield(ap, :data)[]&#xA;unsafe_convert(::Type{Ptr{Ptr{T}}}, ap::NestedCStruct{T}) where T =&#xA;    unsafe_convert(Ptr{Ptr{T}}, getfield(ap, :data))&#xA;&#xA;function check_ptr_valid(a::NestedCStruct{T}, args...) where T&#xA;    p = unsafe_convert(Ptr{T}, a)&#xA;    GC.@preserve a check_ptr_valid(p, args...)&#xA;end&#xA;&#xA;nested_wrap(x::Ptr{T}) where T = NestedCStruct(x)&#xA;nested_wrap(x) = x&#xA;&#xA;function getproperty(ap::NestedCStruct{T}, s::Symbol) where T&#xA;    check_ptr_valid(ap)&#xA;    p = unsafe_convert(Ptr{T}, ap)&#xA;    res = GC.@preserve ap unsafe_load(field_ptr(p, s))&#xA;    nested_wrap(res)&#xA;end&#xA;&#xA;function setproperty!(ap::NestedCStruct{T}, s::Symbol, x) where T&#xA;    check_ptr_valid(ap)&#xA;    p = unsafe_convert(Ptr{T}, ap)&#xA;    fp = field_ptr(p, s)&#xA;    GC.@preserve ap unsafe_store!(fp, x)&#xA;end&#xA;&#xA;function getindex(ap::NestedCStruct{T}, i::Integer) where T&#xA;    check_ptr_valid(ap)&#xA;    p = unsafe_convert(Ptr{T}, ap)&#xA;    res = GC.@preserve ap unsafe_load(p, i)&#xA;    nested_wrap(res)&#xA;end&#xA;&#xA;function setindex!(ap::NestedCStruct{T}, i::Integer, x) where T&#xA;    check_ptr_valid(ap)&#xA;    p = unsafe_convert(Ptr{T}, ap)&#xA;    GC.@preserve ap unsafe_store!(p, x, i)&#xA;end&#xA;&#xA;function unsafe_wrap(::Type{T}, ap::NestedCStruct{S}, i) where {S, T}&#xA;    check_ptr_valid(ap)&#xA;    p = unsafe_convert(Ptr{S}, ap)&#xA;    GC.@preserve ap unsafe_wrap(T, p, i)&#xA;end&#xA;&#xA;function field_ptr(::Type{S}, a::NestedCStruct{T}, field::Symbol,&#xA;                           args...) where {S, T}&#xA;    check_ptr_valid(a)&#xA;    p = unsafe_convert(Ptr{T}, a)&#xA;    GC.@preserve a field_ptr(S, p, field, args...)&#xA;end&#xA;&#xA;field_ptr(a::NestedCStruct{T}, field::Symbol, args...) where T =&#xA;    field_ptr(fieldtype(T, field), a, field, args...)&#xA;&#xA;propertynames(ap::T) where {S, T&lt;:NestedCStruct{S}} = (fieldnames(S)...,&#xA;                                                       fieldnames(T)...)&#xA;

    &#xA;


    &#xA;

    Edit : Some things that I have already tried

    &#xA;

      &#xA;
    • Explicitly setting the stream duration to be the same number as the number of frames that I add, or a few more beyond that
    • &#xA;

    • Explicitly setting the stream start time to zero, while the first frame has a PTS of 1
    • &#xA;

    • Playing around with encoder parameters, as well as gop_size, using B frames, etc.
    • &#xA;

    • Setting the private data for the mov/mp4 muxer to set the movflag negative_cts_offsets
    • &#xA;

    • Changing the framerate
    • &#xA;

    • Tried different pixel formats, such as AV_PIX_FMT_YUV420P
    • &#xA;

    &#xA;

    Also to be clear while I can just transfer the file into another while ignoring the edit lists to work around this problem, I am hoping to not make damaged mp4 files in the first place.

    &#xA;

  • Does anybody have experience in embedding ffmpeg in a macOS application for the App Store ? Has anybody had his application rejected for this reason ?

    31 octobre 2020, par Alfonso Tesauro

    I am developing a tool for macOS that needs some basic audio editing, and the simplest way to achieve this is to embed ffmpeg in the application binary and call it with NSTask. Of course, I resigned ffmpeg with my identity and the entitlements to inherit the host application's sandbox. Has anybody tried this with success ? Any help is greatly appreciated. Thanks

    &#xA;

  • FFMPEG on Windows Server "Unknown encoder 'libfaac'" [duplicate]

    18 novembre 2020, par Jonathan

    I am doing this on a Windows server and is not already answered as per the other question on here on a Linux server.

    &#xA;

    Im using FFMPEG on a project handling video uploads and I keep getting an issue with Videos with AAC audio encoding.

    &#xA;

    I tried using aac and other aac encoders, but the windows version of FFMPEG says unknown encoders. I tried without setting an AudioCode so it might convert to native. But still the same.

    &#xA;

    Please see the log output below :

    &#xA;

    <pre>object(FFMpeg\Exception\RuntimeException)#35 (7) {&#xA;  ["message":protected]=>&#xA;  string(15) "Encoding failed"&#xA;  ["string":"Exception":private]=>&#xA;  string(0) ""&#xA;  ["code":protected]=>&#xA;  int(0)&#xA;  ["file":protected]=>&#xA;  string(108) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\Media\AbstractVideo.php"&#xA;  ["line":protected]=>&#xA;  int(106)&#xA;  ["trace":"Exception":private]=>&#xA;  array(1) {&#xA;    [0]=>&#xA;    array(5) {&#xA;      ["file"]=>&#xA;      string(45) "C:\inetpub\wwwroot\dev\ffmpeg-lib\process.php"&#xA;      ["line"]=>&#xA;      int(35)&#xA;      ["function"]=>&#xA;      string(4) "save"&#xA;      ["class"]=>&#xA;      string(26) "FFMpeg\Media\AbstractVideo"&#xA;      ["type"]=>&#xA;      string(2) "->"&#xA;    }&#xA;  }&#xA;  ["previous":"Exception":private]=>&#xA;  object(Alchemy\BinaryDriver\Exception\ExecutionFailureException)#43 (9) {&#xA;    ["command":protected]=>&#xA;    string(397) "C:\ffmpeg\bin\ffmpeg.exe -y -ss 00:00:17.00 -i "temp/temp_20201110-100656_1080p-220mb.mp4" -t 00:00:52.00 -threads 12 -vcodec libx264 -acodec libfaac -b:v 1000k -refs 6 -coder 1 -sc_threshold 40 -flags &#x2B;loop -me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -trellis 1 -b:a 128k -pass 1 -passlogfile "W:/TempIIS\ffmpeg-passes5fabd88bb6b0912dmm/pass-5fabd88bb6c3b" "temp/20201111-122651.mp4""&#xA;    ["errorOutput":protected]=>&#xA;    string(2301) "ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 10.2.1 (GCC) 20200805&#xA;  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --enable-libsvtav1 --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf&#xA;  libavutil      56. 58.100 / 56. 58.100&#xA;  libavcodec     58.101.101 / 58.101.101&#xA;  libavformat    58. 51.101 / 58. 51.101&#xA;  libavdevice    58. 11.101 / 58. 11.101&#xA;  libavfilter     7. 87.100 /  7. 87.100&#xA;  libswscale      5.  8.100 /  5.  8.100&#xA;  libswresample   3.  8.100 /  3.  8.100&#xA;  libpostproc    55.  8.100 / 55.  8.100&#xA;Input #0, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;temp/temp_20201110-100656_1080p-220mb.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : mp42&#xA;    minor_version   : 19529854&#xA;    compatible_brands: mp42isom&#xA;    creation_time   : 2016-04-11T06:32:53.000000Z&#xA;  Duration: 00:02:25.98, start: 0.000000, bitrate: 13772 kb/s&#xA;    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Sound Media Handler&#xA;    Stream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 13639 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Video Media Handler&#xA;      encoder         : AVC Coding&#xA;Unknown encoder &#x27;libfaac&#x27;&#xA;"&#xA;    ["message":protected]=>&#xA;    string(2750) "ffmpeg failed to execute command C:\ffmpeg\bin\ffmpeg.exe -y -ss 00:00:17.00 -i "temp/temp_20201110-100656_1080p-220mb.mp4" -t 00:00:52.00 -threads 12 -vcodec libx264 -acodec libfaac -b:v 1000k -refs 6 -coder 1 -sc_threshold 40 -flags &#x2B;loop -me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -trellis 1 -b:a 128k -pass 1 -passlogfile "W:/TempIIS\ffmpeg-passes5fabd88bb6b0912dmm/pass-5fabd88bb6c3b" "temp/20201111-122651.mp4":&#xA;&#xA;Error Output:&#xA;&#xA; ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 10.2.1 (GCC) 20200805&#xA;  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --enable-libsvtav1 --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf&#xA;  libavutil      56. 58.100 / 56. 58.100&#xA;  libavcodec     58.101.101 / 58.101.101&#xA;  libavformat    58. 51.101 / 58. 51.101&#xA;  libavdevice    58. 11.101 / 58. 11.101&#xA;  libavfilter     7. 87.100 /  7. 87.100&#xA;  libswscale      5.  8.100 /  5.  8.100&#xA;  libswresample   3.  8.100 /  3.  8.100&#xA;  libpostproc    55.  8.100 / 55.  8.100&#xA;Input #0, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;temp/temp_20201110-100656_1080p-220mb.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : mp42&#xA;    minor_version   : 19529854&#xA;    compatible_brands: mp42isom&#xA;    creation_time   : 2016-04-11T06:32:53.000000Z&#xA;  Duration: 00:02:25.98, start: 0.000000, bitrate: 13772 kb/s&#xA;    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Sound Media Handler&#xA;    Stream #0:1(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 13639 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)&#xA;    Metadata:&#xA;      creation_time   : 2016-04-11T06:32:53.000000Z&#xA;      handler_name    : Video Media Handler&#xA;      encoder         : AVC Coding&#xA;Unknown encoder &#x27;libfaac&#x27;&#xA;"&#xA;    ["string":"Exception":private]=>&#xA;    string(0) ""&#xA;    ["code":protected]=>&#xA;    int(0)&#xA;    ["file":protected]=>&#xA;    string(116) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\ProcessRunner.php"&#xA;    ["line":protected]=>&#xA;    int(95)&#xA;    ["trace":"Exception":private]=>&#xA;    array(5) {&#xA;      [0]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(116) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\ProcessRunner.php"&#xA;        ["line"]=>&#xA;        int(73)&#xA;        ["function"]=>&#xA;        string(18) "doExecutionFailure"&#xA;        ["class"]=>&#xA;        string(34) "Alchemy\BinaryDriver\ProcessRunner"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;      [1]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(117) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\AbstractBinary.php"&#xA;        ["line"]=>&#xA;        int(207)&#xA;        ["function"]=>&#xA;        string(3) "run"&#xA;        ["class"]=>&#xA;        string(34) "Alchemy\BinaryDriver\ProcessRunner"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;      [2]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(117) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\AbstractBinary.php"&#xA;        ["line"]=>&#xA;        int(136)&#xA;        ["function"]=>&#xA;        string(3) "run"&#xA;        ["class"]=>&#xA;        string(35) "Alchemy\BinaryDriver\AbstractBinary"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;      [3]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(108) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\Media\AbstractVideo.php"&#xA;        ["line"]=>&#xA;        int(96)&#xA;        ["function"]=>&#xA;        string(7) "command"&#xA;        ["class"]=>&#xA;        string(35) "Alchemy\BinaryDriver\AbstractBinary"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;      [4]=>&#xA;      array(5) {&#xA;        ["file"]=>&#xA;        string(45) "C:\inetpub\wwwroot\dev\ffmpeg-lib\process.php"&#xA;        ["line"]=>&#xA;        int(35)&#xA;        ["function"]=>&#xA;        string(4) "save"&#xA;        ["class"]=>&#xA;        string(26) "FFMpeg\Media\AbstractVideo"&#xA;        ["type"]=>&#xA;        string(2) "->"&#xA;      }&#xA;    }&#xA;    ["previous":"Exception":private]=>&#xA;    NULL&#xA;  }&#xA;}&#xA;</pre>

    &#xA;

    Output of ffmpeg -encoders

    &#xA;

         V..... a64multi             Multicolor charset for Commodore 64 (codec a64_multi)&#xA; V..... a64multi5            Multicolor charset for Commodore 64, extended with 5th color (colram) (codec a64_multi5)&#xA; V..... alias_pix            Alias/Wavefront PIX image&#xA; V..... amv                  AMV Video&#xA; V..... apng                 APNG (Animated Portable Network Graphics) image&#xA; V..... asv1                 ASUS V1&#xA; V..... asv2                 ASUS V2&#xA; V..... libaom-av1           libaom AV1 (codec av1)&#xA; V..... librav1e             librav1e AV1 (codec av1)&#xA; V..... libsvtav1            SVT-AV1(Scalable Video Technology for AV1) encoder (codec av1)&#xA; V..... avrp                 Avid 1:1 10-bit RGB Packer&#xA; V..X.. avui                 Avid Meridien Uncompressed&#xA; V..... ayuv                 Uncompressed packed MS 4:4:4:4&#xA; V..... bmp                  BMP (Windows and OS/2 bitmap)&#xA; VF.... cfhd                 GoPro CineForm HD&#xA; V..... cinepak              Cinepak&#xA; V..... cljr                 Cirrus Logic AccuPak&#xA; V.S... vc2                  SMPTE VC-2 (codec dirac)&#xA; VFS... dnxhd                VC3/DNxHD&#xA; V..... dpx                  DPX (Digital Picture Exchange) image&#xA; VFS... dvvideo              DV (Digital Video)&#xA; V.S... ffv1                 FFmpeg video codec #1&#xA; VF.... ffvhuff              Huffyuv FFmpeg variant&#xA; V..... fits                 Flexible Image Transport System&#xA; V..... flashsv              Flash Screen Video&#xA; V..... flashsv2             Flash Screen Video Version 2&#xA; V..... flv                  FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1)&#xA; V..... gif                  GIF (Graphics Interchange Format)&#xA; V..... h261                 H.261&#xA; V..... h263                 H.263 / H.263-1996&#xA; V.S... h263p                H.263&#x2B; / H.263-1998 / H.263 version 2&#xA; V..... libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)&#xA; V..... libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)&#xA; V..... h264_amf             AMD AMF H.264 Encoder (codec h264)&#xA; V..... h264_mf              H264 via MediaFoundation (codec h264)&#xA; V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)&#xA; V..... h264_qsv             H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)&#xA; V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)&#xA; V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)&#xA; V..... hap                  Vidvox Hap&#xA; V..... libx265              libx265 H.265 / HEVC (codec hevc)&#xA; V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)&#xA; V..... hevc_amf             AMD AMF HEVC encoder (codec hevc)&#xA; V..... hevc_mf              HEVC via MediaFoundation (codec hevc)&#xA; V..... hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)&#xA; V..... hevc_qsv             HEVC (Intel Quick Sync Video acceleration) (codec hevc)&#xA; VF.... huffyuv              Huffyuv / HuffYUV&#xA; V..... jpeg2000             JPEG 2000&#xA; VF.... libopenjpeg          OpenJPEG JPEG 2000 (codec jpeg2000)&#xA; VF.... jpegls               JPEG-LS&#xA; VF.... ljpeg                Lossless JPEG&#xA; VF.... magicyuv             MagicYUV video&#xA; VFS... mjpeg                MJPEG (Motion JPEG)&#xA; V..... mjpeg_qsv            MJPEG (Intel Quick Sync Video acceleration) (codec mjpeg)&#xA; V.S... mpeg1video           MPEG-1 video&#xA; V.S... mpeg2video           MPEG-2 video&#xA; V..... mpeg2_qsv            MPEG-2 video (Intel Quick Sync Video acceleration) (codec mpeg2video)&#xA; V.S... mpeg4                MPEG-4 part 2&#xA; V..... libxvid              libxvidcore MPEG-4 part 2 (codec mpeg4)&#xA; V..... msmpeg4v2            MPEG-4 part 2 Microsoft variant version 2&#xA; V..... msmpeg4              MPEG-4 part 2 Microsoft variant version 3 (codec msmpeg4v3)&#xA; V..... msvideo1             Microsoft Video-1&#xA; V..... pam                  PAM (Portable AnyMap) image&#xA; V..... pbm                  PBM (Portable BitMap) image&#xA; V..... pcx                  PC Paintbrush PCX image&#xA; V..... pgm                  PGM (Portable GrayMap) image&#xA; V..... pgmyuv               PGMYUV (Portable GrayMap YUV) image&#xA; VF.... png                  PNG (Portable Network Graphics) image&#xA; V..... ppm                  PPM (Portable PixelMap) image&#xA; VF.... prores               Apple ProRes&#xA; VF.... prores_aw            Apple ProRes (codec prores)&#xA; VFS... prores_ks            Apple ProRes (iCodec Pro) (codec prores)&#xA; V..... qtrle                QuickTime Animation (RLE) video&#xA; V..... r10k                 AJA Kona 10-bit RGB Codec&#xA; V..... r210                 Uncompressed RGB 10-bit&#xA; V..... rawvideo             raw video&#xA; V..... roqvideo             id RoQ video (codec roq)&#xA; V..... rpza                 QuickTime video (RPZA)&#xA; V..... rv10                 RealVideo 1.0&#xA; V..... rv20                 RealVideo 2.0&#xA; V..... sgi                  SGI image&#xA; V..... snow                 Snow&#xA; V..... sunrast              Sun Rasterfile image&#xA; V..... svq1                 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1&#xA; V..... targa                Truevision Targa image&#xA; V..... libtheora            libtheora Theora (codec theora)&#xA; VF.... tiff                 TIFF image&#xA; VF.... utvideo              Ut Video&#xA; V..... v210                 Uncompressed 4:2:2 10-bit&#xA; V..... v308                 Uncompressed packed 4:4:4&#xA; V..... v408                 Uncompressed packed QT 4:4:4:4&#xA; V..... v410                 Uncompressed 4:4:4 10-bit&#xA; V..... libvpx               libvpx VP8 (codec vp8)&#xA; V..... libvpx-vp9           libvpx VP9 (codec vp9)&#xA; V..... vp9_qsv              VP9 video (Intel Quick Sync Video acceleration) (codec vp9)&#xA; V..... libwebp_anim         libwebp WebP image (codec webp)&#xA; V..... libwebp              libwebp WebP image (codec webp)&#xA; V..... wmv1                 Windows Media Video 7&#xA; V..... wmv2                 Windows Media Video 8&#xA; V..... wrapped_avframe      AVFrame to AVPacket passthrough&#xA; V..... xbm                  XBM (X BitMap) image&#xA; V..... xface                X-face image&#xA; V..... xwd                  XWD (X Window Dump) image&#xA; V..... y41p                 Uncompressed YUV 4:1:1 12-bit&#xA; V..... yuv4                 Uncompressed packed 4:2:0&#xA; VF.... zlib                 LCL (LossLess Codec Library) ZLIB&#xA; V..... zmbv                 Zip Motion Blocks Video&#xA; A..... aac                  AAC (Advanced Audio Coding)&#xA; A..... aac_mf               AAC via MediaFoundation (codec aac)&#xA; A..... ac3                  ATSC A/52A (AC-3)&#xA; A..... ac3_fixed            ATSC A/52A (AC-3) (codec ac3)&#xA; A..... ac3_mf               AC3 via MediaFoundation (codec ac3)&#xA; A..... adpcm_adx            SEGA CRI ADX ADPCM&#xA; A..... adpcm_argo           ADPCM Argonaut Games&#xA; A..... g722                 G.722 ADPCM (codec adpcm_g722)&#xA; A..... g726                 G.726 ADPCM (codec adpcm_g726)&#xA; A..... g726le               G.726 little endian ADPCM ("right-justified") (codec adpcm_g726le)&#xA; A..... adpcm_ima_apm        ADPCM IMA Ubisoft APM&#xA; A..... adpcm_ima_qt         ADPCM IMA QuickTime&#xA; A..... adpcm_ima_ssi        ADPCM IMA Simon &amp; Schuster Interactive&#xA; A..... adpcm_ima_wav        ADPCM IMA WAV&#xA; A..... adpcm_ms             ADPCM Microsoft&#xA; A..... adpcm_swf            ADPCM Shockwave Flash&#xA; A..... adpcm_yamaha         ADPCM Yamaha&#xA; A..... alac                 ALAC (Apple Lossless Audio Codec)&#xA; A..... libopencore_amrnb    OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb)&#xA; A..... libvo_amrwbenc       Android VisualOn AMR-WB (Adaptive Multi-Rate Wide-Band) (codec amr_wb)&#xA; A..... aptx                 aptX (Audio Processing Technology for Bluetooth)&#xA; A..... aptx_hd              aptX HD (Audio Processing Technology for Bluetooth)&#xA; A..... comfortnoise         RFC 3389 comfort noise generator&#xA; A..X.. dca                  DCA (DTS Coherent Acoustics) (codec dts)&#xA; A..... eac3                 ATSC A/52 E-AC-3&#xA; A..... flac                 FLAC (Free Lossless Audio Codec)&#xA; A..... g723_1               G.723.1&#xA; A..... libgsm               libgsm GSM (codec gsm)&#xA; A..... libgsm_ms            libgsm GSM Microsoft variant (codec gsm_ms)&#xA; A..X.. mlp                  MLP (Meridian Lossless Packing)&#xA; A..... mp2                  MP2 (MPEG audio layer 2)&#xA; A..... mp2fixed             MP2 fixed point (MPEG audio layer 2) (codec mp2)&#xA; A..... libtwolame           libtwolame MP2 (MPEG audio layer 2) (codec mp2)&#xA; A..... libmp3lame           libmp3lame MP3 (MPEG audio layer 3) (codec mp3)&#xA; A..... libshine             libshine MP3 (MPEG audio layer 3) (codec mp3)&#xA; A..... mp3_mf               MP3 via MediaFoundation (codec mp3)&#xA; A..... nellymoser           Nellymoser Asao&#xA; A..X.. opus                 Opus&#xA; A..... libopus              libopus Opus (codec opus)&#xA; A..... pcm_alaw             PCM A-law / G.711 A-law&#xA; A..... pcm_dvd              PCM signed 16|20|24-bit big-endian for DVD media&#xA; A..... pcm_f32be            PCM 32-bit floating point big-endian&#xA; A..... pcm_f32le            PCM 32-bit floating point little-endian&#xA; A..... pcm_f64be            PCM 64-bit floating point big-endian&#xA; A..... pcm_f64le            PCM 64-bit floating point little-endian&#xA; A..... pcm_mulaw            PCM mu-law / G.711 mu-law&#xA; A..... pcm_s16be            PCM signed 16-bit big-endian&#xA; A..... pcm_s16be_planar     PCM signed 16-bit big-endian planar&#xA; A..... pcm_s16le            PCM signed 16-bit little-endian&#xA; A..... pcm_s16le_planar     PCM signed 16-bit little-endian planar&#xA; A..... pcm_s24be            PCM signed 24-bit big-endian&#xA; A..... pcm_s24daud          PCM D-Cinema audio signed 24-bit&#xA; A..... pcm_s24le            PCM signed 24-bit little-endian&#xA; A..... pcm_s24le_planar     PCM signed 24-bit little-endian planar&#xA; A..... pcm_s32be            PCM signed 32-bit big-endian&#xA; A..... pcm_s32le            PCM signed 32-bit little-endian&#xA; A..... pcm_s32le_planar     PCM signed 32-bit little-endian planar&#xA; A..... pcm_s64be            PCM signed 64-bit big-endian&#xA; A..... pcm_s64le            PCM signed 64-bit little-endian&#xA; A..... pcm_s8               PCM signed 8-bit&#xA; A..... pcm_s8_planar        PCM signed 8-bit planar&#xA; A..... pcm_u16be            PCM unsigned 16-bit big-endian&#xA; A..... pcm_u16le            PCM unsigned 16-bit little-endian&#xA; A..... pcm_u24be            PCM unsigned 24-bit big-endian&#xA; A..... pcm_u24le            PCM unsigned 24-bit little-endian&#xA; A..... pcm_u32be            PCM unsigned 32-bit big-endian&#xA; A..... pcm_u32le            PCM unsigned 32-bit little-endian&#xA; A..... pcm_u8               PCM unsigned 8-bit&#xA; A..... pcm_vidc             PCM Archimedes VIDC&#xA; A..... real_144             RealAudio 1.0 (14.4K) (codec ra_144)&#xA; A..... roq_dpcm             id RoQ DPCM&#xA; A..X.. s302m                SMPTE 302M&#xA; A..... sbc                  SBC (low-complexity subband codec)&#xA; A..X.. sonic                Sonic&#xA; A..X.. sonicls              Sonic lossless&#xA; A..... libspeex             libspeex Speex (codec speex)&#xA; A..X.. truehd               TrueHD&#xA; A..... tta                  TTA (True Audio)&#xA; A..X.. vorbis               Vorbis&#xA; A..... libvorbis            libvorbis (codec vorbis)&#xA; A..... wavpack              WavPack&#xA; A..... libwavpack            (codec wavpack)&#xA; A..... wmav1                Windows Media Audio 1&#xA; A..... wmav2                Windows Media Audio 2&#xA; S..... ssa                  ASS (Advanced SubStation Alpha) subtitle (codec ass)&#xA; S..... ass                  ASS (Advanced SubStation Alpha) subtitle&#xA; S..... dvbsub               DVB subtitles (codec dvb_subtitle)&#xA; S..... dvdsub               DVD subtitles (codec dvd_subtitle)&#xA; S..... mov_text             3GPP Timed Text subtitle&#xA; S..... srt                  SubRip subtitle (codec subrip)&#xA; S..... subrip               SubRip subtitle&#xA; S..... text                 Raw text subtitle&#xA; S..... webvtt               WebVTT subtitle&#xA; S..... xsub                 DivX subtitles (XSUB)&#xA;

    &#xA;