我正在尝试将视频剪辑(MP4,yuv420p)从30 fps转换为24 fps.帧数是正确的,所以我的输出应该从30fps的20分钟变为24fps的25分钟.其他一切都应该保持不变.
尽量尝试我用ffmpeg尝试的所有内容都会转换帧速率,但会更改帧数以保持相同的持续时间或更改持续时间而不更改帧速率.
所以我一直在尝试这样的事情;
ffmpeg -y -r 30 -i seeing_noaudio.mp4 -r 24 seeing.mp4
Run Code Online (Sandbox Code Playgroud)
(我在Windows上这样做,但通常是在linux上).这会转换帧速率但会丢帧,因此总持续时间不会改变.
或者我试过了
ffmpeg -y -i seeing_noaudio.mp4 -filter:v "setpts=1.25*PTS" seeing.mp4
Run Code Online (Sandbox Code Playgroud)
这改变了持续时间而不是帧率.
当然,我应该可以使用单个ffmpeg命令执行此操作,而无需重新编码,或者甚至有些人建议返回原始原始帧.
请帮忙
Gya*_*yan 37
重新编码:
ffmpeg -y -i seeing_noaudio.mp4 -vf "setpts=1.25*PTS" -r 24 seeing.mp4
Run Code Online (Sandbox Code Playgroud)
无需重新编码:
第一步 - 将视频提取到原始比特流
ffmpeg -y -i seeing_noaudio.mp4 -c copy -f h264 seeing_noaudio.h264
Run Code Online (Sandbox Code Playgroud)
具有新帧率的Remux
ffmpeg -y -r 24 -i seeing_noaudio.h264 -c copy seeing.mp4
Run Code Online (Sandbox Code Playgroud)
kel*_*lin 33
您可以考虑使用fps
过滤器。它不会改变视频播放速度:
ffmpeg -i <input> -filter:v fps=fps=30 <output>
Run Code Online (Sandbox Code Playgroud)
将 fps 从 59.6 降低到 30 效果很好。
只需在输入文件之前的“ -r”选项中指定所需的帧率:
ffmpeg -y -r 24 -i seeing_noaudio.mp4 seeing.mp4
Run Code Online (Sandbox Code Playgroud)
选项会在它们之后影响下一个文件。输入文件前的“ -r”强制重新解释其标题,就好像视频是以给定的帧率编码的一样。无需重新压缩。有一个小的实用程序avifrate.exe可以直接修补avi文件头以更改帧速率。上面的ffmpeg命令本质上是一样的,但是必须复制整个文件。
一般来说,要将视频的 FPS 设置为 24,您几乎总是可以执行以下操作:
使用音频且无需重新编码:
# Extract video stream
ffmpeg -y -i input_video.mp4 -c copy -f h264 output_raw_bitstream.h264
# Extract audio stream
ffmpeg -y -i input_video.mp4 -vn -acodec copy output_audio.aac
# Remux with new FPS
ffmpeg -y -r 24 -i output_raw_bitstream.h264 -i output-audio.aac -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)
如果要查找视频格式(本例中为 H264),可以使用 FFprobe,如下所示
ffprobe -loglevel error -select_streams v -show_entries stream=codec_name -of default=nw=1:nk=1 input_video.mp4
Run Code Online (Sandbox Code Playgroud)
这将输出:
h264
在如何分析文件并检测文件是否为 H.264 视频格式中阅读更多信息?
重新编码:
ffmpeg -y -i input_video.mp4 -vf -r 24 output.mp4
Run Code Online (Sandbox Code Playgroud)
据我所知,ffmpeg
如果不重新编码,就无法做到这一点。我有一个 24fps 文件,我想要 25fps 来匹配我正在使用的其他一些材料。我使用的命令ffmpeg -i inputfile -r 25 outputfile
与 webm、matroska 输入完美配合,并利用编码器生成 h264、matroska 输出:Lavc56.60.100
您可以以 6fps 完成同样的事情,但正如您所指出的,持续时间不会改变(这在大多数情况下是一件好事,否则您将失去音频同步)。如果这不符合您的要求,我建议您尝试这个答案,尽管我的经验是它仍然重新编码输出文件。
为了获得最佳的帧精度,您最好按照之前的建议解码为原始流。我为此使用了一个脚本,如下所示:
#!/bin/bash
#This script will decompress all files in the current directory, video to huffyuv and audio to PCM
#unsigned 8-bit and place the output #in an avi container to ease frame accurate editing.
for f in *
do
ffmpeg -i "$f" -c:v huffyuv -c:a pcm_u8 "$f".avi
done
Run Code Online (Sandbox Code Playgroud)
显然,该脚本期望当前目录中的所有文件都是媒体文件,但可以轻松更改以将处理限制为您选择的特定扩展名。请注意,当您解压缩为原始流时,文件大小将增加相当大的系数。