_Gyan_

Joined 8 years ago

Karma
642
Submissions
86
Member since
Sep 2
https://www.gyan.dev
View on Hacker News

Recent submissions

Comment · 4 years ago
libav is a part of FFmpeg, and the heart of it. But FFmpeg isn't just a skeleton. Most decoders + protocols + demuxers / muxsers + filters + scaler + resampler are native components.

The most well-known 3rd party libs provide a few (albeit commonly used) video encoders. Of course, having interfaces for these external libs is what allows media operations to be consolidated into a single process workflow. As standalone tools, x264/x265 would be more cumbersome to integrate into a pipeline.

Comment · 4 years ago
API/ABI is meant to be preserved within a major version, but not across. The deprecation period is typically two years, but deletion is usually much later.

Do you have examples to the contrary from the past few years?

Comment · 4 years ago
For a few years, the default aac coder has been fast. But the twoloop coder is better but slower, and was made default in May 2021. Add `-aac_coder twoloop` (in older builds) and recheck.
Comment · 5 years ago
With ffmpeg, use the below command to calculate maximum timestamps

    ffmpeg -i INPUT -map 0:v -map 0:a -enc_time_base -1 -c copy -f null -
Note the time= value at the end of the process.
Comment · 5 years ago
> You already provided better lines for some of the options than what their docs state

I wrote the docs section you refer to :)

They are meant to be narrow and to the point, not didactic, not least because the codepath leading up to an option and following that option depend on internal evaluations and other options.

> why would anyone want to do that?

Because the input has weird or unreliable DTS. One would have to check code history to see why an option was initially added. Many of ffmpeg options are there to deal with edge cases or weird inputs.

> -fflags +genpts+igndts -use_wallclock_as_timestamps 1

In theory, igndts is unsetting wallclock dts set by the last option. genpts should have no effect, again due to the third option.

Comment · 5 years ago
Think of ffmpeg as a universal translator. There are 100s of languages in use around the world, with their own syntax, vocabulary, writing system, formal and informal conventions ..etc.

A universal translator framework cannot provide a bespoke translation engine for all possible permutations of source and target language. Instead it provides a common engine which is meant to be suitable enough for the most common traits shared across languages.

When converting any two languages at random, there will be quirks of the language or errors/ambiguity in the source prose which the engine cannot hope to all automatically recognize and accommodate, so there are all these options that do one specific thing and allow users to modify a step of the translation process. The docs cannot go in detail because the downstream ramifications of the option can vary based on the exact properties of the source-target pair and the transformations requested of ffmpeg. Instead the docs will describe the exact change directly triggered by the option.

----

As for the specific options,

* -fflags +genpts, +igndts, +ignidx

All of these apply to inputs only.

genpts: if input packets have missing presentation timestamps, this option will assign the decoding timestamp as PTS, if present.

igndts will unset dts if packet's pts is set.

ignidx is only applied to a few formats. These provide a keyframe index, which ffmpeg uses to populate its internal KF index for the stream. This option makes ffmpeg ignore the supplied index.

* -vsync

The option is misnamed. It's better called fpsmode. Most commonly used to drop or duplicate frames to achieve a constant framerate stream.

* -copyts

FFmpeg will, by default, remove any starting offset to input timestamps or adjust timestamps if they overflow (roll over) or have a large gap. copyts stops all that and relays input timestamps. Basically used if one wishes to manually examine and adjust timestamps using setpts filter or setts bitstream filter.

* -use_wallclock_as_timestamps 1

Discards input timestamps and assign system clock time at time of handling packet as its pts.

Comment · 5 years ago
For `-f h264`, `-bsf:v h264_mp4toannexb` is not needed. It will be automatically inserted as needed, with ffmpeg 4.0 or later.

For latency, specify a short GOP size, e.g. `-g 50`

Comment · 5 years ago
> literally the only difference is the contents of the "ftyp" box, every other byte is identical.

Not quite. There are some boxes acceptable in one but not the other. Strings inside MOOV are length-prefixed in MOV but null-terminated in ISOBMFF. There are a variety of differences like that.

The set of codecs allowed, also differs between the two.

Comment · 5 years ago
Comment · 5 years ago
Don't think that's the main reason. Hollywood has no compunction or lack of skill to embellish or dramatize a mundane life if they need to.

I suspect Bach's place at the top is received rather than recognized, which is not to say he doesn't deserve it. His skill lays in counterpoint and other facets of harmony. His music has structural elegance and ornamental beauty, not the full orchestral rabble rousing of Beethoven or delicate pianism of Chopin. Not exactly directly translatable to a poster or trailer.

Comment · 5 years ago
Comment · 5 years ago
A profitable strategy only if it attracts a lot more prey than predators.
Comment · 5 years ago
Comment · 5 years ago
It's a shame that Graeme Garden and Barry Cryer appear to have retired.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton