text:
Recovering from an Automatic White Balanced mishap
I’m editing some video (and audio) I captured at an outdoor wedding a couple of weeks ago. I shot it with a consumer-grade Canon camera, but I had Automatic White Balance turned on. I did not shoot a color card. Weather was broken clouds, sometimes overcast, sometimes partial sun, and I had several different framings (pan/zoom). I’m doing the final edit in Final Cut Pro (and I have an audio track from a Zoom H6 that I want to use for 2/3 of the final product).
I’ve brought all of the video and audio clips into FCPX, and synchronized them. But now that I’m editing this, I see some very distracting shifts in the color balance where the camera was “helping”. These happen when I changed the framing, or when the sun goes behind a cloud or comes out. The grass changes color, the distinctively colored wall in the background changes color, the groom’s pink/white plaid shirt changes color.
Rubber duck time… What I think I want to do is to start over from the raw clips. Bring the video clips into Davinci Resolve (free version), join them into one track, and manually adjust the color balance in each “scene” to look better/close to reality. Then dump the improved/color-corrected video track into a brand new FCPX project, bring in the audio tracks, and continue from there (to do the audio fades, correct some camera tilt, and zoom into some scenes).
Is that a reasonable approach? Is there a better way to fix this mistake?
(I’ve turned off the AWB on the camera, so that if I don’t shoot a color card next time, at least I’ll only have one color change to make. And I’m going to order a color card too).

Maybe "Shot Match" is what you are looking for (citing page 2802 of "Chapter 126 Automated Grading Commands and Imported Grades" from DaVinci Resolve 18 Reference Manual):

After you make a general adjustment to improve the color of a clip in a scene, one of the other
principal tasks of the colorist is to adjust all of the clips in that scene so that they match the clip you
started with, such that they all look like they were shot at the same time and in the same place. This is
called scene-to-scene color correction, scene balancing, or shot matching. While there are abundant
tools in DaVinci Resolve to ease the process of doing this manually, wouldn’t it be nice if you could just
select a series of clips that you want to match, and have the software do the work?
That’s exactly what Shot Match has been designed to do.

DaVinci Resolve is industry standard for colour grading. However if you don’t need very special and specific functions in DaVinci Resolve, you can do the grading in FCP as well. In your situation I would not think you need all this back and fourth to DaVinci.

Resolve has a color stabilizer effect that’s expressly for this purpose. I don’t remember offhand if it’s included in the free version, but I’ll update my answer when I find out.
If there’s any clipping in your image, though, shifting the white balance will cause the pure white areas to change color unnaturally, whether keyframing in FCPX, or by automated effect in Resolve.
You might try to desaturate the high luminance areas in this case, but at that point it’s more damage mitigation than color correction; not an unusual scenario, but one where having a good toolset is helpful.


text:
ffmpeg, audio tracks, and QuickTime player
I tried to copy all streams (video, audio, subtitle) and add a tag with the following command in order to play the files using QuickTime player:
ffmpeg -i in.mp4 -vcodec copy -tag:v hvc1 -acodec copy -scodec copy -map 0 out.mp4

The resulting file does open with QuickTime player, and the video/subtitles play fine, but the two audio tracks (E-AC3 in English and German) from the input file cannot be selected (View → Languages → None) and are in fact merged into each other while playing the video, even though both tracks are shown separately in Inspector → Audio Details and VLC handles them correctly. Is this a bug in QuickTime player, or would I need to add another option for QuickTime?
I experimented with various mapping options, e.g.
ffmpeg -i in.mp4 -map:v:0 0:v:0 -tag:v hvc1 -c:v:0 copy -map:a:0 0:a:0 -c:a:0 copy -map:a:1 0:a:1 -c:a:1 copy out.mp4
ffmpeg -i in.mp4 -map 0:v -map 0:1 -metadata:s:a:0 language=eng -map 0:2 -metadata:s:a:1 language=deu -c copy -tag:v hvc1 out.mp4

without success.

Try adding -disposition:a:1 0 so that the default audio track is only the first one.

That did the trick – thank you!

Alain1A45 posted the correct answer as a comment, the following command creates an output file with working audio tracks for QuickTime player:
ffmpeg -i in.mp4 -vcodec copy -tag:v hvc1 -acodec copy -scodec copy -map 0 -disposition:a:1 0 out.mp4

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

sort: votes


text:
FFMPEG encoding partial file and monitoring input for addition
I am partially downloading a video file, sequentially.
What I've managed to achieve is for FFmpeg to encode the file as it is being downloaded if the download is faster than encoding. I cannot guarantee that the download will always be faster than encoding.
When download becomes slower than encoding I get this error, and ffmpeg exists:
[matroska,webm @ 0x1248040d0] File ended prematurely

What I am hoping to achieve is for FFmpeg to wait/hang until new bits are added to the input file, and continue with encoding when it has enough of bits for a new segment until file is complete.
I am using this command to generate hls stream:
    ffmpeg -y \
        -i ./appdata/input/Sintel.mkv \
        -preset fast \
        -c:a aac \
        -b:a 192k \
        -ac 2 \
        -c:v libx264 \
        -b:v 1024k \
        -profile:v high \
        -level 4.1 \
        -crf 34 \
        -pix_fmt yuv420p \
        -threads 0 \
        -f hls \
        -hls_list_size 0 \
        -hls_time 10 \
        -hls_playlist_type event \
        -hls_flags independent_segments+append_list \
        -master_pl_name "livestream.m3u8" \
        ./appdata/test/livestream-%v.m3u8

Can FFmpeg monitor and process the input as new bits are added to the input file?
Best solution I got so far was is to use segments and segments list from this answer:
Resuming a partially-completed encode with FFmpeg
And couple it with some programming to keep retrying in the loop until the input file is complete, however, that feels like a bad solution that I would love to avoid.

Add -follow 1 before the input i.e.
ffmpeg -y \
    -rw_timeout 30M -follow 1 -i ./appdata/input/Sintel.mkv \

Note that the option belongs to the file protocol. It won't apply to other protocols, and ability to wait for further data depends on whether the other protocol allows it.
The option -rw_timeout is needed to terminate the file read. If no updates have occurred in that interval, ffmpeg will treat it as EOF. Its value is in microseconds i.e. 1M = 1 million microseconds = 1 second.

Thank you my friend, you are a true life saviour

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
How to make sound layers visible on right side of screen in Davinci Resolve
I have used Davinci in Windows but I'm new on mac. So I would like to learn how to display sound bus, layer visualization bigger. I've tried to show which I meant in attached image.
Thanks.

Well, I have found it. For anyone who struggles like me, you have to click "Mixer" button on top right corner


text:
Optimum video resolution for YouTube screen-casting software tutorials?
When recording on-screen software tutorials there's a balance between fitting the 16:9 format, making it low enough resolution that it's readable on smaller devices but big enough that there's enough working area in the application so that the view window of the application being demonstrated isn't ridiculously small.
What is the recommended setting? e.g., is 1280 x 720 (16:9) a good compromise or do I need to allow anything for YouTube borders, etc.?
Many thanks.

I couldn't find a definitive answer for the best option on YouTube. In the end I decided that a screen resolution of 1280 x 720 gave me a good compromise between legibility and working area while maintaining the 16:4 aspect ratio.

I am not sure if the approach you are asking is actually recording a video of 720P.
That would not be a good idea, because you are generating a video blurrier than FullHD 1080P. IMHO, the ideal resolution is recording the video at full HD 1080P.
But to solve the tiny window there are several options.
1. Changing the accessibility settings on your OS
This is probably the easiest solution.
In Windows (My OS is not in English so the actual text might vary slightly)

Right-click on the desktop > Screen Settings > Design and style.

Use for example 125%.

Here are two screen captures, one is using 150% zoom on these settings and the other is using 100% zoom.
You can see that the pixel size is the same, but the zoomed-in version has bigger elements.

2. Make Zoom during the edition
This would be time-consuming, especially because you need to track which part of the screen you are working on. Also, the resulting crop could be confusing.
3. Use a recording software that allows you to make temporary zooming
I do not use any in particular, so I can not recommend one.
4. Internal (theme and zoom) adjustments
Some software have settings that can be changed independently of the OS, Blender comes to my mind.
Some web-based applications use the zoom defined by the browser (Ctrl+MouseWheel)

But this is also something that the user might need to solve by themselves. Some applications on mobile devices allow the zooming and panning of the videos with gestures. I would focus on a pleasant desktop experience where normally you can't.

Thank you for your answer. 1. Recording full screen of a lower resolution desktop gives the same result as a recording of part of the desktop at high resolution. I don't think this will help me. 2. I will be zooming anyway. 3. Zooming during edit is better! 4. I'm aware of that too. The problem is with line drawings, etc., a 1-pixel wide line might get dropped completely if a high-resolution video is played back on a lower resolution device. I'll think some more!

No. The first option does not change the screen resolution, it changes the elements inside your defined resolution, in this case, 1080P. Let me do some tests. I think depends on the software.

If the user uses a low-resolution device he probably is aware of that. Let the interpolation algorithm do its job. A 1px sill still be visible. Washed out but visible.

I updated the point 1. The screen resolution remains the same, but the elements are bigger. Yes, some elements like the icon might be blurry because probably that icon is raster, but the vector elements like the text itself will be sharper than using a lower screen resolution.


text:
how do i use ffmpeg to stitch 220-degree fisheyes into a 360 equirectangular video?
Quite a while back, I used a now-discontinued 360-degree camera called the YI 360 camera to record some videos.
The software that came with the camera is no longer available, and to my knowledge, it didn't work very well anyway.
I need to find a way, using FFmpeg's v360 filter, to convert this footage into an equirectangular format.
Since I am not very well versed in FFmpeg's filter usage, there are a couple of challenges.
Firstly, the video is split into two 220-degree (not 180, at least according to the camera's website) fisheye views that overlap slightly.
Secondly, the camera itself is visible within the overlapping region, which must be removed.
How can I use FFmpeg to accomplish the equirectangular projection I want?

Rectifying single photo:
ffmpeg -i input.jpg -vf v360=fisheye:e:ih_fov=200:iv_fov=200 -y output.jpg

Rectifying horizontal double fisheye:
ffmpeg -i input.jpg -i dftest.gif -filter_complex "[1:v]v360=input=dfisheye:output=equirect:ih_fov=200:iv_fov=200[out_v]" -map "[out_v]"  output.jpg

You have a vertically stacked double fisheye, so you have to convert it in advance:

crop the 2 parts (540x540, one at 0,0, the other at 0,540):

crop=out_w=540:out_h=540:x=0:y=540
crop=out_w=540:out_h=540:x=0:y=0

stack them horizontally: hstack
send to v360 filter as above; v360=input=dfisheye:output=equirect:ih_fov=200:iv_fov=200

Final result:
ffmpeg -y -i input.jpg -filter_complex "[0:v]crop=out_w=540:out_h=540:x=0:y=540[3];[0:v]crop=out_w=540:out_h=540:x=0:y=0[1];[1][3]hstack,v360=input=dfisheye:output=equirect:ih_fov=200:iv_fov=200[out_v]" -map "[out_v]" output.jpg

I used FOV=200 rather than FOV to remove overlapping.
You can add parameter yaw to turn camera around:
ffmpeg -y -i input.jpg -filter_complex "[0:v]crop=out_w=540:out_h=540:x=0:y=540[3];[0:v]crop=out_w=540:out_h=540:x=0:y=0[1];[1][3]hstack,v360=input=dfisheye:output=equirect:ih_fov=200:iv_fov=200:yaw=45[out_v]" -map "[out_v]" output.jpg

yaw=0:

yaw=45:

Test result here: https://renderstuff.com/tools/360-panorama-web-viewer/
Used this amazing tool to experiment: https://ffmpeg.lav.io/
You can also experiment with windows software I wrote to replace XDV360 software which came with my panocam with single 220° fisheye lens:
https://github.com/jumpjack/fishconLC

Any idea what I would need to do if I have four to six partially overlapping <180 deg fisheyes? I have been struggling for days to find some explanation to that. Not clear to me how to map all fisheye frames into a single equirectangular.

this is nt a comment, it's a question with a very complex answer


text:
How to activate the Speed Graph of the Graph Editor of Adobe Aftereffects 2022?
How to activate the Speed Graph of the Graph Editor of Adobe Aftereffects 2022?
In the tutorial that I'm watching now, when he pressed his Graph editor, the result looked like the one that is encircled.

But when I pressed my Graph Editor in my Adobe Aftereffects 2022, the result look quite different from his, like this:

I don't understand why the same icon produces different functions for him and for me. How do we activate the Speed Graph of the Adobe Aftereffects 2022?
Thanks for the help!

You've used Orientation, and he has used Rotation. He has also separated the dimensions, which means that for a 3D object, you will see three separate graphs for x, y, and z rotations. Then he's selected only the Y rotation keyframes.


text:
How are hybrid keyframes created in After Effects?
As I understand, there are 2 types of keyframes in AE: basic (Linear, Bezier, Continuous Bezier, Auto Bezier, Hold) and hybrid ones. Here is a picture from the site I read:

It’s clear for me about the basic ones, but I’m totally confused with the hybrid keyframes. There's a quote from the same site:

By default, a keyframe would use only one type of Temporal
Interpolation (linear for example). But in some cases, a keyframe
might show dual nature as well. Which means one half of the keyframe
is Linear (incoming/outgoing) while the other half could be Hold or
Bezier (e.g. Toggle Hold or Ease In/Out settings). This is something
that I call hybrid keyframes.

As I understand it, the right part of the key should show the previous key, and the second part should show the subsequent key. But this doesn't happen:

Apparently I misunderstand it. So, how does this actually work? Thank you very much!

I think only the symbols shown in your diagram are the available ones in after effects. If you make three temporal keyframes:

linear
easy ease
auto bezier

Then change the middle one (2) to be a hold keyframe, you'll see one of the hybrid examples shown (hold ease in).

In general, the keyframe symbols are a great useful way to get certain kinds of motion working quickly, but it's often clearer to understand what's going on by separating dimensions and looking at the graph mode.


text:
Kdenlive project stuck on 25 fps
I have a Kdenlive project that was started with 25 FPS and now I want to switch it to 30 FPS, but no matter what I do, it stays on 25 FPS and produces 25 FPS output files during rendering.
The title bar says 30 FPS, the project properties say 30 FPS, but when I open the .kdenlive file with a text editor the profile still says 25 FPS:

<?xml version='1.0' encoding='utf-8'?>
<mlt LC_NUMERIC="en_US.UTF-8" producer="main_bin" root="Videos/Project" version="7.23.0">
 <profile colorspace="709" description="HD 1080p 25 fps" display_aspect_den="9" display_aspect_num="16" frame_rate_den="1" frame_rate_num="25" height="1080" progressive="1" sample_aspect_den="1" sample_aspect_num="1" width="1920"/>
 <producer id="producer0" in="00:00:00.000" out="00:00:45.600">

I even tried changing the profile by editing the .kdenlive file directly with an editor, but after loading it with Kdenlive it was back at 25 FPS.
Is there anything, short of creating a new project and arranging 100+ clips again to change this?
It doesn't matter if I open the project under Windows or Linux, I tested it with Kdenlive versions 24.02.1 and 22.12.3.

I found the culprit. In the project I used the color bar generator. That clip was created with 25 FPS, since this was the project setting at that time.
The framerate was stored in the .mlt file.
After creating a new color bar clip with 30 FPS and replacing it in the project it rendered correctly with 30 FPS.


text:
Is Premiere Pro's gaussian blur forensically secure?
I edit a lot of videos with Premiere Pro. I make a lot of tutorials about coding on YouTube, TikTok, Instagram, etc... Some of my tutorials involve a step where I get an API key from a subscription service and incorporate the API into my code. I've been using gaussian blur to obscure my API keys. I create a rectangle shape for the blur and place it over the API key. I always delete the API key after editing the video but I still don't like the idea of my API key being out there. I never know if the company might be re-using the keys or something weird like that. I know it's highly unlikely, but none-the-less, is Premiere Pro's gaussian blur feature resistant to any known type of video recovery? This is where the feature is located:

I also turn up the bur pretty high. In this example, I cranked the blurriness all the way up to 422:

If my blurring method isn't forensically secure, is there another way to obfuscate sections of the video in a way that is forensically secure and can't be recovered?

I don't know whether it is forensically secure. I wouldn't assume it is, if you're blocking sensitive information. Better to match the colour of the background and place a solid colour block to hide your data.
See this from 2007 - even before using AI - this is about pixelation, but the principle is similar:
https://dheera.net/posts/20140725-why-you-should-never-use-pixelation/
See this more recently on Photo Stack Exchange:
https://photo.stackexchange.com/questions/35097/is-it-possible-to-re-focus-recover-an-intentionally-blurred-image


text:
How do I make a numbered list in adobe after effects?
I need to make an animation with a numbered list. So that the squares with the text "Task 1, task 2 ..." move to the left and the first one disappears from the left, and then the next movement. Is it possible to do this somehow, or is it only manually copied and duplicated?
(P. S. I know that there is a repeater and I attached a screenshot with it. But it does not hang on the text, is it possible to somehow make a structure out of a square shape and text so that after throwing a repeater on top, moreover, somehow using an expression in the text to change the number depending on which copy it is?)

Can you add a clear step by step explanation of what you expect to see in each box at each time?

You can increment the number in each text layer based on its position in the comp's layer list using the "index" function. Like this:
"task \r" + index

Make a box for your first text, parent it to your text, duplicate both, then make sure all the text layers are at the top of your comp list, etc:


text:
What's the difference between different kinds of Orbits in AE?
There are 3 kinds of Orbits as I see (Orbit Around Cursor Tool, Orbit Around Scene Tool, and Orbit Around Camera POI), but visually they all work the same. I see no difference between these three kinds. What's the difference between them?

They're not the same. Your cursor, your camera's point of interest and your scene can all be a different points in 3D space.


text:
What is the Resolution and Frame Rate/Bitrate limitation for VP8 Codec
As per the documentation of VP9 Codec in Wikipedia VP9 has the concept of Profile and Level. Based on these profiles and levels it also has some limitations on Resolution/Frame Rate/ Bitrate as follows,

Here I get the concept clearly.
So now I want to know about the limitations of VP8 Codec. How/Where I can find this? (Not found in the Wikipedia documentation)

The maximum resolution VP8 supports is 16383x16383 with no limit on framerate or bitrate.
According to https://www.webmproject.org/about/faq/#vp8-and-vp9-video-codecs

VP8 uses 14 bits for width and height, for a maximum resolution of 16383x16383 pixels.
VP9 uses 16 bits for width and height, for a maximum resolution of 65536x65536 pixels.
Neither VP9 nor VP8 places any restriction on framerate or datarate.


text:
Impact of reencoding an HEVC file: How much loss if I do it in two steps, vs. going directly to a lower bitrate?
My scenario is as follows:

Working with large original 8K file, captured at 100Mb/sec with hvec (h265) codec
The file was reencoded at 50Mb/sec for a reasonable balance between size and quality

Now there's a requirement is to lower the bitrate for space savings, going to 40Mb/sec.
My questions are:

Is there a benefit to go back to the original file and reencode it at 40Mb/sec bitrate, vs. using the already reduced 50Mb/sec file and reencoding that one at 40Mb/sec?
If there's indeed such a benefit, can we quantify it in comparison to the intermediate bitrate version of the file?
If there was a follow-up requirement to further reduce the bitrate to 30Mb/sec, what would be the benefit of going with the 40, 50, or the 100Mb/sec versions?

For reference, ffmpeg would be the encoding tool, using similar options to those listed below:
-c:v hevc_nvenc -preset p6 -tune hq -b:v 40M

Is there a benefit to go back to the original file and reencode it at 40Mb/sec bitrate, vs. using the already reduced 50Mb/sec file and reencoding that one at 40Mb/sec?

Every single time you reencode you will lose quality. If you reencode twice you will lose more quality than if you reencode once. There is absolutely no benefit for not using the original. If you tune for SSIM and then measure the SSIM you can get some idea of how much has been lost.
You're using hevc_nvenc which has about 50% worse quality for the same bitrate compared to libx265. Unless you are streaming this in real time I would strongly recommend using libx265. It is slower because it is CPU-only but it produces a much higher quality bitstream. A 30Mbps video encoded with libx265 will have quality similar to a 50Mbps video encoded with hevc_nvenc.
You might also want to perform 2 pass encoding. This will reduce quality fluctuations that you will get when using 1 pass ABR as you are doing now. Unlike x264, x265 does not use a fast first pass by default. You can make it do that manually with slow-firstpass=0, although it will reduce quality (not nearly as much as using hevc_nvenc though). If "slow" is too slow then you can use a faster preset, or you can use a slower preset if you want better quality at the expense of time:
-c:v libx265 -preset slow -b:v 40M -x265-params "pass=1:slow-firstpass=0"
-c:v libx265 -preset slow -b:v 40M -x265-params "pass=2"

Other options you might want to pass to -x265-params (remember to delimit them with a :):

multi-pass-opt-distortion=1 can improve quality
multi-pass-opt-analysis=1 will speed up the second pass
hme=1 changes the motion estimation algorithm and can improve performance for 8k
aq-mode=4 improves quality for dark areas and edges (but useless for HDR)

If there's indeed such a benefit, can we quantify it in comparison to the intermediate bitrate version of the file?

We can use SSIM to quantify the benefit. I'm doing a scale model of what you did (with 10, 5, and 4Mbps instead of 100, 50, and 40):

The SSIM for 10Mbps -> 5Mbps is 0.989959
The SSIM for 10Mbps -> 4Mbps is 0.988408
The SSIM for 10Mbps -> 5Mbps -> 4Mbps is 0.987522

There are lots of online guides for how to interpret these results, but basically higher is better, and an SSIM of 1.0 means lossless (no change). Btw, even if you INCREASE the bitrate, you'll lose quality (10Mbps -> 15Mbps is 0.997411, and 10Mbps -> 20Mbps is 0.998323)! To not lose quality requires putting the encoder in lossless mode, which increased the bitrate to 70Mbps, for an SSIM of 1.0.
For info, here is the test I did:
# create 10Mbps sample
ffmpeg -f lavfi -i "testsrc2=1920x1080:r=60:d=30" -c:v libx265 -preset faster -tune ssim -b:v 10M 10.mkv

# convert 10Mbps to 5Mbps
ffmpeg -i 10.mkv -c:v libx265 -preset faster -tune ssim -b:v 5M 5from10.mkv

# convert 10Mbps to 4Mbps
ffmpeg -i 10.mkv -c:v libx265 -preset faster -tune ssim -b:v 4M 4from10.mkv

# convert 5Mbps to 4Mbpss
ffmpeg -i 5from10.mkv -c:v libx265 -preset faster -tune ssim -b:v 4M 4from5from10.mkv

# calculate SSIMs between 10Mbps and the converted videos
ffmpeg -i 10.mkv -i 5from10.mkv -lavfi ssim -f null -
ffmpeg -i 10.mkv -i 4from10.mkv -lavfi ssim -f null -
ffmpeg -i 10.mkv -i 4from5from10.mkv -lavfi ssim -f null -

Note that reencoded videos can only be compared using SSIM if it is encoded with -tune ssim, otherwise the comparison will be inaccurate. Also keep in mind that this runs the SSIM algorithm on each frame and averages the results. It does not take into account motion. Tuning for SSIM disables some psychovisual optimizations though, so you should never distribute a video tuned for that. Other popular objective quality comparison algorithms are PSNR and VMAF.

If there was a follow-up requirement to further reduce the bitrate to 30Mb/sec, what would be the benefit of going with the 40, 50, or the 100Mb/sec versions?

Converting from 100 is better than converting from 50, and converting from 50 is better than converting from 40. Every time you reencode a lossy codec, you suffer generation loss. You should always always try to minimize the number of reencoding stages (generations) you go through.
There are special codecs called mezzanine codecs (also called intermediate codecs) which are designed to resist generation loss. However they are very high bitrate (200Mbps easy) and they aren't intended for distribution, just for editing. Examples of mezzanines are ProRes, DNxHD, and Cineform. There are also lossless mezzanines which are completely immune to generation loss, such as FFV1 and HuffYUV, but their bitrates are even higher. Unlike a regular codec, you don't usually specify the bitrate of a mezzanine. The bitrate is only dependent on bit depth, resolution, frame rate, and spacial video complexity (not temporal because these are usually intra-only codecs anyway, i.e. each frame is compressed individually without referencing previous frames).

Thank you. I didn't even know about SSIM and similar metrics, and this is a great comprehensive answer.


text:
Replacing DVD styler files when changing platforms
I had a DVD Styler file that I created on Windows, with paths starting with C:\Users\username\. I am now on Linux and want to change them to /home/username/. I searched online but couldn't find an immediate solution. I also right-clicked on a video item and tried adding with the + button, but it looks for a subtitle or audio file, not a video file.
How can I change all filepaths on the DVD Styler after changing platform?

A DVD Styler file is simply an XML file, so you can replace the files in your favorite text editor. For example, replace this text on windows:
C:\Users\username

with this text on Linux:
/home/username

If changing from Windows to Unix (macOS or Linux), also replace backward slashes, \, with forward slashes / elsewhere in the file.
Note: you can also use relative paths, e.g. assets/  for an image file in the assets directory sibling to the DVD Styler file, or ../ for one directory above.


text:
Animating a 2D character to speak
I have a 2D character created in the following formats .png and .ai. I would like to animate this character to speak some script, but I can't find any tool that can do it. They all support characters created in their service etc.
Do you know any tool for this case?

Adobe Character Animator can do this.  The paid version lets you add your own images, define them as limbs, keyframes for mouth etc, and animate based on keyframes or by using your webcam. It's pretty good.
https://www.adobe.com/products/character-animator.html
It's included as part of the Adobe creative suite I think.
If you're confident with After Effects, you could also look at Duik. It's a free but very complicated & powerful way to animate 2D rigs, using bones and 'inverse kinematics'
Example here for lip syncing using Duik:


text:
Importing still images to Premiere Pro from Photoshop
I'm producing a documentary film. I'll be using Premiere Pro (for the first time).
I have tons of still images, all prepped in Photoshop (which I've been using for years).
I know Premiere can import the PSD files. But considering I only need the image, and have no need to work with the layers, I feel that's overkill.
I would like to simply import the images, without losing quality. (The resolution of the images is already larger than needed in Premiere.)
Is it safe to import PNG and JPEG files into Premiere? What are the risks? Should I just import the PSD files, assuming that guarantees the best quality image? Is there a standard practice? I'm open to other methods, as well.
Thanks for helping a newbie in video production.

PSDs work fine in Premiere. Import them as Merged layers, and they'll behave just as a JPG or PNG would. I guess there might be a slight performance hit, but I haven't noticed it.
The great thing is when you work like this, any tweaks you need to make to the PSDs while working on your video will immediately show up in Premiere, as soon as you hit save in Photoshop. It's a pretty useful feature.


text:
Does dissolve cut from near to wide shot violate any basic editing grammar conventions?
I know that video editing is not a science and there are always exceptions to rules. However, as a beginner I'd like to stick to the basics and conventions.
I've read in the excellent book "Grammar of the Edit" that cross-dissolve usually means change of time or place. But I've seen a couple of times dissolving from a narrower shot to a wider shot of the same scene, most recently here:

4:19 (where the ticker tape at the statue shows the scenes of players and fans celebrating)

I find this transition delightful and it's little things like these that separate amateur from (more) professional productions.
Is there some other standard case for using dissolve that I've not thought of? Or is this all down to video editing being an art, not a science?

You hit the nail on the head, editing absolutely is an art. That said, there's a little bit of science too.
Transitions other than cuts should (almost) always be used sparingly, especially dissolves. The primary issue with dissolves is that you can see both frames at the same time. In almost all cases, both shots should be static and should have minimal movement, the big exception being repeated patterns (such as water).
A dissolve can be used when you're transitioning between two shots that are either very similar (a match dissolve) or very different, which is what you're suggesting. Used sparingly, what you want to do doesn't violate any traditional conventions, but that doesn't inherently mean you should or shouldn't do it.
The best approach is usually to just try it both ways. Create two clips, one that uses a dissolve and one that uses a cut, and then just watch them and see what you like better. If you can't decide, ask someone else for their opinion. With that said, though, as long as neither transition breaks flow (think, a jarring transition) they're both perfectly acceptable.

Thanks for the insights. It's good to know I'm not violating any basics and that if I "like" it, that's enough to be acceptable in trying to stay professional-looking.


text:
How can I record videos like this one?
I want to produce interactive videos of a few minutes like the one in the link. Is it possible to do this for free, how and with which applications?
See

This video is mostly a screen recording, with the mouse cursor recorded separately from the screen itself. Software like ScreenFlow can do this. The "zoom in and move" animations, along with the gradient background could have been made in After Effects.
If you're on a budget, you could make something similar using the built in Screen Recorder in Quicktime Player and animate it afterwards using the free Davinci Resolve, or another free editor like CapCut.
The video isn't "interactive" in the traditional sense - a user presses play then watches the video linearly. It's no Bandersnatch.


text:
Is it possible to ripple delete a clip in Premiere Pro without selecting it via mouse?
I've began doing some projects with Adobe Premiere Pro, and something that it's annoying to me it's that as someone who makes a lot of highlights videos for social media and has to work with hundreds of takes, I don't seem to find a way to ripple delete a clip without selecting it and then pressing "Delete".
I know that Q works to ripple trim the beginning of the clip, and W works to ripple trim the end of the clip, but I can't figure out how to ripple delete the whole clip.
I saw this video where the uploader gives the following workaround for how to ripple delete:

Press Down to go to the end of the video.
Press Back to go to the last frame of the previous video.
Press Q to ripple trim the beginning of the last video.

I set up a Keyboard Magician macro in order to do this, however I've noticed that using this I still get the last frame of the clip I intended to ripple delete.
So I'm wondering, is there another way to achieve this? Ripple delete the clip under the playhead without selecting it.
Having to click on the video with the mouse in order to ripple delete it really kills the editing flow for me.

I'd do this to achieve a similar thing:

Locate your play head at the start of the region you want to delete
Press I to mark an In Point
Play to locate the end of the region you want to delete
Press O to mark an Out Point
Press ' to ripple delete

This also places the deleted clip in your clipboard.
The  ; next to ' is also useful for lifting and copying, but without the ripple.
I often end up using it, then hitting CMDZ to undo it, which keeps it in the clipboard, but undoes the lift.
NB:
SHIFT I and SHIFT O will jump you your current In or Out point.

Thank you very much. With these shortcuts I was able to set up a Keyboard Magician macro to improve my workflow!


text:
FFmpeg -itsoffset causes visual artifacts and time jumps in WMP and Movies & TV
I'm encountering visual artifacts (screen corruption) and unexpected time jumps when playing a video file generated by FFmpeg in Windows Media Player and Microsoft Movies & TV. The same video plays correctly in PotPlayer, MPV, and VLC.
The command I used to delay the audio by 5 seconds was:
ffmpeg -y -hide_banner -i video.mp4 -itsoffset 5 -i video.mp4 -map 0:v -map 1:a -c copy out.mp4

The output video works as expected in most modern players but exhibits visual corruption and automatically skips to the 00:05 timestamp in Microsoft's players.
I tried removing the -c copy option from the command, or changing the output format to mkv, but neither solved the problem. This is not a problem with the encoding, but with the player's support for MPEG-4 edit list tables.
I aim to produce a video with FFmpeg that will play without issues on any player, including very old ones. Is there a way to tweak FFmpeg parameters or use alternative strategies to ensure the output video is universally compatible across all media players?

Since MS players don't support editlists, you'll have to pad the audio to achieve the offset in a compatible manner.
ffmpeg -i video.mp4 -itsoffset 5 -i video.mp4 -map 0:v -map 1:a -c:v copy -af aresample=async=1:first_pts=0 -y out.mp4


text:
3 input videos - where vid2 follows vid1 whereas vid3 is full length - into 2 halves side-by-side video
There were two simultaneous shootings of the same event,
and there was a break in the shooting with camera1, so there are 2 videos from camera1, one following another, with a few seconds missing in-between.
Camera2 wasn't interrupted so video3 is full-length.
The task is to put a side-by-side full-length video.
There is no difference how would missing seconds be displayed on its half - it may be black or it may display the last frame from vid1 keeping it still, or whatever (although approaches to treat it are welcome).
Thanks

use -itsoffset to delay second video
ffmpeg -i "cam1killer1.mp4" \
-itsoffset 10 -i "cam1killer2.mp4" \
-i "cam2killer3.mp4" -lavfi "
color=black:1280x1000[b];
[b][0]overlay[b];
[b][1]overlay=enable='gt(t,10)'[b];
[b][2]overlay=0:500:shortest=1
" -map 2:a -c:a copy out.mp4 -y

-map 2:a will take audio from camera2


text:
How to get frame number given a timestamp using ffmpeg
My question is based on the answer given here https://stackoverflow.com/a/69693602.
The question asked was

How can I get the frame number closest to a given time (relative to the start of the video) using ffmpeg?

The proposed answer is to use following command and parse the output for frame= value:
ffmpeg -t 01:05 -i input.mp4 -nostats -vcodec copy -y -f rawvideo /dev/null

Using that command with ffmpeg 6.1.1 or higher omits the output of frame= value:
[out#0/rawvideo @ 0x603658390f80] video:10789kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
size=   10789kB time=00:00:07.46 bitrate=11837.3kbits/s speed=2.01e+03x

Does anyone know a solution for that problem with ffmpeg >= 6.1.1?

We may use FFprobe frames counting:
ffprobe -read_intervals "%+01:05.01" -v error -select_streams v:0 -count_packets -show_entries stream=nb_read_packets -of csv=p=0 input.mp4

-read_intervals "%+01:05.01 ..." - stops counting when timestamp reaches 01:05 (add 0.01 for including timestamp 01:05).

Example:
Build input video file input.mp4 for testing (1000 frames at 10fps):
ffmpeg -y -f lavfi -r 10 -i testsrc=size=384x216:rate=1:duration=1000 -vf setpts=N/TB/10 -c:v libx264 input.mp4
Executing:
ffprobe -read_intervals "%+01:05.01" -v error -select_streams v:0 -count_packets -show_entries stream=nb_read_packets -of csv=p=0 input.mp4
Output:
651
Note: The result starts counting from 1.

With a read interval starting at the beginning and the printing of frame properties, this will decode all frames. If the timestamp is, say, 1h30m in a 30 fps stream, that's 162000 frames!

I know, but the original method also traverses all the frames. I assume FFprobe doesn't decode all the frames, just parse all the frames. Your solution is much more efficient, but the output is 647. It is also not going to work when there is no PTS=65.0000 (say it is 65.01) . Please note that I am not trying to compete with your answer. I  had my answer ready after the OP posted the question in Super User, but moved it to Video Production site.

The original method uses -vcodec copy and fffprobe needs to decode frames if show_frames or show_entries frame= is specified.

I forgot about frame reordering. Modified answer.

I updated my answer with -count_packets. It's simpler than my previous solution, and probably faster than my previous solution.

For MP4/MOV files, you could do this as follows:
Say you wanted the frame number for frame at 1:05.00 (65.00s)
Run
ffmpeg -ss 1:05 -copyts -noaccurate_seek -i input.mp4 -vf "select=gte(t\,64.8)*lt(t\,65.20) " -f null -  -v 56 2>&1 | grep -e "timestamp" -e "select_out:0"
For Rotem's test file, this produces
[mov,mp4,m4a,3gp,3g2,mj2 @ ...] stream 0, timestamp 663552, sample 500
[Parsed_select_0 @ ...] n:148.000000 pts:663552.000000 t:64.800000 key:0 interlace_type:P pict_type:P scene:nan -> select:1.000000 select_out:0
[Parsed_select_0 @ ...] n:149.000000 pts:664576.000000 t:64.900000 key:0 interlace_type:P pict_type:B scene:nan -> select:1.000000 select_out:0
[Parsed_select_0 @ ...] n:150.000000 pts:665600.000000 t:65.000000 key:0 interlace_type:P pict_type:P scene:nan -> select:1.000000 select_out:0
[Parsed_select_0 @ ...] n:151.000000 pts:666624.000000 t:65.100000 key:0 interlace_type:P pict_type:B scene:nan -> select:1.000000 select_out:0

So the nearest prior keyframe is #500, and the desired frame is #150 starting from the keyframe, hence an absolute index of 650, starting from 0, thus the 651st frame.
This process keeps the decoding to a minimum. You can alter the radius in the select expression based on the framerate.

Edit: the original method will be restored in ffmpeg 7.1
Edit2: My earlier answer didn't account for frame reordering. Modified process.


text:
How do I check when my video was uploaded instead of when it was published?
I have a video I uploaded as private. I then scheduled the video to go public a few months later. Now that the video is public, YouTube's video manager shows me the video's published date (when it went public) instead of the date it was initially uploaded.
How do I check when my video was initially uploaded to YouTube instead of the date it was published?

To see when a video was initially uploaded, you can check the video analytics in YouTube Studio and display "Since uploaded (lifetime)".

Open YouTube Studio
Select the "Content" icon in the left sidebar
Find the video you want to check and click the "Analytics" icon
Click the time range in the top right and select "Since uploaded (lifetime)"
The initial upload date will be displayed as the first item on the view timeline in the bottom left and as the start of the date range in the top right


text:
How do I change the colour to look as how a color blind person sees for Deuteranopia and Tritanopia on Davinci Resolve?
I don't know much about colour grading unfortunately so I was wondering if anyone could help me find a way to make a video to show the perspective of a Deuteranopia and Tritanopia colour blindness.
I was specifically wondering if someone could tell me the RGB output on Davinci to get the Deuteranopia and Tritanopia colour blindness for my videos.
I found an example for the colour blindness for protanopia in another post here
Change color to look as how a color blind person sees
This is the Tritanopia colour scale in an EBU bar format
[1]: https://i.sstatic.net/fOvJmj6t.png
This is the Deuteranopia colour scale in an EBU bar format
[2]: https://i.sstatic.net/ogJ7JnA4.jpg
Thanks for helping out, it's much appreciated :)

The best way to do this is probably to use a LUT. If you're unfamiliar, you can think of a LUT as a predefined "look" for your video, and they're often used for color correction.
After a quick Google, I found these which  I think would probably work for you. Here's how you can install LUTs in Davinci Resolve. Also, the LUTs at the link I gave you are in .png format, you want them in .cube format. There's plenty of tutorials on how to do this online, here's one to get you started.


text:
How to find out the delay applied to audio tracks in an MKV file?
When using mkvmerge to create MKV files, it is possible to specify the --sync parameter to apply a delay to audio tracks.
Is there any way to find out applied delays (if any) in an existing MKV file?
(mkvinfo does not seem to show them).

mkvinfo -v outputs detailed info about which media frame from which track sits at which time position. So, the task boils down to finding the first mention of a frame from a particular track.
For track 2 for example, the delay can be found this way:
mkvinfo -v file.mkv | head -n1000 | grep "Simple block: key, track number 2," | head -n1 | grep -o '[0-9:.]\+' | tail -n1

The longer the expected delay is, the more first lines of mkvinfo output need to be analysed.


text:
How did ffmpeg cut on a non-keyframe without re-encoding?
Every answer I've seen online says this is not possible. However, using c:v copy on my ffmpeg 6.1 on Termux, it somehow did it: start on exactly the right frame without re-encoding everything. I am pretty sure I did not start exactly on a keyframe as I checked all nearby I-frames in ffprobe.
My only guess is that it kept all the frames back to the previous keyframe and simply doesn't show this to you, as I don't think any frame is re-encoded. But I cannot explain the mysteries of ffmpeg.
Debug output if anyone understands it
$ ffmpeg -v 40 -ss 3:08 -to 4:04  -i 25-02.mp4 -c:v copy 25-02new.mp4
ffmpeg version 6.1 Copyright (c) 2000-2023 the FFmpeg developers
  built with Android (10552028, +pgo, +bolt, +lto, -mlgo, based on r487747d) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362)
  configuration: --arch=aarch64 --as=aarch64-linux-android-clang --cc=aarch64-linux-android-clang --cxx=aarch64-linux-android-clang++ --nm=llvm-nm --pkg-config=/home/builder/.termux-build/_cache/android-r26b-api-24-v0/bin/pkg-config --strip=llvm-strip --cross-prefix=aarch64-linux-android- --disable-indevs --disable-outdevs --enable-indev=lavfi --disable-static --disable-symver --enable-cross-compile --enable-gnutls --enable-gpl --enable-version3 --enable-jni --enable-lcms2 --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgme --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenmpt --enable-libopus --enable-librav1e --enable-libsoxr --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-mediacodec --enable-opencl --enable-shared --prefix=/data/data/com.termux/files/usr --target-os=android --extra-libs=-landroid-glob --disable-vulkan --enable-neon --disable-libfdk-aac
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
[h264 @ 0xb400007824156510] Reinit context to 416x720, pix_fmt: yuv420p
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '25-02.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512                                   compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
  Duration: 00:08:25.70, start: 0.000000, bitrate: 1132 kb/s
  Stream #0:0[0x1](und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(progressive, left), 404x720 (416x720) [SAR 405:404 DAR 9:16], 1129 kb/s, 30 fps, 30 tbr, 15360 tbn (default)                            Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
[out#0/mp4 @ 0xb4000077c41520b0] No explicit maps, mapping streams automatically...
[vost#0:0/copy @ 0xb400007814150a50] Created video stream from input stream 0:0
Output #0, mp4, to '25-02new.mp4':
  Metadata:
    major_brand     : isom                                  minor_version   : 512
    compatible_brands: isomiso2avc1mp41                     encoder         : Lavf60.16.100                       Stream #0:0(und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(progressive, left), 404x720 (0x0) [SAR 405:404 DAR 9:16], q=2-31, 1129 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
    Metadata:
      handler_name    : VideoHandler                          vendor_id       : [0][0][0][0]                    Stream mapping:                                           Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size=       0kB time=-00:00:00.33 bitrate=  -0.0kbits/s No more output streams to write to, finishing.
[out#0/mp4 @ 0xb4000077c41520b0] All streams finished
[out#0/mp4 @ 0xb4000077c41520b0] Terminating muxer thread
[AVIOContext @ 0xb4000077e414bb90] Statistics: 7069406 bytes written, 2 seeks, 30 writeouts
[out#0/mp4 @ 0xb4000077c41520b0] Output file #0 (25-02new.mp4):
[out#0/mp4 @ 0xb4000077c41520b0]   Output stream #0:0 (video): 1690 packets muxed (7050140 bytes);
[out#0/mp4 @ 0xb4000077c41520b0]   Total: 1690 packets (7050140 bytes) muxed
[out#0/mp4 @ 0xb4000077c41520b0] video:6885kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.273214%
size=    6904kB time=00:00:55.96 bitrate=1010.5kbits/s speed=1.18e+03x
[in#0/mov,mp4,m4a,3gp,3g2,mj2 @ 0xb4000077d4157490] Terminating demuxer thread
[in#0/mov,mp4,m4a,3gp,3g2,mj2 @ 0xb4000077d4157490] Input file #0 (25-02.mp4):
[in#0/mov,mp4,m4a,3gp,3g2,mj2 @ 0xb4000077d4157490]   Input stream #0:0 (video): 1693 packets read (7053603 bytes);
[in#0/mov,mp4,m4a,3gp,3g2,mj2 @ 0xb4000077d4157490]   Total: 1693 packets (7053603 bytes) demuxed
[AVIOContext @ 0xb4000077e414cab0] Statistics: 7274496 bytes read, 1 seeks

Yes, when the start point of a MP4 (input -ss) is a non-keyframe, ffmpeg will feed frames from the preceding keyframe. In the output, all those preceding frames till the designated start point will have a negative timestamp. The MP4 muxer will store those frames but add an editlist for the track indicating to a player which frame is the intended start of the playback.

Wow. Is this a new feature or did everyone else just do it wrong?


text:
Understanding how much zoom can be used in post on Insta360 before quality suffers
Starting my videography journey with a Insta360 One X2.
Something which is mystifying for me is how far in I can zoom in post production before I lose quality at a given output resolution.
So the Insta360 Studio software has a concept of FoV and Distortion Control.  Both of these effect the zoom of the final output.
When the intended output is lets say 1080p, there must be some formula based on the resolution of the original footage, where exceeding a combination of FoV and DC results in the reframed output image being zoomed in past what the camera actually captured.
The raw resolution for my footage is 5760x2880.
The field of view is also represented as a angle.  So if my output format is 9:16, 1080x1920 how far in can I bring the image before I am "over zoomed".

The right answer is try it and see. In general I try to not scale above 120% in conventional video

Detail loss will occur as a function of the inverse square law.  That is, a 2X zoom level will result in a 4X loss of quality. A 3X zoom level results in 9X quality loss, etc.


text:
Concatenating video with ffmpeg/mkvmerge is out of order
I'm trying to concatenate these two single frame videos, but they always end up in the wrong order.
I've tried with ffmpeg:
ffmpeg -y -f concat -i filelist.txt -c copy outf.mkv

...where filelist.txt contains:
file '0012890a_9680.mkv'
file '0012890a_692070.mkv'

I've also tried with mkvmerge:
mkvmerge --output outm.mkv 0012890a_9680.mkv + 0012890a_692070.mkv --append-to 1:0:0:0

Both result in a 2 frame video with the frame order reversed.
Examining both resulting files with ffprobe -show_frames, it shows the frames in reverse (some lines omitted):
[FRAME]
key_frame=1
pts=42
pts_time=0.042000
best_effort_timestamp=42
best_effort_timestamp_time=0.042000
duration=41
duration_time=0.041000
pkt_pos=28240
pkt_size=88803

[FRAME]
key_frame=1
pts=0
pts_time=0.000000
best_effort_timestamp=0
best_effort_timestamp_time=0.000000
duration=41
duration_time=0.041000
pkt_pos=7976
pkt_size=20246

It's interesting to note that, according to pkt_pos, the frames are written in correct order, and the PTS is also correct, however the order listed is somehow incorrect.
If I reverse the order of the frames when sending to ffmpeg/mkvmerge, I get expected results. So it seems like the tools really want to put the second frame first.
I've also tried adding -bsf:v setts=ts=N to the ffmpeg command - the resulting PTS for the frames are 1 and 0, indicating correct packet order, but frames listed in reverse.
Does anyone know what's going on and how to solve the issue?


text:
Possible to extract scaled versions from Scalable Video Coding video?
Video can be encoded using Scalable Video Coding (SVC) with either temporal or spatial scalability. Assuming a video is available with SVC, is it possible to extract the different "versions" of the video using ffmpeg or another tool without having to transcode or process the raw video content?


text:
why other apps treat a post processed clip from a video with the same length of original video but it actually is much more less?
I have this script which processes some videos and chops them into clips. So far so good with the script but I don't understand why does other apps treat the shorter clip the same length as the original video, but instead it should be just as many seconds as I want the clip to be.
This is the relevant code which I currently have.
try:
                (
                    ffmpeg
                    .input(video_path, ss=start_time, t=snippet_duration)
                    .output(output_file, vcodec='h264_nvenc', **{
                        'metadata': 'duration={}'.format(snippet_duration),
                        'video_track_timescale': 90000
                    })
                    .run(overwrite_output=True, capture_stdout=True, capture_stderr=True)
                )

            except ffmpeg.Error as e:
                tqdm.write(f"Error processing snippet {i + 1}: {e.stderr.decode('utf-8')}")
                continue


text:
Issue with Color Grading Multicam Sequence in Premiere Pro
I'm having trouble with color grading in a multicam sequence in Premiere Pro.
My workflow:

I’ve created a multicam source sequence (three cameras, each recording in 4K LOG for a 1-hour interview).
I then created a new editing sequence from the source sequence to cut between the different camera angles.

Since the project is heavy, I’m using proxies for editing.
The problem is when I try to apply colour grading directly in the multicam source sequence, the grading doesn't show up in my editing sequence or even the source multicam sequence. I want to apply color grading to the full video clips (without using adjustment layers or having to apply grading to each individual cut) in the source sequence, so I only have to do it once per camera angle.
Occasionally, I briefly see the color grading in the Program Monitor, but it quickly reverts to the flat LOG footage. Oddly, sound adjustments I’ve made in the source sequence carry over to the editing sequence, but not the colour grading. Additionally, I can’t even consistently see the grading in the source sequence itself — the only place I see a preview is in the small window in the Lumetri Color panel under the "Creative" dropdown.
I have checked that track visibility is on, Program Monitor resolution is set to full, FX is enabled.
I'm using a NVIDIA RTX A4000 GPU with 32GB of RAM.
Is there something I’m missing in terms of how color grading should propagate from the source sequence to the editing sequence?
Do I need to flatten the multicam sequence in order to apply grading properly, and if so, does that mean I’d need to color grade each individual cut manually?
Any insights or suggestions would be greatly appreciated!

I often grade the way you're suggesting.
Make sure you open the multi-cam sequence by selecting "Open in Timeline" on the multi-cam sequence from within the Project tab.
From within the opened sequence, double-click the clip you want to grade, so that it appears in the source window.
From there, select the Effect Controls tab, and make sure you've clicked on Source in the tab that is inside the Effect Controls tab:

Drop a Lumetri effect into this empty source effect.
The lumetri effect should now be applied to all sequences that use this clip in your project.
Then from the Project tab, I would drag the multi-cam sequence onto the New Item icon in the bottom right of the Project window, to create a conventional sequence, with the same resolution etc as my multi-cam sequence.

Multicam sequences are still a bit buggy in Premiere even in 2024/2025, and if anything is behaving oddly, the first thing I do is save, quit, and re-open premiere, especially if something associated with the multi-cam sequence has changed, but isn't reflected in my conventional sequence.
You don't need to flatten the multi-cam sequence in order for the grading to appear, so long as it's all applied as source effects, not clip effects.


text:
Looking for a video editor to easily do side-by-side comparisons of video clips
I'm trying to create a video where I compare two video clips side-by-side. In other words, I have one clip on the left (scaled to half size) and the other on the right (scaled to half size), and some text on the bottom of the video. Optimally, it should be easy to start playing one video from an arbitrary point, perhaps jump to a different part of that video (possibly with a fade-out + fade-in), pause it (so that its current still image remains visible) and start the other video at a particular point, pause that, start playing the first video from a particular point, and so on.
I'm looking for a free video editor for Windows (or for Linux) that allows easily doing that. I have tried VSDC and OpenShot, and unless I'm missing something neither allows doing that very easily, and it's really laborious, time-consuming and awkward to achieve that. I also tried looking at DaVinci Resolve, but it requires registering so I didn't bother going through that trouble without knowing in advance if it would allow easily doing that.

Most editors can do this Capcut & Resolve are good free options.


text:
HEVC video_delay is larger in decoder than demuxer error message
I would like transcode a file with HEVC to a live stream with AVC.  The HEVC demuxer reports many errors:
[hevc @ 0x25a3140] video_delay is larger in decoder than demuxer
If you want to help, upload a sample of this file to https://streams.videolan.org/upload/ and contact the ffmpeg-devel mailing list. (ffmpeg-devel@ffmpeg.org)

This error message was reported as Defect #6019 8 years ago. Around that time, in this post, Jun Zhao suggested a patch to which Michael Niedermayer objected to.  I couldn't find anything more recent.
As requested by the error message, I did send an email to the ffmpeg-devel list but no answer.
The input file is an MPEG-TS (MPTS) and I am selecting only one service. The command line is below. I can upload the file somewhere if needed.
Any suggestions to solve this problem?
Thanks
Danny
ffmpeg -loglevel info \
  -i inputFile.ts \
  -map 0:p:167 -map -0:s \
  -filter_complex [p:167:v]scale=1920x1080 \
  -r 25 \
  -force_key_frames 'expr:gte(t,n_forced*1)' \
  -c:v libx264 -b:v 6M -x264-params scenecut=0 -threads 2 \
  -c:a aac -b:a 64k -ac 2 \
  -f mpegts -muxrate 8M 'udp://192.168.2.10:5555?overrun_nonfatal=1&pkt_size=1316&buffer_size=10000000&fifo_size=10000000'

ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 8 (GCC)
  configuration: --enable-ni_quadra --enable-ni_logan --extra-ldflags='-L/mnt/swdevel/Torque/lib3p64 -L/lib' --extra-cflags='-I/mnt/swdevel/Torque/include -I/mnt/swdevel/Torque/ext/extinclude -I/include' --disable-static --enable-shared --disable-cuda --disable-cuvid --disable-nvenc --enable-gpl --enable-nonfree --enable-libfreetype --enable-libfontconfig --enable-libx264 --enable-libx265 --enable-libsrt --disable-indev=android_camera --disable-indev=sndio --disable-outdev=sndio --disable-outdev=xv --enable-libv4l2 --enable-libzvbi --enable-vaapi --enable-libmfx --enable-libdrm --enable-indev=alsa --enable-indev=v4l2 --enable-libsoxr --bindir=/mnt/swdevel/Torque/bin64 --datadir=/mnt/swdevel/Torque/ext/ffmpeg-tqBuild --docdir=/mnt/swdevel/Torque/ext/doc --libdir=/mnt/swdevel/Torque/lib3p64 --shlibdir=/mnt/swdevel/Torque/lib3p64 --incdir=/mnt/swdevel/Torque/ext/extinclude/ffmpeg --mandir=/mnt/swdevel/Torque/ext/ffmpeg-tqBuild --disable-doc --enable-x86asm --extra-ldflags='-lm -ldl -L/lib64 -ldrm' --enable-pthreads --extra-libs=-lpthread --disable-debug --disable-stripping

  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100


text:
What metadata tag should I use for the date/time an analog video was digitized?
When scanning old prints and slides, I use ExifTool to write the MWG:CreateDate tag into the digital files to record when the scans were done. Now I'm having old 8mm home camcorder videotapes digitized, and I'd like to write a digitization timestamp into the metadata for the video files. The QuickTime spec has tags for other image metadata tags I use in my work with prints and slides, but I can't find a tag for representing when the digital version of the video was created. The closest I can find is com.apple.quicktime.creationdate, but that's for when the video was originally recorded, not when it was digitized.
I don't want to rely on file creation or modification dates, because they can change as files are copied around, uploaded and sent, etc.
What is a good way to embed the digitization date into the metadata of a video file? I'm currently using H.264-encoded video in an MP4 container.
Thanks.

MP4 files can hold XMP metadata and there are three tags which correspond to the three main EXIF tags. While technically they are for images, they can be used for videos.
Using exiftool, you could write
XMP:ModifyDate, which would be the last date when the video stream was modified.
XMP:DateTimeOriginal, which would be when the video was actually created.
The date the video was digitized is a bit messy in this case. Originally, the EXIF for XMP standard used the XMP:CreateDate for this purpose. This has been changed recently to  XMP:DateTimeDigitized.
There is the IPTC Video Metadata standard but it does not have an entry for when the video was digitized.


text:
ffmpeg - set language to mapped stream (audio and subtitle)
I use some software for live streams/channels, it has option/field to put ffmpeg commands. When i have stream with multiple audio and subtitles streams and i want only few select, i use this option (example): -map i:0x04B1 -map i:0x04B2 -map i:0x04DF  -map i:0x04E0 In this example it mapped video (first stream), audio (second stream) and two subtitles (third and fourth stream).
And its okay. But when i play stream (output) players (like VLC) show subtitles as Unknown or just DVB subtitles. I mean, it works but does not show language of subtitle or audio.
In original stream, i mean input, it normally shows language of every subtitle and audio. Its probably software's fault.
Can i add something to ffmpeg command, not only to map stream but also add language info to mapped stream?
Thank you in advance
I tried some solutions. | I need to convert decimal numbers of streams to hexadecimal for ffmpeg command to work.


text:
What desktop video player allows fluid backward seeking?
I just discovered that the stock video player on my Android phone allows me to do smooth (24fps) seeking by dragging the seek cursor. It works perfectly for studying details about dance patterns from a recording, as opposed to seeking back to play a 4-second section repeatedly, which is always approximate. Dragging allows going over the exact part I want repeatedly.
I've tried this with VLC and MPC-HC on Windows but the scrolling is choppy and it achieves 4 fps at best. Seeking is still choppy after adjusting "Small backward seek" to 200ms in MPC-HC.
Is there a desktop player and/or some setting that can be adjusted to enable smooth rewind and forward like the Android player ?


text:
How to group GoPro recordings by folder?
By default, GoPro recordings are saved in one folder, and recordings are cut into several files as shown below:
Recording ID 356:

GX010356.MP4
GX020356.MP4
GX030356.MP4
GX040356.MP4

Recording ID 357:

GX010357.MP4
GX020357.MP4
GX030357.MP4

That stupid naming convention makes it hard to select all files of the same recording, since sorting files doesn't help.
How to group GoPro videos by folder?
E.g., I want all the files of Recording ID 356:

GX010356.MP4
GX020356.MP4
GX030356.MP4
GX040356.MP4

in folder 356, and all the files of Recording ID 357:

GX010357.MP4
GX020357.MP4
GX030357.MP4

in folder 357.

I found a Python script that does the job: https://github.com/im-PJs/GoPro-File-Organizer/tree/main:
# Author: https://github.com/im-PJs
import os
import shutil
import sys
from collections import defaultdict

def organize_files(base_path):
    # Count occurrences of each file number for .MP4 files
    mp4_count = defaultdict(int)
    file_paths = defaultdict(list)

    # First pass to collect file information
    for filename in os.listdir(base_path):
        if filename.endswith(('.MP4', '.LRV', '.THM')):
            file_number = filename[4:8]
            file_paths[file_number].append(filename)
            if filename.endswith('.MP4'):
                mp4_count[file_number] += 1

    # Save original paths before moving
    with open(os.path.join(base_path, 'original_paths.txt'), 'w') as f:
        # Second pass to move files if there are multiple MP4s with the same number
        for file_number, files in file_paths.items():
            if mp4_count[file_number] > 1:  # Create folder only if more than one MP4 file with the same number
                folder_name = f"Video_{file_number}"
                folder_path = os.path.join(base_path, folder_name)
                if not os.path.exists(folder_path):
                    os.makedirs(folder_path)

                for filename in files:
                    original_path = os.path.join(base_path, filename)
                    new_path = os.path.join(folder_path, filename)
                    shutil.move(original_path, new_path)
                    print(f"Moved '{filename}' to '{new_path}'")
                    f.write(f"{new_path}={original_path}\n")

def undo_organization(base_path):
    paths_file = os.path.join(base_path, 'original_paths.txt')

    if not os.path.exists(paths_file):
        print("No organization to undo.")
        return

    # Read the original paths and move files back
    with open(paths_file, 'r') as file:
        for line in file:
            new_path, original_path = line.strip().split('=')
            shutil.move(new_path, original_path)
            print(f"Moved '{new_path}' back to '{original_path}'")

    # Remove empty folders
    for folder in os.listdir(base_path):
        folder_path = os.path.join(base_path, folder)
        if os.path.isdir(folder_path) and not os.listdir(folder_path):
            os.rmdir(folder_path)
            print(f"Removed empty folder: {folder_path}")

    os.remove(paths_file)
    print("Undo complete.")

if __name__ == "__main__":
    # Use the current directory as the base directory
    base_directory = os.getcwd()
    if len(sys.argv) > 1 and sys.argv[1] == '-undoLast':
        undo_organization(base_directory)
    else:
        organize_files(base_directory)

Tested on Windows 10 21H2 Pro with Python 3.11.9, running python main.py.
Before:
(test) N:\GoPro\test>tree /F
Folder PATH listing for volume 2024GoPro
Volume serial number is 0746-89B1
N:.
    main.py
    GL010356.LRV
    GL020356.LRV
    GL030356.LRV
    GX010356.MP4
    GX010356.THM
    GX020356.MP4
    GX020356.THM
    GX030356.MP4
    GX030356.THM
    GL010355.LRV
    GL020355.LRV
    GL030355.LRV
    GL040355.LRV
    GX010355.MP4
    GX010355.THM
    GX020355.MP4
    GX020355.THM
    GX030355.MP4
    GX030355.THM
    GX040355.MP4
    GX040355.THM
    GL010357.LRV
    GL020357.LRV
    GL030357.LRV
    GL040357.LRV
    GL050357.LRV
    GX010357.MP4
    GX010357.THM
    GX020357.MP4
    GX020357.THM
    GX030357.MP4
    GX030357.THM
    GX040357.MP4
    GX040357.THM
    GX050357.MP4
    GX050357.THM

No subfolders exist

After:
N:.
│   main.py
│   original_paths.txt
│
├───Video_0356
│       GL010356.LRV
│       GL020356.LRV
│       GL030356.LRV
│       GX010356.MP4
│       GX010356.THM
│       GX020356.MP4
│       GX020356.THM
│       GX030356.MP4
│       GX030356.THM
│
├───Video_0355
│       GL010355.LRV
│       GL020355.LRV
│       GL030355.LRV
│       GL040355.LRV
│       GX010355.MP4
│       GX010355.THM
│       GX020355.MP4
│       GX020355.THM
│       GX030355.MP4
│       GX030355.THM
│       GX040355.MP4
│       GX040355.THM
│
└───Video_0357
        GL010357.LRV
        GL020357.LRV
        GL030357.LRV
        GL040357.LRV
        GL050357.LRV
        GX010357.MP4
        GX010357.THM
        GX020357.MP4
        GX020357.THM
        GX030357.MP4
        GX030357.THM
        GX040357.MP4
        GX040357.THM
        GX050357.MP4
        GX050357.THM

To undo the file move: python main.py -undoLast


text:
hev1 vs hvc1 - which is better?
I have several MP4 videos that is a mix of hev1 and hvc1 codecs. Some of the playback devices are iPhones.
Is it better to tag them as hev1 or hvc1?

hvc1 is better because macOS apps like QuickTime Player do not support video codec H.265 with Codec ID hev1.
ffmpeg can losslessly and very fast fix that H.265 with Codec ID hev1 issue with:
ffmpeg -i input.mp4 -c copy -tag:v hvc1 output.mp4

ffmpeg does not properly support copying metadata so you might want to copy it from the original with:
exiftool -m -overwrite_original -api QuickTimeUTC=1 -api LargeFileSupport=1 -tagsFromFile input.mp4 -All:All '-FileCreateDate<QuickTime:CreateDate' '-FileModifyDate<QuickTime:CreateDate' output.mp4

On the other hand IINA and VLC should have no issues with playing any decent new or old codec.


text:
Intel hardware acceleration all filters work except transpose
I have been using vpp_qsv for hardware accelerated filtering for a couple of years.  I have used deinterlate, denoise, detail, framerate, saturation, contrast, brightness, cs, ch, cx, cy, w, and h and they all work as expected.  But now I want to do a horizontal flip: transpose=hflip, and it fails.  I get
[Parsed_vpp_qsv_0 @ 000001666e1ab240] Sync failed
using ffmpeg 4.4, and
[Parsed_vpp_qsv_0 @ 0000025c44c36900] Error running VPP: unsupported (-3) [vf#0:0 @ 0000025c44b86440] Error while filtering: Function not implemented [vf#0:0 @ 0000025c44b86440] Task finished with error code: -40 (Function not implemented) [vf#0:0 @ 0000025c44b86440] Terminating thread with return code -40 (Function not implemented) [vost#0:0/libx265 @ 0000025c44b9e580] Could not open encoder before EOF [vost#0:0/libx265 @ 0000025c44b9e580] Task finished with error code: -22 (Invalid argument) [vost#0:0/libx265 @ 0000025c44b9e580] Terminating thread with return code -22 (Invalid argument) [out#0/mp4 @ 0000025c44b8e440] Nothing was written into output file, because at least one of its streams received no pack
using ffmpeg 7.0, both on Windows 10 with the latest Intel driver from the Intel website.  Does anyone have any insight on why this filter doesn't work, and how to fix it?


text:
How to overlay only part of a video using ffmpeg or a similar tool (not the full frame)
I have two videos (let's say 1.mp4 and 2.mp4). I would like to overlay only the top-right quarter of 2.mp4 onto 1.mp4.
The output would be a single video with the content from 1.mp4 in the top left, bottom left and bottom right, and the content from 2.mp4 in the top right.
(To be clear, I don't mean shrinking anything. The output would show only three quarters of the frame from 1.mp4 and only one quarter of the frame from 2.mp4)
Is it possible to do this with ffmpeg or something similar?

ffmpeg 7 → ffmpeg -i 1.mp4 -i 2.mp4 -lavfi " [1][0]scale=rw/2:rh/2[a]; [0][a]overlay=W/2:0 " -c:a copy out.mp4, ffmpeg <7 → [1][0]scale2ref=main_w/2:main_h/2[a][b]; [b][a]overlay=main_w/2:0

OP wants to overlap a cropped portion, not a rescaled video.

Ah, my bad. this? → ffmpeg -i 1.mp4 -i 2.mp4 -lavfi " [1]crop=iw/2:ih/2:iw/2:0[a]; [0][a]overlay=W/2:0 " -c:a copy /tmp/out.mp4

Any Video Converter is recommended to overlay another video on a video file. You can use it to customize overlays to suit any video by changing their position, size, duration, or create your own layout such as side by side.

Run the Any Video Converter program, and click the "Video Overlay" option on the main interface.

Choose the video file you want to overlay with other video.

Click the "Add" button to choose another video you want to overlap the original one. You can add multiple videos and adjust the transparency of the video.

Click the "Start" button to start the video overlay.

When it finishes, the output file will be listed in the "History" panel automatically. You can open the folder to view the video which has been modified.

authors: Баяр Гончикжапов


text:
Black/Empty frames at beginning of video file when file Cut using FFmpeg
0
I am cutting a video using ffmpeg and facing the Black/Empty frame at the start issue.
When Codec Copy -
-y -hide_banner -ss 0:1:0 -i file:///private/var/mobile/Containers/Data/PluginKitPlugin/94588A94-C451-426E-9E9C-A7555B6E7C25/tmp/trim.EC876F92-04BE-41F8-ADF3-8CFC84669908.MOV -to 0:1:33 -t 0:0:33 -vcodec copy -acodec copy -avoid_negative_ts make_zero -async 1 file:///var/mobile/Containers/Data/Application/728D5FED-5E6B-4A37-8DE4-E63E47B06DF9/Documents/FILES/FileCopy.mov

When Re-Encoding -
-y -hide_banner -ss 0:1:0 -i file:///private/var/mobile/Containers/Data/PluginKitPlugin/94588A94-C451-426E-9E9C-A7555B6E7C25/tmp/trim.9F2B209B-B657-471A-AE87-7C464FF10812.MOV -to 0:1:33 -t 0:0:33 -vcodec libx264 -vf scale=1280:720 -pix_fmt yuv420p10le -color_range tv -colorspace bt2020nc -color_primaries bt2020 -color_trc arib-std-b67 -crf 28 -preset ultrafast -acodec copy -avoid_negative_ts make_zero -async 1 file:///var/mobile/Containers/Data/Application/728D5FED-5E6B-4A37-8DE4-E63E47B06DF9/Documents/FILES/FileReEncode.mov

Both commands address almost the same issue. Provided a sample gif file below to show the scenario.


text:
Parsing quicktime MOOV atoms to mp4 DASH MOOV atoms
I am exploring Kaltura nginx vod module to get DASH playback which having single audio and video quicktime file(.mov).
But Playback is failing and player is not even requesting m4s segments with below error once it makes init-a1-x3.mp4 request.
Video Element Error: MEDIA_ERR_SRC_NOT_SUPPORTED (CHUNK_DEMUXER_ERROR_APPEND_FAILED: RunSegmentParserLoop: stream parsing failed. append_window_start=0 append_window_end=146.11)
Upon reviewing MOOV ATOMS in audio I am observing qt_version, wave, frma etc using mp4dump from bento. So in order to fix this used the below ffmpeg command just to parse the quicktime MOOV atoms to mp4 MOOV atoms on DASH output init mp4 file.
ffmpeg -v debug -i init-a1-x3.mp4 -c copy -f mp4 -movflags +dash -movie_timescale 9000  init-ffmpeg.mp4 -y

After replacing the init-a1-x3.mp4 with init-ffmpeg.mp4 now player not giving error but observed AV sync issues.
So again checked the MOOV atoms using bento mp4dump but timescale in mdhd got changed to different value with the input file. So please let me know any tool which can parse the only MOOV atoms of quicktime to proper DASH mp4 format.
Please let me know if any further more info is required or sample file.


text:
How to add a gaps (slugs?) of specified time (interval) between clips in Adobe Premiere Pro CS6 with subsequent ability to modify time of these gaps?
Please help with Subject!
It is necessary to insert gaps (by blank clips or whatever) between video clips on timeline with specified time of gap (e.g. 3 sec) with ability to modify all inserted gaps to another time (e.g. 5 sec) in the future not by one by one manually.
Thank you in advance!


text:
How to specify `ffmpeg` streams based on the number of their channels
When encoding multiple audio streams with different channel layouts, I want to specify different bit-rate for each, for example 96kb/s as the default and 192kb/s for the second 5.1 stream (see also https://wiki.xiph.org/Opus_Recommended_Settings).
-c:a libopus -b:a 96k -filter:a:1 channelmap=channel_layout=5.1 -b:a:1 192k

But since a:1 is just a positional specifier, I need to inspect the file beforehand to check what audio tracks it has and what are their layouts.
Is it possible to use some more advanced specifiers to do this kind of mapping automatically? I envision something like -b:a:{channels=5.1} 192k to set the higher bitrate for all 5.1 audio streams.
(For why I need to use the channelmap= filter, see https://trac.ffmpeg.org/ticket/5718.)


text:
How to condense a video without reencoding with ffmpeg
I have a long video with idle sections that I want to remove.
Because it is long, I don't want to have
to reecode the video, but to use stream copy.
For example if I have vid.mkv I might want to take
00:15:00 to 01:37:00 and 01:53:00 to 02:07:00
and keep only those in the resulting movie.
(I've found the parts of this in separate places
but thought it would be useful to have a record
of the entire process here, so answering my own question.)

Avidemux nicely displays IPB frames. I have used it to losslessly cut and trim movies to the I frames and save with its MP4v2 Muxer (occasionally I have had to revert to its MP4 Muxer if the former for some reason did not work).

To avoid transcoding, ffmpeg requires cutting the movie at i-frames,
since that's where it has a full image.
If you put the time with -ss into ffmpeg, it will start from the
latest i-frame before or equal to the requested time.
This suggests the strategy:

Find i-frames
Cut out segment videos
Concat segment videos

To find the i-frames, you can use the Python script
# ffprobe -read_intervals 1:00:00%1:00:05 -show_frames vid.mkv 2>&1 | ./iframe_pts.py

import datetime
import sys

pts = '0'
pts_prefix = 'pts_time='
for line in sys.stdin:
  line = line.strip()
  if line.startswith(pts_prefix):
    pts = line[len(pts_prefix):]
    continue
  if line == 'pict_type=I':
    print('%s %s' % (pts, datetime.timedelta(seconds=float(pts))))

Running this with short intervals will tell you where the i-frames are
and you can pick whichever one is appropriate for what you're working on.
Note that you should start on an i-frame and then stop right before an
i-frame since ffmpeg might try to pad the video otherwise.
To cut out the selected segments,
ffmpeg -i vid.mkv -ss 00:15:00 -t 01:38:00 -c:a copy -c:v copy s0.mkv

where -ss is the start time and -t is the duration.
Then, you can join the segments together with the concat filter.
First, make input.txt.
file 's0.mkv'
file 's1.mkv'

Then run ffmpeg to join the segments together.
ffmpeg -f concat -i input.txt -c:a copy -c:v copy condensed.mkv


text:
How to properly detelecidine a video?
I'm using HandBrake to recode a DVD which appears to have a 3:2 pulldown: the framerate is 29.97 fps and two frames out of five have combing artifacts. The result with "Detelecine=Default" looks OK, except for some scene changes, where the ghost horizontal lines from the previous frame remain.
However, according to Avisynth docs there is a solution:

Why am I getting combed frames after some scene changes?

These scene changes require a third (backward) match. Decomb will test the third match only if "post" is set to any value other than 0.

How can I enable a backward match in HandBrake, or any other easy-to-use video converter. I get it that I can make it work with Avisynth, but I'd prefer a ready-made solution to what appears to be a well-known problem, without involving scripting.

It appears that HandBrake is unable to make backward matches, at least currently. The documentation for version 1.8.0 defines the following command line options:
   -9, --detelecine[=string]
                           Detelecine (ivtc) video with pullup filter
                           Note: this filter drops duplicate frames to
                           restore the pre-telecine framerate, unless you
                           specify a constant framerate
                           (--rate 29.97 --cfr)
                           Custom Format:
                               skip-left=s:skip-right=s:skip-top=s:
                               skip-bottom=s:strict-breaks=s:plane=p:parity=p:
                               disable=d
                           Default:
                               skip-left=1:skip-right=1:skip-top=4:
                               skip-bottom=4:plane=0
   --no-detelecine         Disable preset detelecine filter

Avidemux has an almost appropriate plugin, but, as the description says,

Donald Graft Telecide. Replace ivtc pattern by progressive frames. Video stays at 30 fps.

Which means the plugin leaves you with the task to remove duplicate frames from the video. This would be every 5th frame, but the starting index can potentially be different after each scene change.
So, Avisynth seems to be the only viable option currently.


text:
Stacking two video or more layers in Adobe Premiere lags when playing preview
When stacking two video layers in my timeline, preview playback lags really bad.
My sequence settings all seem right, same frame rate.
If I render the timeline it works smoothly.
my raw footage is FHD 10bit, MOV file, codec H.264_422_longgop 100.
MY PC specs are: intel i7 14th, RTX 4070 12GB, 64GB RAM, SSD.
This happens randomly in the middle of editing the project. sometime wont happen at all.
Is this a normal behaviour? if so what can I do to solve this?


text:
Aligning the audio from a file to the video of another with MKVToolNix
I sometimes have to use the French audio from a video file to insert it into another video in English, and I use MKVToolNix for this (with MKVToolNixGUI).
I know how to add a delay, and even how to stretch the video if it's not the same length as the other (I take the time of one event at the beginning and another at the end of each video, and put the results in seconds as a fraction in the ‘Stretch by:’ input field), but sometimes, if the sound is correctly adjusted at the beginning, it's not at the end.
Is there anything I don't know to help me achieve the right result, or is there a better programme for performing this operation?
I looked on this forum and found advice about Shutter Encoder, but it seems a bit complicated for me, I cannot have the wanted result, and I'd rather use MKVToolNixGUI that I know better if possible.


text:
How to specify -pix_fmt in a ffmpeg preset file?
In my preset file ~/.ffmpeg/hevc_nvenc-1080p.ffpreset I'm able to pass various options such as
profile:v=main10
tune:v=hq

But attempting to pass
pix_fmt:v=p010le

fails with
/home/p/.ffmpeg/hevc_nvenc-1080p.ffpreset: Invalid option or argument: 'pix_fmt:v=p010le
', parsed as 'pix_fmt:v' = 'p010le'
Failed to set value '1080p' for option 'vpre': Invalid argument
Error parsing options for output file +pix_fmt:v.

Is there a way how to pass this option in a preset?
If not, is there a way to tell which options are allowed and which not in presets?


text:
AV1 Encoding Parameters Help - Reduce Variation in Quality from frame to frame
I'm encoding 16 bpc PNG sequences into various lossy video formats for archival purposes because the file sizes are so big. I'm only considering codecs which support 444 and at least 10 bit color. Right now the best I've found seem to be HEVC and AV1. In ffmpeg, they both support the yuv444p12le pixel format, which is great. However, I need help tuning the encode parameters to try and balance the the following as best as possible:

Maximize the minimum quality of any given frame of the animation
Keep the filesize relatively low.

Right now with AV1 I'm finding that the PSNR per frame tends to be a lot "spikier" than HEVC; and I don't know why. I attached an image as an example, where the blue line is the PSNR over each frame when encoding with AV1 while the pink is with HEVC.

The SSIM is similar, but not as bad:

The exact commands used to encode each are included below:
AV1:
ffmpeg -framerate 60 -i "input%04d.png" -y -pix_fmt yuv444p12le -c:v libaom-av1 -crf 15 -b:v 500M -cpu-used 1 -row-mt 1 -tiles 2x2 output.mkv
HEVC:
ffmpeg -framerate 60 -i "input%04d.png" -y -c:v libx265 -preset veryslow -crf 9 -pix_fmt yuv444p12le "output.mp4"
I don't like how there are big dips in the AV1 PSNR occurring repeatedly (the spikes downward in the blue line on the PSNR plot), since it means there are big differences from one frame to the next, even if the overall average PSNR level is pretty high. I'd prefer to make it smoother if possible.
It doesn't seem to be an issue with HEVC.
Do you have suggestions for changes I can make to my AV1 encoding command which will prevent those spikes? If so, can you also explain why those changes will help?


text:
How to edit YouTube videos ? I am mainly interested in special Pro-Editing
Generally in YouTube, we listen to songs of films. Now the songs of any film are lyrical with no video and also sometimes are lyrical with videos.
When we are listening to a lyrical video song of any film, then generally the video consists of the pictures of the "Hero" and the "Heroine" of that film.
But suppose I want to cut the pictures of the "Hero" and the "Heroine" and I want to paste my Father's and my Mother's pictures in their place.
Is it possible to do that ? If, then how can I do that ?
Day after tomorrow I am having my Mother's Birthday. I really want to surprise her with this thing.
Please inform me if anyone know.

Please anyone reply if they know. I really want to surprise my Mom with this.

If I understand your question: there is a video on YouTube which consists of still images and has continuous audio. You wish to replace the still images with images of your parents.
This is an outline of steps which you could take. How easy it is to do will depend on your access to software and knowledge of how to use it.

Download the video from YouTube. This can be accomplished using browser plugins, online services, or dedicated software. Note that downloading videos from YouTube which are not your property is a violation of YouTube's Terms of Service.
Import the video into video editing software. Examples are Adobe Premiere Pro, Apple Final Cut Pro, Shotcut, Microsoft Clipchamp, iMovie, and Lightworks.
Import the still pictures of your parents into the video editor.
Open the video file in your video editor. You should see a timeline-style display of the video and audio tracks.
Place the images in the timeline where you want them to appear. If you want to completely remove all other still pictures, delete the imported video track and replace it with a new track containing your images.
Compile and render the video into a video format such as MP4 or MOV.

Each video editing application will have its own ways to accomplish this. This workflow outline is not specific to any particular software, although it is based on my knowledge of Adobe Premiere Pro and Adobe AfterEffects.


text:
Camera Tracker Solve Failed: Not Enough Tracks – How to Fix This?
I’m working in Fusion and trying to use the Camera Tracker node to track a video clip, but I keep getting the following error:
Solve failed: not enough tracks
Mathematically, there must be at least 8 tracks in common between consecutive frames to reconstruct the camera motion. In practice, you want a lot more than 8 (typically 150-ish) for a robust and accurate solution. You requested to solve the range [7.0, 1000.0] and there were only 2 tracks in common between frames 7.0 and 8.0.
How to Fix This?

Project file: https://drive.google.com/file/d/1POmNLC9GcdCr4xIF2d-Tx7AQ5Po4MjF2/view?usp=sharing

Video: https://drive.google.com/file/d/1fTjZ-usMRomV53JJqZ-Cu434hnvTRE6y/view?usp=sharing

Increase the number of tracks: In general, you need a higher number of tracks to get an accurate camera solve. Ensure that the scene has enough distinguishable features or points that can be tracked over time. Here are a few tips:
•   Improve contrast: If the video is too flat or low-contrast, it may be difficult for the tracker to identify enough points. Try adjusting the contrast of the clip using color grading or pre-processing.
•   Increase the tracking range: The user might be tracking over too few frames, or the range could be too short. Extending the range can help, but this will also require more points to track accurately.
•   Check the settings in the Camera Tracker: Make sure that the tracking settings are set to find and use more tracks. In some cases, setting a higher threshold for track detection can help.

Manually add more tracking points: If the automatic tracker can’t find enough features, try manually adding some points to the scene, especially in areas with high detail or contrast.

Use a different tracker: If the Camera Tracker is still not working, try using other tracking nodes like the Point Tracker in Fusion, which can sometimes be more flexible in tracking different scenes.

Check the footage quality: Low resolution or blurry footage may hinder tracking accuracy. If possible, use higher quality or more stable footage for better tracking results.

Check for motion blur: If there’s a lot of motion blur, it may be difficult for the tracker to distinguish points between frames. You might need to use a footage that has less blur or consider a motion blur reduction technique.

Improve the feature distribution: The footage may have insufficient feature points spread across the scene. In this case, you can adjust the settings to search for features more widely across the frame.

Try manual keyframing: As a last resort, if automatic tracking is failing, manual keyframing of camera motion could be used.

How can I change from which to which point the video should be tracked

authors: Михаил Байраков


text:
Audio is mostly silent with cracking stuttering noises every few seconds
The audio of my video file is faulty. I tried both VLC player and CLI ffplay.
What I'm observing is that the audio is "stuttering" in the sense that it's silent for the most part with cracking noises every few seconds. I'd compare it to sound during fast forwarding or the sound from an old analog radio receiver when adjusting the frequency to switch between different radio stations. It doesn't last for longer than the blink of an eye, then the audio is silent again.
Here is the output from FFmpeg if that helps:
$ ffmpeg -i faulty.mp4
ffmpeg version 7.0.2-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 8 (Debian 8.3.0-6)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'faulty.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf59.27.100
  Duration: 02:50:15.25, start: 0.000000, bitrate: 1686 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1297 kb/s, 24 fps, 24 tbr, 90k tbn (default)
      Metadata:
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 381 kb/s (default)
      Metadata:
        handler_name    : SoundHandler
        vendor_id       : [0][0][0][0]
At least one output file must be specified

I feel like I've encountered this issue before, but I don't remember if I just gave up or if there was a way to resolve it. Maybe the default FFmpeg AAC decoder is incompatible with this particular file? Is VLC using the same decoder? What can I try to fix it?

Try re-encoding the audio with FFmpeg: The AAC audio codec may be causing the issue, so re-encoding the audio could help. Try the following FFmpeg command to convert the audio to a different format (e.g., MP3 or re-encoded AAC):

ffmpeg -i faulty.mp4 -c:v copy -c:a aac -b:a 192k output.mp4 -

This will re-encode the audio while copying the video stream as is. If you suspect an issue with the AAC decoder, you could also try re-encoding it to MP3:

ffmpeg -i faulty.mp4 -c:v copy -c:a libmp3lame -b:a 192k output.mp4 -

Check for corrupted file: It’s possible the file is corrupted, causing playback issues. Try using the -err_detect ignore_err option with FFmpeg to ignore errors during decoding and see if it helps:

ffmpeg -err_detect ignore_err -i faulty.mp4 -c:v copy -c:a copy output.mp4 -

Check the sample rate: The sample rate of 44.1 kHz in the file might be mismatched with your playback software. Try converting it to 48 kHz:

ffmpeg -i faulty.mp4 -c:v copy -c:a aac -ar 48000 -b:a 192k output.mp4 -

Use VLC’s native decoder: VLC might be using a different audio decoder, which could explain why it plays differently. You can test if re-encoding the file outside of VLC solves the issue, or see if updating VLC to the latest version resolves any compatibility issues.
Try a different player: If FFmpeg and VLC are both having trouble, try using a different player like MPC-HC or PotPlayer to see if the issue persists. This can help narrow down if it’s a software issue or a problem with the file itself.
Check for damaged frames or packets: You can also try extracting the audio track alone to analyze or repair it:

ffmpeg -i faulty.mp4 -vn -acodec copy output_audio.aac -

After extracting the audio, try playing it in a different audio player to see if the issue is specific to the video file.


text:
How is log profile video produced?
I understand the advantage of using log profiles and how one would edit video with such a profile. But what is actually done to create a video with a log profile, given that the camera sensor elements are linear with respect to light level?
It would seem that either the analog output of the sensor is modified in a nonlinear way or the digital values are adjusted with a logarithmic lookup table. I doubt the former but don't get how the latter would avoid clipping already in the numbers.

It is a mix. Sensors are "linear" (but ISO, etc.), but not 8-bits (we are still analogue). Reading means to have a ADC, and you "hardcode" the logic there, and only later you have numbers (so possible "clipping").

OETF Optical Electric Transfer Function

@GiacomoCatenazzi  So if I understand you are saying that my first guess, which I had erroneously discounted, was the correct one - the linear analog output of the sensor is modified in some nonlinear way prior to the analog to digital conversion. That makes sense.

Maybe. I think it is built directly in ADC chip (selectable resistors). ADC is not necessarily linear: it depends on each resistance you put it in it for each output level, so I would assume a simple logic will select few alternate resistance sets and you get different responses. Also it this stage (or nearby stages) you can do it in a parallel way (and fast).

When working with log profiles, the raw data from the sensor is adjusted through a process that preserves dynamic range, rather than just being a simple linear-to-log conversion. They should focus on how LUTs (Look-Up Tables) are used to map the data into a log space, which keeps highlight and shadow details intact for later grading. You can also suggest they explore specific tutorials on how log profiles are used in post-production color grading to see how this transformation works in practice.


text:
Ffmpeg capturing webcam and audio: audio stops playing towards the end of the video
This is the command:
ffmpeg -f alsa -i default -i /dev/video0 test.mp4
Playing the recording during the last 5 seconds there is no audio.
It's always 5 seconds, regardless the length of the video
So now i need the audio to perfectly match the video, what should i do?


text:
Convert mpeg4 to mp4 (x265 + aac)
I have legacy mpeg4 videos that do not play on chromecast and would like to convert - I believe x265 will be the best option for me, so while attempting to convert, while I have video, I no longer have audio.  I attempted to convert the media with this command line:
f=somefile.mpeg4
ffmpeg -i $f -c:v libx265 -vtag hvc1 $f.x265
ffmpeg -i $f -c:v libx265 -vtag hvc1 -map 0:a $f.x265
ffmpeg -i $f -c:v libx265 -vtag hvc1 -c:a copy $f.x265

The first and third command line work, but yield no audio stream.  The second one fails, complaining that an x265 video can only have 1 video stream.
My video looks like this:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'somefile.mpeg4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42isom3gp6
    creation_time   : 1970-01-03T01:38:05.000000Z
  Duration: 00:02:22.63, start: 0.000000, bitrate: 3565 kb/s
  Stream #0:0[0x2](eng): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 848x480 [SAR 1:1 DAR 53:30], 3430 kb/s, 23.40 fps, 25 tbr, 1k tbn (default)
    Metadata:
      creation_time   : 1970-01-03T01:38:05.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x1](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 129 kb/s (default)
    Metadata:
      creation_time   : 1970-01-03T01:38:05.000000Z
      handler_name    : Sound Media Handler
      vendor_id       : [0][0][0][0]

The thing that worked for me was to encode it twice, not ideal, but it works:
ffmpeg -i in.mp4 out.mp4
ffmpeg -i out.mp4 -c:v libx265 -vtag hvc1 -c:a copy out.mp4.mp4

Once I'm done, I remove the first file:
rm -f out.mp4
mv out.mp4.mp4 out.mp4