> We're working on a project to have a highly parallelized video rescaling
> pipeline but we're finding that small audio and video jumps are being
> introduced into the video when we put the video back together. Can anyone
> point out anything we're doing wrong?

The video scaling is the main reason to parallelize (distribute?) the 
transcoding process right? Try only splitting/transcoding/concatenating the 
video stream in segments, then transcoding the audio separately. I don’t think 
it’ll be necessary to do this in segments so I’d recommend just transcoding the 
whole audio stream in one go but segmenting it shouldn’t be a problem if you 
really want. (Probably)

> The pipeline has 3 stages. First we split the video using the segment muxer
> $ ./ffmpeg -i samples/2160p-h264-aac-20mbs-2m.mp4 -muxdelay 0 -muxpreload 0
> -g 96 -keyint_min 96 -sc_threshold 0 -c copy -copyts -f segment -fflags
> +genpts -segment_time 4 -segment_format mpegts out/segments/%04d.ts

You’re codec copying so most of these options don’t really make sense I 
believe. And if you separate the video stream, it obviates the muxdelay and 
muxpreload options I think. Try:

$ ./ffmpeg -i samples/2160p-h264-aac-20mbs-2m.mp4 -an -c copy -f segment 
-segment_list segment_list.txt -segment_list_format ffconcat -segment_time 4 
-segment_time_delta 1 -segment_format mpegts out/segments/%04d.ts

The -segment_time_delta should allow some variation in segment lengths so it 
doesn’t cut at exactly 4 seconds. If you’re transcoding individual segments 
that doesn’t sound like it would work too well.

The segment list allows for easier concatenation later.

I don’t know the reasoning behind copying timestamps, but if it’s needed for 
some reason, then copy the ts timestamps by adding -segment_format_options 
mpegts_copyts=1

> Then we change the scale for each of the segments using:
> $ ./ffmpeg -i out/segments/0000.ts -muxdelay 0 -vf scale=1920:1080 -c:v
> libx264 -profile:v main -c:a aac -copyts out/segments/out00.ts

Transcode/scale the video only segments like so

$ ./ffmpeg -i out/segments/0000.ts -vf scale=1920:1080 -c:v
libx264 -profile:v main out/segments/out00.ts

> And then we rejoin
> $ ./ffmpeg -i
> "concat:out/segments/out00.ts|out/segments/out01.ts|out/segments/out02.ts"
> -c copy -copyts out/transcoded.mp4
> 
And when you concatenate, use the concat demuxer instead of the protocol.

$ ffmpeg -f concat -i segment_list.txt -i samples/2160-h264-aac-20mbs-2m.mp4 
-map 0:v -map 1:a -c:v copy -c:a ac3 output3.mp4

Obviously add whatever audio encoding parameters you want at this point

> For reference the commands are using ffmpeg 4.1.3 and the video I tested
> the commands with
> http://downloads.4ksamples.com/videos/PUPPIES%20BATH%20IN%204K%20(ULTRA%20HD)(Original_H.264-AAC)%20(4ksamples.com).mp4

Also I’m not entirely sure about this, but the framerate on this video seems 
very strange. Maybe you should check that out also.
_______________________________________________
ffmpeg-user mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Reply via email to