
Recherche avancée
Médias (91)
-
#3 The Safest Place
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#4 Emo Creates
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#2 Typewriter Dance
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#1 The Wires
11 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
ED-ME-5 1-DVD
11 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Audio
-
Revolution of Open-source and film making towards open film making
6 octobre 2011, par
Mis à jour : Juillet 2013
Langue : English
Type : Texte
Autres articles (50)
-
Submit bugs and patches
13 avril 2011Unfortunately a software is never perfect.
If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
You may also (...) -
Ajouter notes et légendes aux images
7 février 2011, parPour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
Modification lors de l’ajout d’un média
Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...) -
Ajouter des informations spécifiques aux utilisateurs et autres modifications de comportement liées aux auteurs
12 avril 2011, parLa manière la plus simple d’ajouter des informations aux auteurs est d’installer le plugin Inscription3. Il permet également de modifier certains comportements liés aux utilisateurs (référez-vous à sa documentation pour plus d’informations).
Il est également possible d’ajouter des champs aux auteurs en installant les plugins champs extras 2 et Interface pour champs extras.
Sur d’autres sites (9463)
-
ffmpeg h264 to mp4 conversion from multiple files fails to preserve in-sequence resolution changes
1er juillet 2023, par LB2This will be a long post, so I thank you in advance for your patience in digesting it.


Context


I have different sources that generate visual content that eventually need to be all composed into a single .mp4 file. The sources are :


- 

- H.264 video (encoded using CUDA NVENC).

- 

- This video can have in-sequence resolution change that is natively supported by H.264 codec.
- I.e. stream may start as HxW resolution and mid-stream change to WxH. This behavior happens because it comes from a camera device that can be rotated and flipped between portrait and landscape (e.g. think of a phone camera recording video and phone being flipped from one orientation to another, and video recording adjusting its encoding for proper video scaling and orientation).
- When rotation occurs, most of the time H & W are just swaps, but may actually be entirely new values — e.g. in some cases 1024x768 will switch to 768x1024, but in other cases 1024x768 may become 460x640 (depends on source camera capabilities that I have no control over).








- JPEGs. A series (a.k.a. batch) of still JPEGs.

- 

- The native resolution of JPEGs may or may not match the video resolution in the earlier bullet.
- JPEGs can also reflect rotation of device and so some JPEGs in a sequence may start at HxW resolution and then from some arbitrary JPEG file can flip and become WxH. Similar to video, resolution dimensions are likely to be just a swap, but may become altogether different values.






- There can be any number of batches and intermixes between video and still sources. E.g. V1 + S2 + S3 + V4 + V5 + V6 + S7 + ...
- There can be any number of resolution changes between or within batches. e.g. V1 ;r1 + V1 ;r2 + S2 ;r1 + S2 ;r3 + V3 ;r2 + ... (where first subscript is batch sequence ; rX is resolution)










Problem


I'm attempting to do this conversion with
ffmpeg
and can't quite get it right. The problem is that I can't get output to respect source resolutions, and it just squishes all into a single output resolution.



As already mentioned above, H.264 supports resolution changes in-sequence (mid-stream), and it should be possible to convert and concatenate all the content and have final output contain in-sequence resolution changes.


Since MP4 is just a container, I'm assuming that MP4 files can do so as well ?


Attempts so far


The approach thus far has been to take each batch of content (i.e. .h264 video or a set of JPEGs), and individually convert to .mp4. Video is converted using
-c copy
to ensure it doesn't try to transcode, e.g. :

ffmpeg -hide_banner -i videoX.h264 -c copy -vsync vfr -video_track_timescale 90000 intermediateX.mp4



... and JPEGs are converted using
-f concat


ffmpeg -hide_banner -f concat -safe 0 -i jpegsX.txt -vf 'scale=trunc(iw/2)*2:trunc(ih/2)*2' -r 30 -vsync vfr -video_track_timescale 90000 intermediateX.mp4



... and then all the intermediates concatenated together


ffmpeg -hide_banner -f concat -safe 0 -i final.txt -pix_fmt yuv420p -c copy -vsync vfr -video_track_timescale 90000 -metadata title='yabadabadoo' -fflags +bitexact -flags:v +bitexact -flags:a +bitexact final.mp4



This concatenates, but if resolution changes at some mid point, then that part of content comes up squished/stretched in final output.


Use h.264 as intermediates


All the intermediates are produced the same, except as .h264. All intermediate .h264 are
cat
'ed together like `cat intermediate1.h264 intermediate2.264 > final.h264.

If final output is
final.mp4
, the output is incorrect and images are squished/stretched.

If
final.h264
, then at least it seems to be respecting aspect ratios of input and managing to produce correctly looking output. However, examining withffprobe
it seems that it uses SAR weird ratios, where first frames arewidth=1440 height=3040 sample_aspect_ratio=1:1
, but later SAR takes on values likewidth=176 height=340 sample_aspect_ratio=1545:176
, which I suspect isn't right, since all original input was with "square pixels". I think the reason for it is that it was composed out of different sized JPEGs, and concat filter somehow caused ffmpeg to manipulate SAR "to get things fit".

But at least it renders respectably, though hard to say with
ffplay
if player would actually see resolution change and resize accordingly .

And, that's .h264 ; and I need final output to be .mp4.


Use
-vf
filter

I tried enforcing SAR using
-vf 'scale=trunc(iw/2)*2:trunc(ih/2)*2,setsar=1:1'
(scaling is to deal with odd dimension JPEGs), but it still produces frames with SAR like stated earlier.

Other thoughts


For now, while I haven't given up, I'm trying to avoid in my code examining each individual JEPG in a batch to see if there are differing sizes, and splitting batch so that each sub-batch is homogenous resolution-wise, and generating individual intermediate .h264 so that SAR remains sane, and keep fingers crossed that the final would work correctly. It'll be very slow, unfortunately.


Question


What's the right way to deal with all that using
ffmpeg
, and how to concatenate mulitple varying resolution sources into a final mp4 so that it respects resolution changes mid-stream ?

- H.264 video (encoded using CUDA NVENC).

-
FFmpeg - How to choose video stream based on resolution
23 septembre 2023, par SylvenI want to choose the video stream based on it's quality, let's say I want to choose one video stream with certain resolution.


Manually selecting the video stream is not good enough for me because I want to process many files in bulk and they have the video streams in different order, so always going for certain position would make me end up with different resolutions.


I don't want to use filters as that would make me reencode which I don't need and would make it way slower.


I've tried using the
-map
with metadata but the only key that is different is "variant_bitrate" which has slightly different values everytime, so unless I can use some wildcard or conditionals, I guess it won't work either.

What I want to try now is to obtain the exact bitrate of the stream using
ffmpeg
orffprobe
and then pass it to theffmpeg
command so it ends in something like this :

ffmpeg -i <url> -map m:variant_bitrate:1760000 ...</url>


PD : I've been reading the FFmpeg documentation and browsing the whole internet without luck.


Edit :
I managed to make it work by first using
ffprobe
to obtain stream info in json format (easier to parse), then I search for the string"height": 540
and extract next 50 lines (counted them manually so I'm sure I'll pick the value I need), then I search for the stringvariant_bitrate
and then I use a regular expression to extract the bitrate. Once I have the bitrate I make use of the MacOS clipboard (withpbcopy
andpbpaste
) to pass the value to the finalffmpeg
command through the-map
option using a metadata selector.

ffprobe -v error -show_streams -of json "https://streamlink.com/master.m3u8?f=dash"
| grep -A 50 '"height": 540' 
| grep variant_bitrate
| grep -oe '\([0-9.]*\)' 
| pbcopy
&& ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i "https://streamlink.com/master.m3u8?f=dash" -map "0:a:0" -map "m:variant_bitrate:$(pbpaste)" -c copy "Output.mp4"



(added line breaks for readability)


I know it looks kinda dirty but I didn't find any other way to achieve my requirement.


-
Best logical formula to determine perceptual / "experienced" quality of a video, given resolution / fps and bitrate ?
20 mars 2023, par JamesKI am looking for a formula that can provide me with a relatively decent approximation of a Video's playback quality that can be calculated based off of four metrics : width, height, fps, and bitrate (bits/sec). Alternatively, I can also use FFMPEG or similar tools to calculate a Video's playback quality, if any of those tools provide something like what I am looking for here.


An example of what a Video might look like in my problem is as follows :


interface Video {
 /** The width of the Video (in pixels). */
 width: number
 /** The height of the Video (in pixels). */
 height: number
 /** The frame rate of the Video (frames per second). */
 fps: number
 /** The bitrate of the video, in bits per second (e.g. 5_000_000 = 5Mbit/sec) */
 bitrate: number
}



I came up with the following function to compute the average amount of bits available for any given pixel per second :


const computeVideoQualityScalar = (video: Video): number => {
 // The amount of pixels pushed to the display, per frame.
 const pixelsPerFrame = video.width * video.height
 
 // The amount of pixels pushed to the display, per second.
 const pixelsPerSecond = pixelsPerFrame * video.fps
 
 // The average amount of bits used by each pixel, each second,
 // to convey all data relevant to that pixel (e.g. color data, etc)
 const bitsPerPixelPerSecond = video.bitrate / pixelsPerSecond
 
 return bitsPerPixelPerSecond
}



While my formula does do a good job of providing a more-or-less "standardized" assessment of mathematical quality for any given video, it falls short when I try to use it to compare videos of different resolutions to one another. For example, a 1080p60fps video with a bitrate of 10Mbit/sec has a greater visual fidelity (at least, subjectively speaking, to my eyes) than a 720p30fps video with a bitrate of 9Mbit/sec, but my formula would score the 720p30fps video significantly higher than the 1080p60fps video because the 720p video has more bits available per pixel per second than the 1080p video.


I am struggling to come up with ideas as to how to either come up with a different way to calculate the "subjective video quality" for a given video, or extend upon my existing idea here.