
Recherche avancée
Autres articles (70)
-
Amélioration de la version de base
13 septembre 2013Jolie 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, parLe 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, parLa 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 LynchI am trying to use libavformat to create a
.mp4
video
with a single h.264 video stream, but the final frame in the resulting file
often has a duration of zero and is effectively dropped from the video.
Strangely enough, whether the final frame is dropped or not depends on how many
frames I try to add to the file. Some simple testing that I outline below makes
me think that I am somehow misconfiguring either theAVFormatContext
or the
h.264 encoder, resulting in two edit lists that sometimes chop off the final
frame. I will also post a simplified version of the code I am using, in case I'm
making some obvious mistake. Any help would be greatly appreciated : I've been
struggling with this issue for the past few days and have made little progress.

I can recover the dropped frame by creating a new mp4 container using
ffmpeg

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

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


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



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


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



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

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


The last frame has zero duration :


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



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


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



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



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


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


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

# Function to transfer array to AVPicture/AVFrame
function transfer_img_buf_to_frame!(frame, img)
 img_pointer = pointer(img)
 data_pointer = frame.data[1] # Base-1 indexing, get pointer to first data buffer in frame
 for h = 1:frame.height
 data_line_pointer = data_pointer + (h-1) * frame.linesize[1] # base-1 indexing
 img_line_pointer = img_pointer + (h-1) * frame.width
 unsafe_copyto!(data_line_pointer, img_line_pointer, frame.width) # base-1 indexing
 end
end

# Function to transfer AVFrame to AVCodecContext, and AVPacket to AVFormatContext
function encode_mux!(packet, format_context, frame, codec_context; flush = false)
 if flush
 fret = avcodec_send_frame(codec_context, C_NULL)
 else
 fret = avcodec_send_frame(codec_context, frame)
 end
 if fret < 0 && !in(fret, [-Libc.EAGAIN, VIO_AVERROR_EOF])
 error("Error $fret sending a frame for encoding")
 end

 pret = Cint(0)
 while pret >= 0
 pret = avcodec_receive_packet(codec_context, packet)
 if pret == -Libc.EAGAIN || pret == VIO_AVERROR_EOF
 break
 elseif pret < 0
 error("Error $pret during encoding")
 end
 stream = format_context.streams[1] # Base-1 indexing
 av_packet_rescale_ts(packet, codec_context.time_base, stream.time_base)
 packet.stream_index = 0
 ret = av_interleaved_write_frame(format_context, packet)
 ret < 0 && error("Error muxing packet: $ret")
 end
 if !flush && fret == -Libc.EAGAIN && pret != VIO_AVERROR_EOF
 fret = avcodec_send_frame(codec_context, frame)
 if fret < 0 && fret != VIO_AVERROR_EOF
 error("Error $fret sending a frame for encoding")
 end
 end
 return pret
end

# Set parameters of test movie
nframe = 100
width, height = 100, 100
framerate = 24
gop = 0
codec_name = "libx264"
filename = "testing.mp4"

((width % 2 !=0) || (height % 2 !=0)) && error("Encoding error: Image dims must be a multiple of two")

# Make test images
imgstack = map(x->rand(UInt8,width,height),1:nframe);

pix_fmt = AV_PIX_FMT_GRAY8
framerate_rat = Rational(framerate)

codec = avcodec_find_encoder_by_name(codec_name)
codec == C_NULL && error("Codec '$codec_name' not found")

# Allocate AVCodecContext
codec_context_p = avcodec_alloc_context3(codec) # raw pointer
codec_context_p == C_NULL && error("Could not allocate AVCodecContext")
# Easier to work with pointer that acts like a c struct pointer, type defined below
codec_context = AVCodecContextPtr(codec_context_p)

codec_context.width = width
codec_context.height = height
codec_context.time_base = AVRational(1/framerate_rat)
codec_context.framerate = AVRational(framerate_rat)
codec_context.pix_fmt = pix_fmt
codec_context.gop_size = gop

ret = avcodec_open2(codec_context, codec, C_NULL)
ret < 0 && error("Could not open codec: Return code $(ret)")

# Allocate AVFrame and wrap it in a Julia convenience type
frame_p = av_frame_alloc()
frame_p == C_NULL && error("Could not allocate AVFrame")
frame = AVFramePtr(frame_p)

frame.format = pix_fmt
frame.width = width
frame.height = height

# Allocate picture buffers for frame
ret = av_frame_get_buffer(frame, 0)
ret < 0 && error("Could not allocate the video frame data")

# Allocate AVPacket and wrap it in a Julia convenience type
packet_p = av_packet_alloc()
packet_p == C_NULL && error("Could not allocate AVPacket")
packet = AVPacketPtr(packet_p)

# Allocate AVFormatContext and wrap it in a Julia convenience type
format_context_dp = Ref(Ptr{AVFormatContext}()) # double pointer
ret = avformat_alloc_output_context2(format_context_dp, C_NULL, C_NULL, filename)
if ret != 0 || format_context_dp[] == C_NULL
 error("Could not allocate AVFormatContext")
end
format_context = AVFormatContextPtr(format_context_dp)

# Add video stream to AVFormatContext and configure it to use the encoder made above
stream_p = avformat_new_stream(format_context, C_NULL)
stream_p == C_NULL && error("Could not allocate output stream")
stream = AVStreamPtr(stream_p) # Wrap this pointer in a convenience type

stream.time_base = codec_context.time_base
stream.avg_frame_rate = 1 / convert(Rational, stream.time_base)
ret = avcodec_parameters_from_context(stream.codecpar, codec_context)
ret < 0 && error("Could not set parameters of stream")

# Open the AVIOContext
pb_ptr = field_ptr(format_context, :pb)
# This following is just a call to avio_open, with a bit of extra protection
# so the Julia garbage collector does not destroy format_context during the call
ret = GC.@preserve format_context avio_open(pb_ptr, filename, AVIO_FLAG_WRITE)
ret < 0 && error("Could not open file $filename for writing")

# Write the header
ret = avformat_write_header(format_context, C_NULL)
ret < 0 && error("Could not write header")

# Encode and mux each frame
for i in 1:nframe # iterate from 1 to nframe
 img = imgstack[i] # base-1 indexing
 ret = av_frame_make_writable(frame)
 ret < 0 && error("Could not make frame writable")
 transfer_img_buf_to_frame!(frame, img)
 frame.pts = i
 encode_mux!(packet, format_context, frame, codec_context)
end

# Flush the encoder
encode_mux!(packet, format_context, frame, codec_context; flush = true)

# Write the trailer
av_write_trailer(format_context)

# Close the AVIOContext
pb_ptr = field_ptr(format_context, :pb) # get pointer to format_context.pb
ret = GC.@preserve format_context avio_closep(pb_ptr) # simply a call to avio_closep
ret < 0 && error("Could not free AVIOContext")

# Deallocation
avcodec_free_context(codec_context)
av_frame_free(frame)
av_packet_free(packet)
avformat_free_context(format_context)



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


# Convenience type and methods to make the above code look more like C
using Base: RefValue, fieldindex

import Base: unsafe_convert, getproperty, setproperty!, getindex, setindex!,
 unsafe_wrap, propertynames

# VideoIO is a Julia wrapper to libav
#
# Bring bindings to libav library functions into namespace
using VideoIO: AVCodecContext, AVFrame, AVPacket, AVFormatContext, AVRational,
 AVStream, AV_PIX_FMT_GRAY8, AVIO_FLAG_WRITE, AVFMT_NOFILE,
 avformat_alloc_output_context2, avformat_free_context, avformat_new_stream,
 av_dump_format, avio_open, avformat_write_header,
 avcodec_parameters_from_context, av_frame_make_writable, avcodec_send_frame,
 avcodec_receive_packet, av_packet_rescale_ts, av_interleaved_write_frame,
 avformat_query_codec, avcodec_find_encoder_by_name, avcodec_alloc_context3,
 avcodec_open2, av_frame_alloc, av_frame_get_buffer, av_packet_alloc,
 avio_closep, av_write_trailer, avcodec_free_context, av_frame_free,
 av_packet_free

# Submodule of VideoIO
using VideoIO: AVCodecs

# Need to import this function from Julia's Base to add more methods
import Base: convert

const VIO_AVERROR_EOF = -541478725 # AVERROR_EOF

# Methods to convert between AVRational and Julia's Rational type, because it's
# hard to access the AV rational macros with Julia's C interface
convert(::Type{Rational{T}}, r::AVRational) where T = Rational{T}(r.num, r.den)
convert(::Type{Rational}, r::AVRational) = Rational(r.num, r.den)
convert(::Type{AVRational}, r::Rational) = AVRational(numerator(r), denominator(r))

"""
 mutable struct NestedCStruct{T}

Wraps a pointer to a C struct, and acts like a double pointer to that memory.
The methods below will automatically convert it to a single pointer if needed
for a function call, and make interacting with it in Julia look (more) similar
to interacting with it in C, except '->' in C is replaced by '.' in Julia.
"""
mutable struct NestedCStruct{T}
 data::RefValue{Ptr{T}}
end
NestedCStruct{T}(a::Ptr) where T = NestedCStruct{T}(Ref(a))
NestedCStruct(a::Ptr{T}) where T = NestedCStruct{T}(a)

const AVCodecContextPtr = NestedCStruct{AVCodecContext}
const AVFramePtr = NestedCStruct{AVFrame}
const AVPacketPtr = NestedCStruct{AVPacket}
const AVFormatContextPtr = NestedCStruct{AVFormatContext}
const AVStreamPtr = NestedCStruct{AVStream}

function field_ptr(::Type{S}, struct_pointer::Ptr{T}, field::Symbol,
 index::Integer = 1) where {S,T}
 fieldpos = fieldindex(T, field)
 field_pointer = convert(Ptr{S}, struct_pointer) +
 fieldoffset(T, fieldpos) + (index - 1) * sizeof(S)
 return field_pointer
end

field_ptr(a::Ptr{T}, field::Symbol, args...) where T =
 field_ptr(fieldtype(T, field), a, field, args...)

function check_ptr_valid(p::Ptr, err::Bool = true)
 valid = p != C_NULL
 err && !valid && error("Invalid pointer")
 valid
end

unsafe_convert(::Type{Ptr{T}}, ap::NestedCStruct{T}) where T =
 getfield(ap, :data)[]
unsafe_convert(::Type{Ptr{Ptr{T}}}, ap::NestedCStruct{T}) where T =
 unsafe_convert(Ptr{Ptr{T}}, getfield(ap, :data))

function check_ptr_valid(a::NestedCStruct{T}, args...) where T
 p = unsafe_convert(Ptr{T}, a)
 GC.@preserve a check_ptr_valid(p, args...)
end

nested_wrap(x::Ptr{T}) where T = NestedCStruct(x)
nested_wrap(x) = x

function getproperty(ap::NestedCStruct{T}, s::Symbol) where T
 check_ptr_valid(ap)
 p = unsafe_convert(Ptr{T}, ap)
 res = GC.@preserve ap unsafe_load(field_ptr(p, s))
 nested_wrap(res)
end

function setproperty!(ap::NestedCStruct{T}, s::Symbol, x) where T
 check_ptr_valid(ap)
 p = unsafe_convert(Ptr{T}, ap)
 fp = field_ptr(p, s)
 GC.@preserve ap unsafe_store!(fp, x)
end

function getindex(ap::NestedCStruct{T}, i::Integer) where T
 check_ptr_valid(ap)
 p = unsafe_convert(Ptr{T}, ap)
 res = GC.@preserve ap unsafe_load(p, i)
 nested_wrap(res)
end

function setindex!(ap::NestedCStruct{T}, i::Integer, x) where T
 check_ptr_valid(ap)
 p = unsafe_convert(Ptr{T}, ap)
 GC.@preserve ap unsafe_store!(p, x, i)
end

function unsafe_wrap(::Type{T}, ap::NestedCStruct{S}, i) where {S, T}
 check_ptr_valid(ap)
 p = unsafe_convert(Ptr{S}, ap)
 GC.@preserve ap unsafe_wrap(T, p, i)
end

function field_ptr(::Type{S}, a::NestedCStruct{T}, field::Symbol,
 args...) where {S, T}
 check_ptr_valid(a)
 p = unsafe_convert(Ptr{T}, a)
 GC.@preserve a field_ptr(S, p, field, args...)
end

field_ptr(a::NestedCStruct{T}, field::Symbol, args...) where T =
 field_ptr(fieldtype(T, field), a, field, args...)

propertynames(ap::T) where {S, T<:NestedCStruct{S}} = (fieldnames(S)...,
 fieldnames(T)...)




Edit : Some things that I have already tried


- 

- Explicitly setting the stream duration to be the same number as the number of frames that I add, or a few more beyond that
- Explicitly setting the stream start time to zero, while the first frame has a PTS of 1
- Playing around with encoder parameters, as well as
gop_size
, using B frames, etc. - Setting the private data for the mov/mp4 muxer to set the movflag
negative_cts_offsets
- Changing the framerate
- Tried different pixel formats, such as AV_PIX_FMT_YUV420P














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.


-
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 TesauroI 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


-
FFMPEG on Windows Server "Unknown encoder 'libfaac'" [duplicate]
18 novembre 2020, par JonathanI am doing this on a Windows server and is not already answered as per the other question on here on a Linux server.


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


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.


Please see the log output below :


<pre>object(FFMpeg\Exception\RuntimeException)#35 (7) {
 ["message":protected]=>
 string(15) "Encoding failed"
 ["string":"Exception":private]=>
 string(0) ""
 ["code":protected]=>
 int(0)
 ["file":protected]=>
 string(108) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\Media\AbstractVideo.php"
 ["line":protected]=>
 int(106)
 ["trace":"Exception":private]=>
 array(1) {
 [0]=>
 array(5) {
 ["file"]=>
 string(45) "C:\inetpub\wwwroot\dev\ffmpeg-lib\process.php"
 ["line"]=>
 int(35)
 ["function"]=>
 string(4) "save"
 ["class"]=>
 string(26) "FFMpeg\Media\AbstractVideo"
 ["type"]=>
 string(2) "->"
 }
 }
 ["previous":"Exception":private]=>
 object(Alchemy\BinaryDriver\Exception\ExecutionFailureException)#43 (9) {
 ["command":protected]=>
 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 +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""
 ["errorOutput":protected]=>
 string(2301) "ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers
 built with gcc 10.2.1 (GCC) 20200805
 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
 libavutil 56. 58.100 / 56. 58.100
 libavcodec 58.101.101 / 58.101.101
 libavformat 58. 51.101 / 58. 51.101
 libavdevice 58. 11.101 / 58. 11.101
 libavfilter 7. 87.100 / 7. 87.100
 libswscale 5. 8.100 / 5. 8.100
 libswresample 3. 8.100 / 3. 8.100
 libpostproc 55. 8.100 / 55. 8.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'temp/temp_20201110-100656_1080p-220mb.mp4':
 Metadata:
 major_brand : mp42
 minor_version : 19529854
 compatible_brands: mp42isom
 creation_time : 2016-04-11T06:32:53.000000Z
 Duration: 00:02:25.98, start: 0.000000, bitrate: 13772 kb/s
 Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 creation_time : 2016-04-11T06:32:53.000000Z
 handler_name : Sound Media Handler
 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)
 Metadata:
 creation_time : 2016-04-11T06:32:53.000000Z
 handler_name : Video Media Handler
 encoder : AVC Coding
Unknown encoder 'libfaac'
"
 ["message":protected]=>
 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 +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":

Error Output:

 ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers
 built with gcc 10.2.1 (GCC) 20200805
 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
 libavutil 56. 58.100 / 56. 58.100
 libavcodec 58.101.101 / 58.101.101
 libavformat 58. 51.101 / 58. 51.101
 libavdevice 58. 11.101 / 58. 11.101
 libavfilter 7. 87.100 / 7. 87.100
 libswscale 5. 8.100 / 5. 8.100
 libswresample 3. 8.100 / 3. 8.100
 libpostproc 55. 8.100 / 55. 8.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'temp/temp_20201110-100656_1080p-220mb.mp4':
 Metadata:
 major_brand : mp42
 minor_version : 19529854
 compatible_brands: mp42isom
 creation_time : 2016-04-11T06:32:53.000000Z
 Duration: 00:02:25.98, start: 0.000000, bitrate: 13772 kb/s
 Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
 Metadata:
 creation_time : 2016-04-11T06:32:53.000000Z
 handler_name : Sound Media Handler
 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)
 Metadata:
 creation_time : 2016-04-11T06:32:53.000000Z
 handler_name : Video Media Handler
 encoder : AVC Coding
Unknown encoder 'libfaac'
"
 ["string":"Exception":private]=>
 string(0) ""
 ["code":protected]=>
 int(0)
 ["file":protected]=>
 string(116) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\ProcessRunner.php"
 ["line":protected]=>
 int(95)
 ["trace":"Exception":private]=>
 array(5) {
 [0]=>
 array(5) {
 ["file"]=>
 string(116) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\ProcessRunner.php"
 ["line"]=>
 int(73)
 ["function"]=>
 string(18) "doExecutionFailure"
 ["class"]=>
 string(34) "Alchemy\BinaryDriver\ProcessRunner"
 ["type"]=>
 string(2) "->"
 }
 [1]=>
 array(5) {
 ["file"]=>
 string(117) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\AbstractBinary.php"
 ["line"]=>
 int(207)
 ["function"]=>
 string(3) "run"
 ["class"]=>
 string(34) "Alchemy\BinaryDriver\ProcessRunner"
 ["type"]=>
 string(2) "->"
 }
 [2]=>
 array(5) {
 ["file"]=>
 string(117) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\AbstractBinary.php"
 ["line"]=>
 int(136)
 ["function"]=>
 string(3) "run"
 ["class"]=>
 string(35) "Alchemy\BinaryDriver\AbstractBinary"
 ["type"]=>
 string(2) "->"
 }
 [3]=>
 array(5) {
 ["file"]=>
 string(108) "C:\inetpub\wwwroot\dev\ffmpeg-lib\ffmpeg-php\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\Media\AbstractVideo.php"
 ["line"]=>
 int(96)
 ["function"]=>
 string(7) "command"
 ["class"]=>
 string(35) "Alchemy\BinaryDriver\AbstractBinary"
 ["type"]=>
 string(2) "->"
 }
 [4]=>
 array(5) {
 ["file"]=>
 string(45) "C:\inetpub\wwwroot\dev\ffmpeg-lib\process.php"
 ["line"]=>
 int(35)
 ["function"]=>
 string(4) "save"
 ["class"]=>
 string(26) "FFMpeg\Media\AbstractVideo"
 ["type"]=>
 string(2) "->"
 }
 }
 ["previous":"Exception":private]=>
 NULL
 }
}
</pre>


Output of ffmpeg -encoders


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