ffmpeg 命令心得_非常重要:
h5播放器,在pc和安卓端,播放没有任何问题,但是在ios端播放就有问题
猜测这是因为播放器需要添加参数,但是如果我们将ios端能兼容的视频格式在原视频的基础上转换一下,其实也能解决
ffmpeg -i test.m4v -f image2 -vf fps=fps=50 -qscale:v 2 text/%05d.jpg
|
ffmpeg -i input.mp4 -force_key_frames "expr:gte(t,n_forced*8)" -strict -8 -c:a aac -c:v libx264 -hls_time 8 -f hls -map 0 -f segment -segment_list index.m3u8 %04d.ts
# ffmpeg -i input.mp4:指定输入文件为 input.mp4。 # -force_key_frames "expr:gte(t,n_forced*8)":强制在每 8 帧之后生成一个关键帧,其中 t 表示当前时间戳,n_forced 表示之前已经强制生成的关键帧数量。 # -strict -8:使用严格模式,以保证生成的 HLS 文件在各种平台上兼容性更好。 # -c:a aac -c:v libx264:指定音频和视频的编码格式分别为 AAC 和 H.264。 # -hls_time 8:设置每个 HLS 切片的时间长度为 8 秒。 # -f hls -map 0:指定输出格式为 HLS,并映射输入文件的全部内容到输出中。 # -segment_list index.m3u8 %04d.ts:生成每个切片的索引列表文件 index.m3u8,其中 %04d 表示用数字填充四位数的占位符,用于表示每个切片的序号。
# 总结起来,该命令的作用是将输入的 MP4 文件进行处理,生成一系列按时间切片分割的 HLS 格式的视频片段,并生成相应的索引列表文件。
|
ffmpeg -i input.mp4 -threads 12 -s 1920x1080 -r 30000/1001 -video_track_timescale 30k -c:a copy output.mp4
# ffmpeg -i v1.mp4:指定输入文件为 input.mp4。 # -threads 12:指定使用 12 个线程进行视频处理。 # -s 1920x1080:指定输出视频的分辨率大小为 1920x1080。 # -r 30000/1001:指定输出视频的帧率为 30000/1001 fps。 # -video_track_timescale 30k:指定输出视频的时间尺度为 30k time scale。 # -c:a copy:将输入文件的音频流直接复制到输出文件中。 # newv1.mp4:指定输出文件名为 output.mp4。
# 总结起来,该命令的作用是将输入的 MP4 文件进行处理,生成一个新的 MP4 文件,该文件的分辨率大小为 HD 720p,帧率为 30000/1001 fps,时间尺度为 30k time scale,音频流保持不变。
|
ffmpeg -i input.mp4 -f segment -segment_time 8 -segment_format mpegts -segment_list index.m3u8 -c copy -bsf:v h264_mp4toannexb -map 0 %04d.ts
# ffmpeg -i input.mp4:指定输入文件为 input.mp4。 # -f segment -segment_time 8 -segment_format mpegts -segment_list index.m3u8:将输入文件分割成多个片段,每个片段的时长为 8 秒,格式为 MPEG-TS,生成的索引列表文件名为 index.m3u8。 # -c copy -bsf:v h264_mp4toannexb:将输入文件的视频流直接复制到输出文件中,并使用 h264_mp4toannexb 过滤器将视频流转换为 Annex B 格式。 # -map 0 %04d.ts:将输入文件的全部内容映射到输出文件中,输出的每个片段的文件名为 %04d.ts,其中 %04d 表示用数字填充四位数的占位符,用于表示每个片段的序号。
# 总结起来,该命令的作用是将输入的 MP4 文件进行处理,生成一系列时长为 8 秒的 MPEG-TS 格式的视频片段,并将每个片段的文件名保存到 index.m3u8 文件中。同时,将视频流转换为 Annex B 格式。
|
ffmpeg -i input.mp4 -bsf:a aac_adtstoasc -threads 12 -s 1920x1080 -r 30000/1001 -video_track_timescale 30k -c:a copy output.mp4
# ffmpeg -i input.mp4:指定输入文件为 input.mp4。 # -bsf:a aac_adtstoasc:使用 aac_adtstoasc 过滤器将输入文件的音频流转换为公有格式。 # -threads 12:指定使用 12 个线程进行视频处理。 # -s 1920x1080:指定输出视频的分辨率大小为 1920x1080。 # -r 30000/1001:指定输出视频的帧率为 30000/1001 fps。 # -video_track_timescale 30k:指定输出视频的时间尺度为 30k time scale。 # -c:a copy:将输入文件的音频流直接复制到输出文件中。 # output.mp4:指定输出文件名为 output.mp4。
# 总结起来,该命令的作用是将输入的 MP4 文件进行处理,生成一个新的 MP4 文件,该文件的分辨率大小为 1920x1080,帧率为 30000/1001 fps,时间尺度为 30k time scale,音频流保持不变,并将结果保存为 output.mp4 文件。同时,使用 aac_adtstoasc 过滤器将音频流转换为公有格式。
|
合并视频>>>到通用版本:
ffmpeg -i input.mp4 -i v1.mp4 -threads 24 -bsf:a aac_adtstoasc -filter_complex "concat=n=2:v=1:a=1" -s 1920x1080 -r 30000/1001 -video_track_timescale 30k output.mp4
# ffmpeg -i input.mp4 -i v1.mp4:指定输入文件为 input.mp4 和 v1.mp4。 # -threads 24:指定使用 24 个线程进行视频处理。 # -bsf:a aac_adtstoasc:使用 aac_adtstoasc 过滤器将输入文件的音频流转换为公有格式。 # -filter_complex "concat=n=2:v=1:a=1":使用 concat 过滤器将两个输入文件连接起来。n=2 表示输入文件的数量,v=1 表示视频流的数量,a=1 表示音频流的数量。 # -s 1920x1080:指定输出视频的分辨率大小为 1920x1080。 # -r 30000/1001:指定输出视频的帧率为 30000/1001 fps。 # -video_track_timescale 30k:指定输出视频的时间尺度为 30k time scale。 # output.mp4:指定输出文件名为 output.mp4。
# 总结起来,该命令的作用是将 input.mp4 和 v1.mp4 两个文件进行处理,将它们连接成一个新的 MP4 文件,并将结果保存为 output.mp4 文件。该文件的分辨率大小为 1920x1080,帧率为 30000/1001 fps,时间尺度为 30k time scale,音频流保持不变,并将音频流转换为公有格式。同时,使用 24 个线程进行视频处理。
|