--- title: FFmpeg date: 2024-11-26T12:31:05+08:00 lastmod: 2024-11-29T11:09:36+08:00 --- # FFmpeg - **尝试使用** **​`-t`​**​ **限制推流时间**:如果你只是想推送视频的一个片段,可以限制推流时间来排查问题。例如,推送 10 分钟的视频: ```bash ffmpeg -re -t 600 -i "2024-11-02 15.01.19-视频-等风也等你-奶爸、浮生、长安、哪吒 #电影推荐 #动漫推荐.mp4" -c:v libx264 -c:a aac -f flv rtmp://192.168.1.2/stream/movie ``` - **尝试增加** **​`-bufsize`​**​ **参数**:大文件时,可能需要增加缓冲区大小。尝试调整 `-bufsize` 选项,例如: ```bash ffmpeg -re -i "2024-11-02 15.01.19-视频-等风也等你-奶爸、浮生、长安、哪吒 #电影推荐 #动漫推荐.mp4" -c:v libx264 -c:a aac -bufsize 1M -f flv rtmp://192.168.1.2/stream/movie ``` - **减少视频分辨率或比特率**:如果推流压力太大,可以尝试降低视频分辨率或比特率: ```bash ffmpeg -re -i "2024-11-02 15.01.19-视频-等风也等你-奶爸、浮生、长安、哪吒 #电影推荐 #动漫推荐.mp4" -c:v libx264 -crf 28 -c:a aac -f flv rtmp://192.168.1.2/stream/movie ``` ​`-crf 28` 参数会压缩视频大小,减轻推流时的负担。 - **强制生成时间从而确保流的同步**:`-fflags +genpts` ```json ffmpeg -re -fflags +genpts -i "2024-11-02 15.01.19-视频-等风也等你-奶爸、浮生、长安、哪吒 #电影推荐 #动漫推荐.mp4" -c:v libx264 -c:a aac -f flv rtmp://192.168.1.2/stream/movie ``` - **将文件当作源推送到RTMP服务器** ```json ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName 参数解释 -r 以本地帧频读数据,主要用于模拟捕获设备。表示ffmpeg将按照帧率发送数据,不会按照最高的效率发送 ``` - **将直播文件保存至本地** ```json ffmpeg -i rtmp://server/live/streamName -c copy dump.flv ``` - **将其中一个直播流中的视频改用H.264压缩,音频不变,推送到另外一个直播服务器** ```json ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream ``` - **将其中一个直播流中的视频改用H.264压缩,音频改用aac压缩,推送到另外一个直播服务器** ```json ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream ``` - **将其中一个直播流中的视频不变,音频改用aac压缩,推送到另外一个直播服务器** ```json ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream ``` - **将一个高清流复制为几个不同清晰度的流重新发布,其中音频不变** ```json ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k ``` - **将当前摄像头以及扬声器通过DSHOW采集,使用H.264/AAC压缩后推送到RTMP服务器** ```json ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name ``` - **将一个JPG图片经过H.264压缩后输出为MP4文件** ```json ffmpeg -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4 ``` - **将MP3转化为AAC** ```json ffmpeg -i 20120814164324_205.wav -acodec libfaac -ab 64k -ar 44100 output.aac ``` - **将AAC文件转化为flv文件,编码格式采用AAC** ```json ffmpeg -i output.aac -acodec libfaac -y -ab 32 -ar 44100 -qscale 10 -s 640*480 -r 15 output.flv ```