{ "version": "https://jsonfeed.org/version/1", "title": "FFmpeg", "description": "\u4e00\u4e2a\u5b8c\u6574\u7684\uff0c\u8de8\u5e73\u53f0\u7684\u97f3\u89c6\u9891\u5f55\u5236\u3001\u8f6c\u6362\u548c\u4f20\u8f93\u89e3\u51b3\u65b9\u6848", "home_page_url": "go/ffmpeg", "feed_url": "feed/ffmpeg.json", "icon": "https://cdn.v2ex.com/navatar/e205/ee2a/910_large.png?m=1589098075", "favicon": "https://cdn.v2ex.com/navatar/e205/ee2a/910_normal.png?m=1589098075", "items": [ { "author": { "url": "member/FH0", "name": "FH0", "avatar": "https://cdn.v2ex.com/gravatar/e5ca2f9f97e7a7fe504c074376438957?s=73&d=retro" }, "url": "t/1201015", "date_modified": "2026-03-25T06:53:46+00:00", "content_html": "

\u4eca\u5929\u7a81\u53d1\u5947\u60f3\u7528 gpt-5.4-xhigh \u5206\u6790\u4e86\u4e00\u4e0b\uff0c\u539f\u6765\u662f\u6ca1\u6709\u52a0\u4e0a AVFMT_FLAG_NOPARSE \u8fd9\u4e2a\u6807\u5fd7\u4f4d\uff0c\u6240\u4ee5 ffmpeg \u9ed8\u8ba4\u9700\u8981\u7b49\u5f85\u4e0b\u4e00\u5e27\u7684\u8d77\u59cb\u7801\u3002

\n

\u73b0\u5728\u5b9e\u65f6\u6027\u6ca1\u95ee\u9898\u4e86\uff0c\u6211\u5df2\u7ecf\u628a\u9879\u76ee\u4e2d\u81ea\u5df1\u7684\u534f\u8bae\u5220\u6389\u4e86\u3002\u539f\u6765\u4e0d\u662f\u6211\u89e3\u51b3\u4e86\u4e00\u4e2a\u5927\u96be\u9898\uff0c\u800c\u662f ffmpeg \u65e9\u5df2\u5b89\u6392\u597d\u7684\u4e00\u5207\u88ab\u6211\u5ffd\u89c6\u4e86\u3002

\n

t/1167069

\n", "date_published": "2026-03-25T06:52:49+00:00", "title": "[FFmpeg \u7684\u5b9e\u65f6\u6027\u592a\u7cdf\u7cd5\u4e86] \u540e\u7eed", "id": "t/1201015" }, { "author": { "url": "member/yoyoluck", "name": "yoyoluck", "avatar": "https://cdn.v2ex.com/avatar/2e9c/cfa5/631565_large.png?m=1765964412" }, "url": "t/1179557", "date_modified": "2025-12-17T11:26:46+00:00", "content_html": "

\u6709\u670b\u53cb\u641e\u8fc7 ffmpeg qsv \u786c\u4ef6\u7f16\u7801\u5417\uff1f\n\u6700\u8fd1\u6709\u4e00\u4e2a\u4efb\u52a1\uff0c\u9700\u8981\u5c06\u97f3\u89c6\u9891\u7ecf\u8fc7 ffmpeg \u5e93\u7f16\u7801\u6210 h264/h265 \u4e4b\u540e\u9001\u5230\u6d77\u5eb7\u7684\u786c\u76d8\u5f55\u50cf\u673a\n\u76ee\u524d\u9047\u5230\u95ee\u9898\u662f \u4f7f\u7528 libx264 \u8f6f\u7f16\u7801\u7684\u6570\u636e\u901a\u8fc7 rtsp \u9001\u5230\u6d77\u5eb7\u5f55\u50cf\u673a\u80fd\u6b63\u5e38\u663e\u793a\n\u901a\u8fc7 intel \u7684 qsv \u786c\u4ef6\u7f16\u7801\u7684 h264/h265 \u7b49\u9001\u5230\u6d77\u5eb7\u5f55\u50cf\u673a\u53ea\u80fd\u663e\u793a\u51fa\u5173\u952e\u5e27\uff0c\u5176\u4ed6 P \u5e27\u65e0\u6cd5\u663e\u793a\uff08\u6ca1\u6709 B \u5e27\uff09\uff0c\u901a\u8fc7\u82f1\u4f1f\u8fbe\u663e\u5361\u786c\u4ef6\u7f16\u7801\u7684 h264/h265 \u9001\u5230\u6d77\u5eb7\u80fd\u6b63\u5e38\u663e\u793a\u3002\n\u4ee5\u4e0a\u6240\u6709\u7f16\u7801\u540e\u7684\u6570\u636e\u90fd\u662f\u901a\u8fc7 rtsp \u670d\u52a1\u63a8\u9001\u7684\uff0c\u6240\u6709\u7684\u5728 vlc \u7b49\u64ad\u653e\u5668\u4e0a\u90fd\u80fd\u6b63\u5e38\u663e\u793a\u3002\n\u76ee\u524d\u5927\u90e8\u5206\u90fd\u662f\u6838\u663e\uff0c\u6240\u4ee5\u60f3\u89e3\u51b3 qsv \u786c\u4ef6\u7f16\u7801\u95ee\u9898\n\u4e0b\u9762\u662f\u90e8\u5206\u521d\u59cb\u5316\u4ee3\u7801\uff0c\u6709\u507f\u534f\u52a9

\n
 // \u67e5\u627e\u7f16\u7801\u5668\uff08\u652f\u6301\u786c\u4ef6\u7f16\u7801\uff09\n video_codec_ = FindBestEncoder(config_.use_hardware_encoding);\n // \u68c0\u67e5\u662f\u5426\u4f7f\u7528\u4e86\u786c\u4ef6\u7f16\u7801\u5668\n video_using_hardware_ = (strcmp(video_codec_->name, \"libx264\") != 0 && strcmp(video_codec_->name, \"libx265\") != 0);\n // \u521b\u5efa\u7f16\u7801\u5668\u4e0a\u4e0b\u6587\n video_codec_ctx_ = avcodec_alloc_context3(video_codec_);\n // \u8bbe\u7f6e\u7f16\u7801\u53c2\u6570\n video_codec_ctx_->width = config_.width;\n video_codec_ctx_->height = config_.height;\n video_codec_ctx_->time_base.num = 1;\n video_codec_ctx_->time_base.den = config_.fps;\n video_codec_ctx_->framerate.num = config_.fps;\n video_codec_ctx_->framerate.den = 1;\n video_codec_ctx_->bit_rate = config_.bitrate;\n video_codec_ctx_->gop_size = config_.fps * 3; // \u6bcf 3 \u79d2\u4e00\u4e2a\u5173\u952e\u5e27\n video_codec_ctx_->has_b_frames = 0;\n video_codec_ctx_->max_b_frames = 0;\n video_codec_ctx_->refs = 1;\n\n // \u6839\u636e\u7f16\u7801\u5668\u7c7b\u578b\u8bbe\u7f6e\u50cf\u7d20\u683c\u5f0f\n if (video_using_hardware_)\n {\n // \u786c\u4ef6\u7f16\u7801\u5668\u4f7f\u7528 NV12 \u683c\u5f0f\uff08 QSV \u3001NVENC \u3001AMF \u90fd\u652f\u6301\uff09\n video_codec_ctx_->pix_fmt = AV_PIX_FMT_NV12;\n }\n else\n {\n // \u8f6f\u4ef6\u7f16\u7801\u5668\u4f7f\u7528 YUV420P\n video_codec_ctx_->pix_fmt = AV_PIX_FMT_YUV420P;\n }\n\n video_codec_ctx_->flags = AV_CODEC_FLAG_LOW_DELAY | AV_CODEC_FLAG_GLOBAL_HEADER;\n video_codec_ctx_->rc_buffer_size = config_.bitrate; // \u7f13\u51b2\u533a\u5927\u5c0f\u7b49\u4e8e\u7801\u7387\n video_codec_ctx_->rc_max_rate = config_.bitrate; // \u6700\u5927\u7801\u7387\n video_codec_ctx_->rc_min_rate = config_.bitrate/5; // \u6700\u5c0f\u7801\u7387\n\n if (!video_using_hardware_)\n {\n // \u8f6f\u4ef6\u7f16\u7801\u5668\u7279\u5b9a\u53c2\u6570\n video_codec_ctx_->thread_count = 4;\n if (strcmp(video_codec_->name, \"libx264\") == 0)\n {\n // libx264 \u7279\u5b9a\u9009\u9879\n if (!config_.preset.isEmpty())\n {\n av_opt_set(video_codec_ctx_->priv_data, \"preset\", config_.preset.toStdString().c_str(), 0);\n }\n\n if (!config_.tune.isEmpty())\n {\n av_opt_set(video_codec_ctx_->priv_data, \"tune\", config_.tune.toStdString().c_str(), 0);\n }\n\n if (!config_.profile.isEmpty())\n {\n av_opt_set(video_codec_ctx_->priv_data, \"profile\", config_.profile.toStdString().c_str(), 0);\n }\n\n av_opt_set(video_codec_ctx_->priv_data, \"x264opts\", \"bframes=0:rc-lookahead=0:scenecut=0\", 0);\n }\n else if (strcmp(video_codec_->name, \"libx265\") == 0)\n {\n // libx265 \u7279\u5b9a\u9009\u9879\n if (!config_.preset.isEmpty())\n {\n av_opt_set(video_codec_ctx_->priv_data, \"preset\", config_.preset.toStdString().c_str(), 0);\n }\n\n if (!config_.tune.isEmpty())\n {\n av_opt_set(video_codec_ctx_->priv_data, \"tune\", config_.tune.toStdString().c_str(), 0);\n }\n\n // H.265 \u7684 profile: main, main10, main-intra \u7b49\n if (!config_.profile.isEmpty())\n {\n QString profile_to_use = config_.profile;\n\n // \u68c0\u67e5 profile \u662f\u5426\u4e0e H.265 \u517c\u5bb9\n // H.264 \u7684 profile (baseline, high) \u4e0d\u80fd\u7528\u4e8e H.265\n if (profile_to_use == \"baseline\" || profile_to_use == \"high\")\n {\n profile_to_use = \"main\"; // H.265 \u7684\u9ed8\u8ba4 profile\n LOG(WARNING) << \"H.265 \u4e0d\u652f\u6301 profile \\\"\" << config_.profile.toStdString()\n << \"\\\", \u5df2\u81ea\u52a8\u8c03\u6574\u4e3a \\\"main\\\"\";\n }\n\n av_opt_set(video_codec_ctx_->priv_data, \"profile\", profile_to_use.toStdString().c_str(), 0);\n }\n\n // H.265 \u4f4e\u5ef6\u8fdf\u53c2\u6570\n av_opt_set(video_codec_ctx_->priv_data, \"x265-params\",\n \"bframes=0:rc-lookahead=0:scenecut=0:aq-mode=0\", 0);\n }\n }\n else\n {\n // \u786c\u4ef6\u7f16\u7801\u5668\u7279\u5b9a\u53c2\u6570\n const char* codec_name = video_codec_->name;\n\n if (strcmp(codec_name, \"h264_qsv\") == 0 || strcmp(codec_name, \"hevc_qsv\") == 0)\n {\n // Intel QSV \u7f16\u7801\u5668\u53c2\u6570\n // QSV \u7684 preset \u503c: veryfast, faster, fast, medium, slow, slower, veryslow\n av_opt_set(video_codec_ctx_->priv_data, \"preset\", \"veryfast\", 0);\n av_opt_set(video_codec_ctx_->priv_data, \"async_depth\", \"1\", 0); // \u4f4e\u5ef6\u8fdf\n av_opt_set(video_codec_ctx_->priv_data, \"look_ahead\", \"0\", 0); // \u5173\u95ed\u524d\u77bb\n\n // H.264 \u4e13\u7528\uff1a\u6dfb\u52a0\u4e25\u683c\u7684\u517c\u5bb9\u6027\u53c2\u6570\u4ee5\u89e3\u51b3\u6d77\u5eb7\u5f55\u50cf\u673a\u64ad\u653e\u95ee\u9898\n if (strcmp(codec_name, \"h264_qsv\") == 0)\n {\n // \u5f3a\u5236\u4f7f\u7528 baseline profile \uff08\u5982\u679c\u914d\u7f6e\u4e2d\u6307\u5b9a\u4e86\uff09\n if (!config_.profile.isEmpty())\n {\n av_opt_set(video_codec_ctx_->priv_data, \"profile\", config_.profile.toStdString().c_str(), 0);\n }\n\n // \u5f3a\u5236 CAVLC \u71b5\u7f16\u7801\uff08 baseline profile \u5fc5\u9700\uff0cH.264 \u6807\u51c6\uff09\n // QSV \u9ed8\u8ba4\u53ef\u80fd\u4f7f\u7528 CABAC \uff0c\u8fd9\u4f1a\u5bfc\u81f4\u4e0d\u517c\u5bb9 baseline profile\n av_opt_set(video_codec_ctx_->priv_data, \"cavlc\", \"1\", 0);\n\n // \u8bbe\u7f6e H.264 level \uff08 40 = level 4.0 \uff0c\u652f\u6301 1080p@30fps \uff09\n // \u4e0e NVENC \u4fdd\u6301\u4e00\u81f4\uff0c\u63d0\u9ad8\u517c\u5bb9\u6027\n av_opt_set(video_codec_ctx_->priv_data, \"level\", \"40\", 0);\n\n // \u7981\u7528 B \u5e27\u7b56\u7565\uff08\u786e\u4fdd\u771f\u6b63\u4e0d\u4f7f\u7528 B \u5e27\uff09\n av_opt_set(video_codec_ctx_->priv_data, \"b_strategy\", \"0\", 0);\n\n // \u7981\u7528\u81ea\u9002\u5e94 I \u5e27\u548c B \u5e27\uff08\u63d0\u9ad8 GOP \u7ed3\u6784\u7684\u4e00\u81f4\u6027\uff09\n av_opt_set(video_codec_ctx_->priv_data, \"adaptive_i\", \"0\", 0);\n av_opt_set(video_codec_ctx_->priv_data, \"adaptive_b\", \"0\", 0);\n\n // \u4e25\u683c\u7684 GOP \u7ed3\u6784\uff08\u4e0d\u5141\u8bb8\u52a8\u6001\u8c03\u6574\u5173\u952e\u5e27\u4f4d\u7f6e\uff09\n av_opt_set(video_codec_ctx_->priv_data, \"strict_gop\", \"1\", 0);\n\n // \u4f4e\u5ef6\u8fdf\u6a21\u5f0f\uff08\u7c7b\u4f3c NVENC \u7684 zerolatency \uff09\n av_opt_set(video_codec_ctx_->priv_data, \"low_delay_brc\", \"1\", 0);\n\n LOG(INFO) << \"Intel QSV H.264 \u7f16\u7801\u5668\uff1a\u5df2\u542f\u7528\u6d77\u5eb7\u5f55\u50cf\u673a\u517c\u5bb9\u6a21\u5f0f\uff08 baseline+CAVLC+level4.0 \uff09\";\n }\n }\n else if (strcmp(codec_name, \"h264_nvenc\") == 0 || strcmp(codec_name, \"hevc_nvenc\") == 0)\n {\n // NVIDIA NVENC \u7f16\u7801\u5668\u53c2\u6570\n // NVENC \u7684 preset: default, slow, medium, fast, hp, hq, bd, ll, llhq, llhp, lossless, losslesshp\n av_opt_set(video_codec_ctx_->priv_data, \"preset\", \"llhp\", 0); // \u4f4e\u5ef6\u8fdf\u9ad8\u6027\u80fd\n av_opt_set(video_codec_ctx_->priv_data, \"zerolatency\", \"1\", 0);\n av_opt_set(video_codec_ctx_->priv_data, \"delay\", \"0\", 0);\n }\n else if (strcmp(codec_name, \"h264_amf\") == 0 || strcmp(codec_name, \"hevc_amf\") == 0)\n {\n // AMD AMF \u7f16\u7801\u5668\u53c2\u6570\n av_opt_set(video_codec_ctx_->priv_data, \"usage\", \"lowlatency\", 0);\n av_opt_set(video_codec_ctx_->priv_data, \"quality\", \"speed\", 0);\n }\n else if (strcmp(codec_name, \"h264_mf\") == 0)\n {\n // Windows Media Foundation \u7f16\u7801\u5668\u53c2\u6570\n av_opt_set(video_codec_ctx_->priv_data, \"rate_control\", \"cbr\", 0);\n }\n\n // NVENC \u7684 profile \u8bbe\u7f6e\uff08 QSV \u5df2\u5728\u4e0a\u9762\u5355\u72ec\u8bbe\u7f6e\uff09\n if (!config_.profile.isEmpty() && strcmp(codec_name, \"h264_nvenc\") == 0)\n {\n // NVENC \u652f\u6301\u6807\u51c6 H.264 profiles: baseline, main, high\n av_opt_set(video_codec_ctx_->priv_data, \"profile\", config_.profile.toStdString().c_str(), 0);\n }\n }\n\n // \u521d\u59cb\u5316\u786c\u4ef6\u52a0\u901f\u4e0a\u4e0b\u6587\uff08\u5982\u679c\u4f7f\u7528\u786c\u4ef6\u7f16\u7801\uff09\n if (!InitializeHardwareContext())\n {\n LOG(ERROR) << \"\u786c\u4ef6\u52a0\u901f\u4e0a\u4e0b\u6587\u521d\u59cb\u5316\u5931\u8d25\";\n return false;\n }\n\n // \u6253\u5f00\u7f16\u7801\u5668\n int ret = avcodec_open2(video_codec_ctx_, video_codec_, nullptr);\n if (ret < 0)\n {\n char errbuf[AV_ERROR_MAX_STRING_SIZE];\n av_strerror(ret, errbuf, sizeof(errbuf));\n LOG(ERROR) << \"\u65e0\u6cd5\u6253\u5f00\u7f16\u7801\u5668: \" << errbuf;\n return false;\n }\n
\n", "date_published": "2025-12-17T09:43:56+00:00", "title": "intel qsv ffmpeg \u7f16\u7801\u95ee\u9898", "id": "t/1179557" }, { "author": { "url": "member/FH0", "name": "FH0", "avatar": "https://cdn.v2ex.com/gravatar/e5ca2f9f97e7a7fe504c074376438957?s=73&d=retro" }, "url": "t/1167069", "date_modified": "2025-10-21T00:26:55+00:00", "content_html": "

\u5728\u7528 FFmpeg RTP \u4f20\u8f93 H.264 \uff0c\u672c\u6765\u60f3\u7740\u53d1\u4e00\u4e2a\u5e27\u5c31\u80fd\u6536\u5230\u4e00\u4e2a\u5e27\uff0c\u4f46\u6d4b\u8bd5\u8001\u662f\u53cd\u9988\u5ef6\u8fdf\u9ad8\uff0c\u6211\u5c31\u81ea\u5df1\u6d4b\u8bd5\u4e86\u4e00\u4e0b\u3002

\n

\u7ed3\u679c\u53d1\u73b0\u8981\u63a5\u6536 n \u4e2a\u5e27\uff0c\u5fc5\u987b\u53d1\u9001 n + 2 \u4e2a\u5e27\uff0c\u96be\u9876\u3002\u4e0b\u9762\u7684\u4f8b\u5b50\u4e4b\u6240\u4ee5\u80fd\u6536\u5230\u4e24\u4e2a\u662f\u56e0\u4e3a\u7b2c\u4e8c\u4e2a\u8d85\u65f6\u4e86\uff0c\u6211\u4e5f\u4e0d\u61c2\u4e3a\u4ec0\u4e48\u8d85\u65f6\u5c31\u80fd\u6536\u5230\u7b2c\u4e8c\u4e2a\u5305\u3002

\n

\u770b\u6765\u5f97\u53c2\u8003 RTP \u81ea\u5df1\u9020\u8f6e\u5b50\u4e86\u3002

\n
10-20 16:27:34.582 I sdp: v=0\no=- 0 0 IN IP4 127.0.0.1\ns=No Name\nc=IN IP4 239.0.0.1\nt=0 0\na=tool:libavformat 61.1.100\nm=video 16384 RTP/AVP 96\na=rtpmap:96 H264/90000\na=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAHqzZQKAv+XARAAADAAEAAAMAMg8WLZY=,aOvjyyLA; profile-level-id=64001E\n\n10-20 16:27:34.583 I send packet, pts: 0\n10-20 16:27:34.600 I send packet, pts: 16666\n10-20 16:27:34.617 I send packet, pts: 33332\n10-20 16:27:34.617 I pkt pts: -9223372036854775808\n10-20 16:27:44.629 I pkt pts: 1500\n
\n", "date_published": "2025-10-20T08:35:08+00:00", "title": "FFmpeg \u7684\u5b9e\u65f6\u6027\u592a\u7cdf\u7cd5\u4e86", "id": "t/1167069" }, { "author": { "url": "member/airchaoz", "name": "airchaoz", "avatar": "https://cdn.v2ex.com/avatar/751f/96b9/275674_large.png?m=1748572675" }, "url": "t/1131548", "date_modified": "2025-05-14T11:35:59+00:00", "content_html": "

\"\"\n\u6211\u5bf9 ffmpeg \u7684\u5370\u8c61\u5c31\u662f\u4e00\u4e2a\u5f00\u6e90\u97f3\u89c6\u9891\u7f16\u89e3\u7801\u7a0b\u5e8f\uff0c\u5bf9\u5176\u5f71\u54cd\u529b\u8ba4\u8bc6\u8f83\u5c11\u3002\u80fd\u7ed9\u6211\u8fd9\u4e2a\u95e8\u5916\u6c49\u8bb2\u8bb2\u5230\u5e95\u6709\u591a\u725b\u5417

\n", "date_published": "2025-05-13T13:55:23+00:00", "title": "\u65e9\u5c31\u542c\u8bf4\u8fc7 ffmpeg\uff0c\u4f46\u662f\u4e00\u76f4\u4e0d\u77e5\u9053\u6709\u591a\u725b", "id": "t/1131548" }, { "author": { "url": "member/MOranonline", "name": "MOranonline", "avatar": "https://cdn.v2ex.com/gravatar/f965be003d31aa501d4849367582d14e?s=73&d=retro" }, "url": "t/1121476", "title": "\u4f7f\u7528 FFmpeg \u548c GPU \u5b9e\u73b0\u6700\u7b80\u201c\u56fe\u7247+\u65e0\u635f\u97f3\u9891=\u89c6\u9891\u201d\u7684\u65b9\u6cd5", "id": "t/1121476", "date_published": "2025-03-27T04:47:37+00:00", "content_html": "
\n

\u9700\u6c42\uff1a\u641c\u96c6\u5230\u7684\u65e0\u635f\u97f3\u4e50\u592a\u5360\u7a7a\u95f4\uff0c\u51b3\u5b9a\u4f20\u5230 B \u7ad9\u7f51\u76d8\u3002\u4f46 pr \u5bfc\u51fa\u592a\u592a\u592a\u8017\u65f6\uff0c\u4e8e\u662f\u4f7f\u7528 FFmepeg \u7684 GPU \u52a0\u901f

\n
\n

\u524d\u7f6e\u6761\u4ef6\u6e05\u5355
\n1.\u652f\u6301 NVENC \u7684 NVIDIA \u663e\u5361\n\u786e\u8ba4\u662f\u5426\u652f\u6301 NVENC\uff1a\n\u5728 CMD \u4e2d\u6267\u884c\uff1a

\n
nvidia-smi\n
\n

\u6216\u901a\u8fc7 NVIDIA \u5b98\u65b9\u5217\u8868 \u67e5\u8be2\u60a8\u7684\u663e\u5361\u578b\u53f7\u3002
\n2.\u66f4\u65b0\u5230\u6700\u65b0 NVIDIA \u663e\u5361\u9a71\u52a8
\n3.\u652f\u6301 h264_nvenc \u7684 FFmpeg \u7248\u672c

\n\n\n
ffmpeg -encoders | findstr \"h264_nvenc\"\n
\n

\u5982\u679c\u8f93\u51fa\u4e2d\u6709 h264_nvenc\uff0c\u5219\u652f\u6301\u3002

\n
\n

\u5f00\u59cb\uff1a
\n1.\u5c06 FFmpeg \u7684 bin \u76ee\u5f55\u52a0\u5165\u73af\u5883\u53d8\u91cf
\n2.\u8f93\u5165

\n
ffmpeg -hwaccel cuda -threads 24 -loop 1 -i \"picture.png\" -i \"music.flac\" -vf \"hwupload\" -c:v h264_nvenc -preset 0 -cq 23 -rc constqp -c:a flac -shortest \"output.mkv\"\n
\n

\u89e3\u6790\uff1a

\n\n
\n

\u6279\u91cf\u5904\u7406\uff1a
\n\u89c6\u9891\u6309\u987a\u5e8f\u6570\u5b57\u91cd\u547d\u540d\uff08\u5982 video1.mp4, video2.mp4 \u7b49\uff09\uff0c\u4e14\u9700\u8981\u4e0e\u5bf9\u5e94\u7684\u56fe\u7247\uff08\u5982 pic1.png, pic2.png\uff09

\n

1.\u6bcf\u4e2a\u89c6\u9891\u5173\u8054\u4e00\u5f20\u56fe\u7247

\n
@echo off\nset \"input_dir=.\\videos\" # \u89c6\u9891\u5b58\u653e\u76ee\u5f55\uff08\u5982\u5df2\u91cd\u547d\u540d\u7684 video1.mp4 \uff09\nset \"image_dir=.\\images\" # \u56fe\u7247\u5b58\u653e\u76ee\u5f55\uff08\u9700\u8981\u540c\u540d\u7684 pic1.png \u7b49\uff09\nset \"output_dir=.\\outputs\" # \u8f93\u51fa\u76ee\u5f55\n\nfor %%a in (\"%input_dir%\\*.mp4\") do (\n set \"video_file=%%~nxa\"\n set \"prefix=%%~na\"\n ffmpeg -hwaccel cuda -threads 24 -i \"%%a\" -i \"%image_dir%\\pic%%~na.png\" ^ # \u6ce8\u610f\uff1a\u8fd9\u91cc\u7684\u56fe\u7247\u540d\u683c\u5f0f\u53ef\u81ea\u5b9a\u4e49\uff08\u5982 pic1.png \u9700\u66ff\u6362\u4e3a pic##\u5339\u914d\u4f60\u7684\u547d\u540d\uff09\n -filter_complex \"[0:v]scale=trunc(iw/2)*2:trunc(ih/2)*2[vid]; [vid][1:v] overlay=10:10\" ^ # \u56fe\u7247\u53e0\u52a0\u5728\u5de6\u4e0a\u89d2\uff08 10 \u50cf\u7d20\u504f\u79fb\uff09\n -c:v h264_nvenc -preset 0 -cq 23 -rc constqp ^ \n -c:a copy ^ # \u97f3\u9891\u76f4\u63a5\u590d\u5236\uff08\u52a0\u901f\u5904\u7406\uff09\n \"%output_dir%\\output_%%~na.mkv\"\n)\n
\n

2.\u6240\u6709\u89c6\u9891\u4f7f\u7528\u540c\u4e00\u5f20\u80cc\u666f\u56fe\u7247

\n
@echo off\nset \"input_dir=.\\videos\" # \u89c6\u9891\u76ee\u5f55\nset \"image_file=.\\background.png\" # \u56fa\u5b9a\u80cc\u666f\u56fe\u7247\u8def\u5f84\nset \"output_dir=.\\outputs\"\n\nfor %%a in (\"%input_dir%\\*.mp4\") do (\n ffmpeg -hwaccel cuda -threads 24 -i \"%%a\" -loop 1 -i \"%image_file%\" ^ # \u5faa\u73af\u64ad\u653e\u56fe\u7247\n -filter_complex \"[0:v]scale=trunc(iw/2)*2:trunc(ih/2)*2[vid]; [1:v]scale=trunc(iw/2)*2:trunc(ih/2)*2[img]; [vid][img] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2\" ^ # \u56fe\u7247\u5c45\u4e2d\u53e0\u52a0\n -c:v h264_nvenc -preset 0 -cq 23 -rc constqp ^ \n -c:a copy \n \"%output_dir%\\output_%%~na.mkv\"\n)\n
\n

3.\u6ce8\u610f\u4e8b\u9879

\n\n
# \u8f93\u5165\u89c6\u9891\u76ee\u5f55\uff1a\nvideos/\n\u251c\u2500\u2500 video1.mp4\n\u251c\u2500\u2500 video2.mp4\n\u2514\u2500\u2500 video3.mp4\n\n# \u8f93\u5165\u56fe\u7247\u76ee\u5f55\uff08\u573a\u666f 1 \uff09\uff1a\nimages/\n\u251c\u2500\u2500 pic1.png\n\u251c\u2500\u2500 pic2.png\n\u2514\u2500\u2500 pic3.png\n\n# \u8f93\u51fa\u76ee\u5f55\uff1a\noutputs/\n\u251c\u2500\u2500 output_video1.mkv\n\u251c\u2500\u2500 output_video2.mkv\n\u2514\u2500\u2500 output_video3.mkv\n
\n

5.\u81ea\u52a8\u5316

\n

(1) \u4fdd\u5b58\u4e3a\u6279\u5904\u7406\u6587\u4ef6\uff08 Windows \uff09

\n
# \u4fdd\u5b58\u4e3a batch_process.bat \uff0c\u53cc\u51fb\u8fd0\u884c\u5373\u53ef\u3002\n
\n

(2) \u53ef\u89c6\u5316\u8fdb\u5ea6\u6761\uff08\u53ef\u9009\uff09

\n
echo Processing videos: \nFOR /L %i IN (1,1,50) DO (\n echo %i%%\n ping localhost -n 1 >nul\n)\n
\n

\u7136\u540e\u53ef\u4ee5\u5feb\u901f\u5b8c\u6210\u6279\u91cf\u89c6\u9891\u4e0e\u56fe\u7247\u7684\u5408\u6210\u5904\u7406,\u4f20\u5230 B \u7ad9\u7f51\u76d8\u3002\u5982\u9700\u8fdb\u4e00\u6b65\u5b9a\u5236\uff08\u5982\u52a8\u6001\u56fe\u7247\u900f\u660e\u5ea6\u3001\u56fe\u7247/\u89c6\u9891\u5c3a\u5bf8\u8c03\u6574\u3001\u4e0d\u540c\u53e0\u52a0\u6548\u679c\u3001\u97f3\u8f68\u6df7\u97f3\u7b49\uff09\u81ea\u884c\u6dfb\u52a0\u547d\u4ee4
\n\u4f7f\u7528\u5f00\u6e90\u7684 B \u7ad9\u97f3\u9891\u64ad\u653e\u5668\u7535\u6893\u64ad\u653e\u5668
\u7136\u540e\u5b8c\u7f8e\u97f3\u4e50\u8f6f\u4ef6 get\u2606 daze

\n" }, { "author": { "url": "member/chenliang0571", "name": "chenliang0571", "avatar": "https://cdn.v2ex.com/avatar/a472/370c/28502_large.png?m=1736635938" }, "url": "t/1104441", "title": "FFmpegKit has been officially retired. There will be no further ffmpeg-kit releases.", "id": "t/1104441", "date_published": "2025-01-11T22:53:47+00:00", "content_html": "

\u4e0d\u77e5\u9053\u4e3a\u4ec0\u4e48\uff0c\u8fde\u53d1\u4e0d\u5230\u7b2c\u4e09\u65b9\u5305\u5e73\u53f0\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u90fd\u4e0d\u4fdd\u7559\u3002

\n

https://github.com/arthenica/ffmpeg-kit

\n

FFmpegKit has been officially retired. There will be no further ffmpeg-kit releases.

\n

All previously released ffmpeg-kit binaries will be removed according to the following schedule.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
FFmpegKit VersionAvailable Until
Less than 6.0February 1st, 2025
6.0April 1st, 2025
" }, { "author": { "url": "member/litaomn", "name": "litaomn", "avatar": "https://cdn.v2ex.com/gravatar/274eb618c9cd58c77955d180763ba2dd?s=73&d=retro" }, "url": "t/1104123", "date_modified": "2025-01-10T05:08:08+00:00", "content_html": "

\u89c6\u9891\u65f6\u957f 5 \u79d2,\u4f46\u662f\u64ad\u653e 1 \u79d2\u81ea\u52a8\u7ed3\u675f,\u540e\u9762 4 \u79d2\u81ea\u52a8\u622a\u65ad\u4e86,\u5e94\u8be5\u662f\u7528 ffmpeg \u7ecf\u8fc7\u5904\u7406\u7684,\u60f3\u77e5\u9053\u539f\u7406,\u53ef\u4ee5\u4ed8\u8d39.\n\u89c6\u9891\u5730\u5740:https://share.feijipan.com/s/GaE97j6z

\n", "date_published": "2025-01-10T05:06:17+00:00", "title": "\u6709\u6ca1\u6709\u7cbe\u901a ffmpeg \u7684\u5927\u4f6c\u5e2e\u6211\u770b\u4e0b\u8fd9\u4e2a\u89c6\u9891\u662f\u600e\u4e48\u5236\u4f5c\u7684", "id": "t/1104123" }, { "author": { "url": "member/lslqtz", "name": "lslqtz", "avatar": "https://cdn.v2ex.com/avatar/c8aa/9aa7/152083_large.png?m=1735670770" }, "url": "t/1102154", "date_modified": "2025-01-02T16:24:12+00:00", "content_html": "

\u6700\u8fd1\u8bd5\u7740\u5199\u4e86\u4e00\u4efd\u7b80\u5355\u7684\u4e2a\u4eba\u7528\u9014\u7684\u8f6c\u7801\u70b9\u64ad\u670d\u52a1\u7aef, \u5b8c\u6210\u4e86\u4e4b\u524d\u7684\u60f3\u6cd5, \u5b83\u80fd\u628a\u5f53\u524d\u5de5\u4f5c\u76ee\u5f55\u4e0b\u7684\u89c6\u9891\u8f6c\u4e3a m3u \u5207\u7247\u7528\u4e8e\u70b9\u64ad. \u4e3b\u8981\u662f\u7531\u4e8e\u90e8\u5206 BDMV \u89c6\u9891\u7801\u7387\u8fc7\u9ad8, \u5f88\u96be\u8fdc\u7a0b\u70b9\u64ad NAS \u4e0a\u7684\u5185\u5bb9. Jellyfin \u7b49\u5a92\u4f53\u5e93\u65b9\u6848\u4e0d\u5728\u8003\u8651\u8303\u56f4.

\n

\u4e3a\u4e86\u5b9e\u73b0\u6d4f\u89c8\u5668 seek \u7684\u6548\u679c, \u9009\u62e9\u7531\u670d\u52a1\u7aef\u901a\u8fc7 PTS \u65f6\u95f4\u70b9\u548c timeBase \u6765\u6839\u636e\u5173\u952e\u5e27\u63d0\u524d\u751f\u6210\u5207\u7247\u8303\u56f4, \u5728\u8bf7\u6c42\u5bf9\u5e94\u5207\u7247\u540e\u5b9e\u65f6\u8f6c\u7801\u5230 mpegts (\u5e76\u901a\u8fc7\u6d4f\u89c8\u5668\u9884\u7f13\u51b2\u907f\u514d\u64ad\u653e\u5361\u987f).

\n

\u4f46\u65e0\u8bba\u5982\u4f55\u8c03\u8282, \u4f3c\u4e4e\u5076\u5c14\u90fd\u4f1a\u51fa\u73b0\u97f3\u9891\u4e0d\u8fde\u7eed\u7684\u95ee\u9898, \u8f6c\u50a8\u540e\u53d1\u73b0\u76ee\u6807\u5207\u7247\u4f3c\u4e4e\u65f6\u95f4\u548c\u8bf7\u6c42\u957f\u5ea6\u4e0d\u5b8c\u5168\u4e00\u81f4, \u8c03\u8282\u591a\u6b21\u53c2\u6570\u4ecd\u672a\u89e3\u51b3\u6b64\u95ee\u9898 (\u4e3a\u4f7f\u5207\u7247\u6709\u8db3\u591f\u8d77\u59cb\u957f\u5ea6\u53ea\u6d4b\u8bd5\u5230 muxdelay \u65b9\u6cd5\u53ef\u7528, -ss/-t \u653e\u4e8e\u8f93\u5165\u4e4b\u540e\u4f3c\u4e4e\u4e5f\u65e0\u679c, \u5305\u62ec -start_at_zero \u7b49\u7684\u66ff\u4ee3\u4e5f\u90fd\u5c1d\u8bd5\u8fc7, \u4f7f\u7528 hls \u6216 segment \u7684\u8bdd\u8f83\u96be\u63a7\u5236\u81ea\u7531\u70b9\u64ad\u8fdb\u5ea6).

\n

\u7531\u4e8e nodejs \u670d\u52a1\u7aef\u8f83\u96be\u8c03\u7528 FFmpeg API, \u662f\u7528\u7684 \u547d\u4ee4+\u7ba1\u9053 \u7684\u65b9\u5f0f. \u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b, \u6709\u65b9\u6cd5\u53ef\u4ee5\u89e3\u51b3\u6216\u89c4\u907f\u6b64\u95ee\u9898\u5417?

\n

\u670d\u52a1\u7aef\u7684\u5b8c\u6574\u4ee3\u7801, \u5176\u4e2d\u76f8\u5173\u7684\u4ee3\u7801\u5982\u4e0b:

\n
\t\tlet args = [\n\t\t\t'-ss', startTimeStr,\n\t\t\t'-t', durationTimeStr,\n\t\t\t'-accurate_seek',\n\t\t\t'-i', videoPath,\n\t\t\t'-map', '0:v:0',\n\t\t\t'-c:v', encoder,\n\t\t\t'-b:v', String(bitrate),\n\t\t\t'-bsf:v', 'h264_mp4toannexb',\n\t\t\t'-avoid_negative_ts', 'make_zero',\n\t\t\t'-start_at_zero',\n\t\t\t'-muxdelay', delayTimeStr,\n\t\t\t'-muxpreload', delayTimeStr,\n\t\t\t'-f', 'mpegts',\n\t\t\t'pipe:1'\n\t\t];\n
\n

\u8bf7\u6c42\u65b9\u6cd5:
\nm3u: http://127.0.0.1:8082/video/rttPlaylist?videoPath=1.mkv
\nsegment: http://127.0.0.1:8002/video/rttSegment?videoPath=1.mkv&start=0.0000&duration=4.0000

\n

(BTW: \u5176\u5b9e\u5927\u90e8\u5206\u662f Gemini \u5199\u7684.)

\n", "date_published": "2025-01-02T16:16:00+00:00", "title": "\u4f7f\u7528 FFmpeg \u8bd5\u56fe\u505a\u4e2a\u4eba\u7528\u7684\u8f6c\u7801\u70b9\u64ad\u670d\u52a1\u7aef, \u4f46 mpegts \u591a\u4e2a\u5207\u7247\u95f4\u97f3\u9891\u5076\u5c14\u4e0d\u8fde\u7eed?", "id": "t/1102154" }, { "author": { "url": "member/zapper", "name": "zapper", "avatar": "https://cdn.v2ex.com/avatar/c46e/37f7/74212_large.png?m=1758688991" }, "url": "t/1101957", "title": "\u6c42\u52a9\u5927\u4f6c\u4eec\uff0c FFmpeg \u6307\u4ee4\u62c9\u5b9e\u65f6\u6d41\u8f6c\u63a8\u7684\u6b63\u786e\u59ff\u52bf\u5230\u5e95\u662f\u4ec0\u4e48\uff1f", "id": "t/1101957", "date_published": "2025-01-02T03:33:38+00:00", "content_html": "

\u5927\u4f6c\u4eec\u597d\uff0c\u6211\u7528

\n
ffmpeg -re -rtsp_transport tcp -stimeout 5000000 -i rtsp://xxxx -c:v libx264 -f flv rtmp://xxx\n
\n

\u4e0a\u9762\u8fd9\u4e2a\u6307\u4ee4\uff0c\u5728\u4e00\u5207\u6b63\u5e38\u7684\u65f6\u5019\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662f\u5f53\u8f93\u5165\u7684 RTSP \u4e2d\u65ad\u4e86\u4e00\u4f1a\uff0c\u8fd9\u4e2a\u63a8\u6d41\u5c31\u4f1a\u5904\u4e8e\u4e00\u4e2a\u8dd1\u98de\u4e86\u7684\u72b6\u6001\uff0c\u4e0d\u518d\u63a8\u9001\u6709\u6548\u6570\u636e\uff0c\u5e76\u4e14\u8fdb\u7a0b\u4e5f\u6ca1\u6709\u7ec8\u6b62\uff1b\n\u7136\u540e\u6211\u7f51\u4e0a\u641c\u8bf4\u7528rw_timeout\u53c2\u6570\u53ef\u7834\uff0c\u53ef\u662f\u6211\u5c06\u6307\u4ee4\u4fee\u6539\u4e3a

\n
ffmpeg -re -rtsp_transport tcp -rw_timeout 5000000 -stimeout 5000000 -i rtsp://xxxx -c:v libx264 -f flv rtmp://xxx\n
\n

\u53ef\u662f\u6574\u4e2a\u6307\u4ee4\u6839\u672c\u8dd1\u4e0d\u8d77\u6765\u3002\u63d0\u793a-rw_timeout\u4e0d\u5b58\u5728\uff0c\u9664\u975e\u8f93\u5165\u6362\u6210 RTMP \uff0c\u4f46\u662f\u52a0\u4e86\u8fd9\u4e2a\u53c2\u6570\u5176\u5b9e\u4e5f\u4e0d\u597d\u4f7f\u3002\n\u7531\u4e8e\u8f93\u51fa\u7684\u5730\u5740\u4e0d\u662f\u6211\u4eec\u81ea\u5df1\u7ba1\u63a7\u7684\uff0c\u6240\u4ee5\u4e0d\u50cf\u4fdd\u5b58\u6587\u4ef6\u4e00\u6837\u80fd\u5b9a\u671f\u68c0\u6d4b\u6587\u4ef6\u5927\u5c0f\u662f\u5426\u53d8\u5316\u6765\u5224\u65ad\u662f\u4e0d\u662f\u5e94\u8be5 kill \u6389\u8fdb\u7a0b\uff0c\u6240\u4ee5\u8981\u600e\u4e48\u624d\u80fd\u5728\u4ed6\u6ca1\u6570\u636e\u4f20\u8f93\u7684\u65f6\u5019\u5e72\u6389\u4ed6\uff0c\u6216\u8005\u80fd\u901a\u8fc7\u914d\u7f6e\u53c2\u6570\u8ba9\u4ed6\u81ea\u5df1\u9000\uff1f

\n

\u5148\u8c22\u8c22\u5927\u4f6c\u4eec

\n" }, { "author": { "url": "member/wniming", "name": "wniming", "avatar": "https://cdn.v2ex.com/gravatar/708d900c4d23d905941b0c2cf38b7565?s=73&d=retro" }, "url": "t/1101767", "date_modified": "2025-01-01T05:57:21+00:00", "content_html": "

linux \u5e73\u53f0\uff0c\u663e\u5361\u662f uhd770 \uff0c\u6e32\u67d3\u8282\u70b9\u662f /dev/dri/renderD128 \uff0c\u8f93\u5165\u6587\u4ef6\u7684\u8def\u5f84\u662f /tmp/h264.mp4 \uff0c\u8f93\u51fa\u6587\u4ef6\u8def\u5f84\u662f /tmp/hevc.mp4 \uff0c\u6709\u5927\u4f6c\u80fd\u7ed9\u4e2a\u80fd\u76f4\u63a5\u7528\u7684\u547d\u4ee4\u5417\uff1f

\n

\u8f6c\u6362\u7684\u76ee\u7684\u662f\u4e3a\u4e86\u51cf\u5c0f\u6587\u4ef6\u7684\u5927\u5c0f

\n", "date_published": "2025-01-01T05:51:56+00:00", "title": "\u5728\u51e0\u4e4e\u4e0d\u635f\u5931\u753b\u8d28\u7684\u524d\u63d0\u4e0b\uff0c\u600e\u4e48\u7528 ffmpeg \u628a h.264 \u683c\u5f0f\u7684\u89c6\u9891\u8f6c\u6362\u6210 h.265 \u683c\u5f0f\u7684?", "id": "t/1101767" }, { "author": { "url": "member/jeddida", "name": "jeddida", "avatar": "https://cdn.v2ex.com/gravatar/046acda2903889e54690c5add7fd2442?s=73&d=retro" }, "url": "t/1100954", "date_modified": "2024-12-28T13:46:05+00:00", "content_html": "

\u4e66\u63a5\u4e0a\u6b21\uff0c\u5927\u4f6c\u4eec\u5efa\u8bae\u6211\u7528\u786c\u4ef6\u52a0\u901f\uff0c\u6211\u73b0\u5728\u6362\u4e86 AMD \u7684\u663e\u5361\uff0c\u5e76\u4e14\u6210\u529f\u5728\u6211\u7684 Linux \u5b89\u88c5\u4e86 ffmpeg \u3002\n\u6211\u8fd0\u884c\uff1affmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf format=yuv420p,hwupload -c:v h264_vaapi -b:v 1000k output.mp4

\n

\u53ef\u786c\u4ef6\u52a0\u901f\uff0cCPU \u5360\u7528\u7387\u5f88\u4f4e\u3002\n\u4f46\u662f\u6211\u5728\u6211\u7684 c++\u4ee3\u7801\u91cc\u4f7f\u7528\u6765\u521b\u5efa\uff1aint ret = av_hwdevice_ctx_create = (&hw_device_ctx,AV_HWDEVICE_TYPE_VAAPI,\"/dev/dri/renderD128\");

\n

\u6211\u6253\u5370\u4e86 ret\uff1a-12 \uff0c\u6211\u67e5\u9605\u4e86\u8d44\u6599\u662f\u56e0\u4e3a\u65e0\u6cd5\u521b\u5efa\u5185\u5b58\u7a7a\u95f4\u5bfc\u81f4\u7684\u3002

\n

\u5fd8\u4e86\u8bf4\uff0c\u6211\u7528\u7684\u662f qtcreator \uff0c\u6211\u5728 qt \u7684 pro \u6587\u4ef6\u4e86\u5f15\u5165\u4e86-lavcodec -lavformat -lavutil -lswscale \uff0c\u5728\u4e0d\u7528\u786c\u4ef6\u52a0\u901f\u7684\u65f6\u5019\u53ef\u4ee5\u770b\u5230\u89c6\u9891\uff0c\u4e5f\u53ef\u4ee5\u64ad\u653e\uff0c\u4f46\u662f\u7528\u4e86 vaapi \u90a3\u4e2a\u52a0\u901f\u5c31\u4f1a\u6253\u5370-12

\n

\u6211\u67e5\u9605\u8d44\u6599\u53ef\u80fd\u662f\u6ca1\u6709\u5f15\u5165 libva \u548c libva-drm \u3002

\n

\u6709\u6ca1\u6709\u5927\u4f6c\u4e86\u89e3\u8fc7\u8fd9\u4e9b\uff01\n\u8dea\u8c22\uff01\u56f0\u6270\u6211\u4e00\u5468\u4e86\uff01\uff08\u6211\u6ca1\u6cd5\u5c1d\u8bd5\u662f\u56e0\u4e3a\u516c\u53f8\u7535\u8111\u5173\u4e86\uff0c\u8fd9\u5468\u672b\u96be\u53d7\u7684\u6211\u554a\uff0c\u89e3\u51b3\u4e0d\u4e86\u95ee\u9898\u6211\u90fd\u7761\u4e0d\u597d\uff09

\n", "date_published": "2024-12-28T12:02:58+00:00", "title": "\u6211\u53c8\u6765\u8be2\u95ee ffmpeg \u95ee\u9898\u4e86\uff01\u8fd9\u6b21\u662f\u786c\u4ef6\u52a0\u901f\uff01", "id": "t/1100954" }, { "author": { "url": "member/zhengfan2016", "name": "zhengfan2016", "avatar": "https://cdn.v2ex.com/gravatar/df526f138d10cac8c95b274c720a6f55?s=73&d=retro" }, "url": "t/1100488", "date_modified": "2024-12-27T01:58:36+00:00", "content_html": "\u5982\u9898\uff0cnodejs \u548c python \u6709\u4ec0\u4e48\u597d\u7528\u7684\u6210\u719f\u7684\u5e93\u5417\uff0c\u7528\u90a3\u79cd\u8bed\u8a00\u5f00\u53d1\u4f1a\u597d\u4e00\u70b9\u554a\ud83d\ude02", "date_published": "2024-12-26T09:01:31+00:00", "title": "\u5927\u4f6c\u4eec\uff0c nodejs \u548c Python \u505a\u7c7b\u4f3c jellyfin \u5b9e\u65f6\u8f6c\u7801\u662f\u4e0d\u662f\u53ea\u80fd\u7528 ffmpeg \u5b9e\u73b0\u4e86", "id": "t/1100488" }, { "author": { "url": "member/jeddida", "name": "jeddida", "avatar": "https://cdn.v2ex.com/gravatar/046acda2903889e54690c5add7fd2442?s=73&d=retro" }, "url": "t/1100292", "date_modified": "2024-12-26T00:08:28+00:00", "content_html": "

\u521a\u63a5\u89e6 ffmpeg \u60f3\u7740\u5199\u4e00\u4e2a\u64ad\u653e\u5668\u73a9\u73a9\uff0c\u4f46\u662f CPU \u5360\u7528\u7387\u4e00\u76f4\u9ad8\uff0c\u6709\u6ca1\u6709\u5927\u4f6c\u77e5\u9053\u600e\u4e48\u56de\u4e8b\u3002\u6ca1\u6709\u663e\u5361\u3002

\n

\u6211\u6d4b\u8bd5\u4e00\u4e2a\u89c6\u9891\u7684\u65f6\u5019\u8fd8\u884c\uff0c\u89c6\u9891\u6570\u91cf\u4e0a\u5230\u4e86 16 \u4e2a\u5c31\u5f00\u59cb\u82b1\u5c4f+\u5361\u987f\u4e86\u3002

\n", "date_published": "2024-12-25T12:24:59+00:00", "title": "\u6709\u5927\u4f6c\u5f00\u53d1\u8fc7 ffmpeg \u5417\uff1f\u7528 c++\u8c03\u7528 ffmpeg API \u89e3\u7801\u89c6\u9891\u6d41 CPU \u5360\u7528\u7387\u9ad8\uff0c\u6c42\u89e3\u51b3\u529e\u6cd5", "id": "t/1100292" }, { "author": { "url": "member/mianhk", "name": "mianhk", "avatar": "https://cdn.v2ex.com/gravatar/23f6b6edf117b94992fbd04dc6a31ceb?s=73&d=retro" }, "url": "t/1096466", "date_modified": "2024-12-10T08:27:20+00:00", "content_html": "

\u5f53\u524d\u4f7f\u7528 ffmpeg \u5f55\u5236 Ubuntu \u5c4f\u5e55\uff0c\u4f7f\u7528 avi \u683c\u5f0f\uff0c\u5f55\u5236\u7684\u8fc7\u7a0b\u9700\u8981\u6bcf\u9694 10 \u5206\u949f\u5207\u5206\u4e00\u4e2a 2 \u5206\u949f\u7684\u89c6\u9891\uff0c\u4f46\u662f\u7ecf\u5e38\u5f55\u4e86\u4e00\u6bb5\u65f6\u95f4\u540e\uff0c\u89c6\u9891\u5207\u5206\u5c31\u6709\u62a5\u9519\uff0c\u4f46\u662f\u7b49\u5f55\u5236\u5b8c\u6210\u540e\uff0c\u7528\u540c\u6837\u7684\u547d\u4ee4\u5207\u5272\u5374\u6ca1\u6709\u62a5\u9519\uff0c\u6709\u5927\u4f6c\u77e5\u9053\u539f\u56e0\u7684\u5417\uff1f\n\u5f55\u5236\u547d\u4ee4\uff1a

\n
ffmpeg -f alsa -i hw:1,0 -f x11grab -s 1920x1080 -i :0.0 -async 1 ubuntu.avi\n
\n", "date_published": "2024-12-10T08:26:13+00:00", "title": "ffmpeg \u89c6\u9891\u5f55\u5236\u5207\u5206\u95ee\u9898\u8bf7\u6559", "id": "t/1096466" }, { "author": { "url": "member/v423", "name": "v423", "avatar": "https://cdn.v2ex.com/gravatar/5f1d766161a89ac2500d26439b822915?s=73&d=retro" }, "url": "t/1095204", "title": "\u901a\u8fc7 ffmpeg \u538b\u7f29\u89c6\u9891\u5f88\u6162 \u65f6\u95f4\u654f\u611f\u7684\u9700\u6c42\u8be5\u600e\u4e48\u8bbe\u7f6e\u53c2\u6570\u5462?", "id": "t/1095204", "date_published": "2024-12-05T04:20:26+00:00", "content_html": "

\u524d\u7aef\u4e0a\u4f20\u7684\u65f6\u5019\u9700\u8981\u9884\u538b\u7f29\n\u5e0c\u671b 1 \u5206\u949f\u7684\u89c6\u9891\u538b\u7f29\u65f6\u95f4\u80fd\u63a7\u5236\u5728 1 \u5206\u949f\u4ee5\u5185, \u540c\u65f6\u4fdd\u8bc1\u753b\u9762\u6e05\u6670\u4e0d\u80fd\u6709\u9a6c\u8d5b\u514b, \u538b\u7f29\u540e\u89c6\u9891\u5728 720p \u4ee5\u4e0a \u7801\u7387 2000k \u4ee5\u4e0a

\n

\u73b0\u5728\u7684\u65b9\u6848\u662f\u901a\u8fc7 ffmpeg.wasm \u538b\u7f29, \u5b98\u65b9\u6d4b\u8bd5\u7ed3\u679c\u6bd4\u539f\u751f ffmpeg \u6162 10-20 \u500d

\n

\u9879\u76ee\u4e2d\u6d4b\u8bd5\u53ea\u8981\u6d89\u53ca\u753b\u9762\u8f6c\u7801\u90fd\u662f\u4e25\u91cd\u8d85\u8fc7 1 \u5206\u949f\n\u9000\u800c\u6c42\u5176\u6b21\u5c1d\u8bd5\u7ef4\u6301\u89c6\u9891\u6d41\u53ea\u51cf\u5e27, \u4f46\u662f\u7ef4\u6301\u539f\u89c6\u9891\u6d41\u9700\u8981 copy \u53c2\u6570, \u6b64\u65f6\u65e0\u6cd5\u901a\u8fc7-r \u8bbe\u7f6e\u53c2\u6570, filter \u53ea\u662f\u8fc7\u6ee4\u5668\u65e0\u6cd5\u538b\u7f29\u89c6\u9891\u4f53\u79ef

\n

\u6628\u5929\u627e\u4e86\u4e00\u4e0b\u5348\u6ca1\u627e\u5230\u53ef\u7528\u7684\u53c2\u6570, \u53ea\u80fd\u8bf7\u6559\u5927\u4f6c\u4e86

\n

\u53c2\u6570\u5982\u4e0b

\n
const args = [\n \"-i\",\n \"input.mov\",\n \"-preset\",\n \"ultrafast\",\n \"-c:a\",\n \"copy\",\n \"-c:v\",\n \"copy\",\n \"-r\", \"24\",\n \"output.mp4\"\n]\n
\n" }, { "author": { "url": "member/henix", "name": "henix", "avatar": "https://cdn.v2ex.com/gravatar/41ecaf675f9a963ac47aec132fd468a6?s=73&d=retro" }, "url": "t/1091285", "title": "ffmpeg \u5904\u7406\u540e\u89c6\u9891\u65f6\u957f\u95ee\u9898", "id": "t/1091285", "date_published": "2024-11-20T10:37:25+00:00", "content_html": "

\u7528 ffmpeg -t \u5c06\u4e00\u4e2a 10s \u7684\u89c6\u9891\u526a\u88c1\u5230 3s \u540e\uff0c\u64ad\u653e\u65f6\u957f\u6ca1\u95ee\u9898\uff0c\u4f46\u662f\u653e\u8fdb concat \u8fc7\u6ee4\u5668\uff0c\u8fd9\u4e2a\u89c6\u9891\u7247\u6bb5\u5360\u7528\u7684\u957f\u5ea6\u4ecd\u4e3a\u539f\u957f\u5ea6 10s \uff0c\u540e\u9762 7s \u8868\u73b0\u4e3a\u6700\u540e\u4e00\u5e27\u9759\u6b62\u753b\u9762\u3002\u5c1d\u8bd5\u4e86\u5404\u79cd\u65b9\u6cd5\u90fd\u4e0d\u884c\uff0c\u8fd8\u671b\u5927\u795e\u8d50\u6559\u3002

\n

\u95ee\u9898\u8be6\u7ec6\u63cf\u8ff0\uff1a

\n

1. \u7528\u5b8c\u5168\u91cd\u7f16\u7801\u7684\u65b9\u6cd5\u5c06\u4e00\u4e2a 10s \u7684\u89c6\u9891\u8f6c\u6362\u4e3a 3.971s \u5e76\u53bb\u6389\u97f3\u9891:

\n

ffmpeg -t 3.971 -i \"\u52a0\u8f7d.mp4\" -c:v libx264 -tune animation -crf 1 -an loading.mp4

\n

ffprobe \u7ed3\u679c\u6587\u4ef6 loading.mp4 \u5982\u4e0b\uff1a

\n
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'loading.mp4':\n Metadata:\n major_brand : isom\n minor_version : 512\n compatible_brands: isomiso2avc1mp41\n encoder : Lavf61.7.100\n Duration: 00:00:03.98, start: 0.000000, bitrate: 49072 kb/s\n Stream #0:0[0x1](eng): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 49068 kb/s, 60 fps, 60 tbr, 15360 tbn (default)\n Metadata:\n handler_name : ?Mainconcept Video Media Handler\n vendor_id : [0][0][0][0]\n encoder : Lavc61.19.100 libx264\n
\n

\u7591\u70b9\uff1a\u65f6\u957f\u4e3a 3.98 \uff0c\u5df2\u7ecf\u4e0d\u7cbe\u786e\uff1f

\n

\u539f\u59cb\u89c6\u9891\u7684 ffprobe \uff0c\u662f\u4e0d\u662f\u539f\u59cb\u89c6\u9891\u6709\u4ec0\u4e48\u4e0d\u6b63\u5e38\uff1a

\n
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '\u52a0\u8f7d.mp4':\n Metadata:\n major_brand : mp42\n minor_version : 0\n compatible_brands: mp42mp41\n creation_time : 2022-03-26T12:31:39.000000Z\n Duration: 00:00:10.00, start: 0.000000, bitrate: 9763 kb/s\n Stream #0:0[0x1](eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 9395 kb/s, 60 fps, 60 tbr, 60k tbn (default)\n Metadata:\n creation_time : 2022-03-26T12:31:39.000000Z\n handler_name : ?Mainconcept Video Media Handler\n vendor_id : [0][0][0][0]\n encoder : AVC Coding\n Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)\n Metadata:\n creation_time : 2022-03-26T12:31:40.000000Z\n handler_name : #Mainconcept MP4 Sound Media Handler\n vendor_id : [0][0][0][0]\n
\n

2. \u5c06\u4e00\u4e2a webm \u89c6\u9891 overlay \u5230\u4e0a\u8ff0\u89c6\u9891\u4e0a\uff0c\u5e76\u52a0\u5165\u97f3\u9891\uff0c\u4e14\u97f3\u89c6\u9891\u90fd\u91cd\u7f16\u7801\uff1a

\n

\u7591\u70b9\uff1awebm \u89c6\u9891\u7684\u65f6\u957f\u663e\u793a\u4e3a N/A \uff0c\u4f46\u5b9e\u9645\u4e3a 3.5s \u5de6\u53f3

\n

\u7528\u4e86 -filter_complex chromakey,scale;overlay

\n

\u7ed3\u679c\u7684 ffprobe \u5982\u4e0b\uff1a

\n
Input #0, matroska,webm, from 'opening.mkv':\n Metadata:\n COMPATIBLE_BRANDS: isomiso2avc1mp41\n MAJOR_BRAND : isom\n MINOR_VERSION : 512\n ENCODER : Lavf61.7.100\n Duration: 00:00:03.98, start: 0.000000, bitrate: 70572 kb/s\n Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv420p(tv, bt709, progressive), 1920x1080, 60 fps, 60 tbr, 1k tbn\n Metadata:\n ENCODER : Lavc61.19.100 libx264\n DURATION : 00:00:03.984000000\n Stream #0:1: Audio: flac, 44100 Hz, stereo, s16\n Metadata:\n ENCODER : Lavc61.19.100 flac\n DURATION : 00:00:03.970000000\n
\n

\u8fd9\u4e00\u6b65\u7ed3\u679c\u89c6\u9891\u957f\u5ea6 3.984s

\n

3. \u5c06\u4e0a\u4e00\u6b65\u7684\u7ed3\u679c\u7528 concat \u52a0\u5230\u53e6\u5916\u4e24\u4e2a\u89c6\u9891\u6d41\u7684\u4e2d\u95f4\uff1a

\n
-filter_complex\n \"[10:v]trim=0:3.97[t10v]\",\n \"[10:a]atrim=0:3.97[t10a]\",\n \"[fv1t][fa1t][t10v][t10a][fv2t][fa2t]cOncat=3:1:1\",\n
\n

\u5176\u4e2d \"[10]\" \u4ee3\u8868\u4e0a\u4e00\u6b65\u7ed3\u679c\u7684\u89c6\u9891\u6d41\u548c\u97f3\u9891\u6d41\uff0c\u5df2\u7ecf\u7528 trim \u5904\u7406

\n

\u7ed3\u679c\uff1a\u5728\u751f\u6210\u7684\u6587\u4ef6\u4e2d\uff0c\u8fd9\u4e00\u6bb5\u7684\u5b9e\u9645\u5360\u7528\u65f6\u95f4\u4e3a 10s \uff0c\u800c\u4e0d\u662f\u6211\u9700\u8981\u7684 3.971s \uff0c\u540e\u9762 7s \u662f\u6700\u540e\u4e00\u5e27\u9759\u6b62\u753b\u9762\u548c\u9759\u97f3\u3002

\n" }, { "author": { "url": "member/xyzos", "name": "xyzos", "avatar": "https://cdn.v2ex.com/gravatar/84a0e4742b86841ac494759dc341ae5e?s=73&d=retro" }, "url": "t/1090588", "date_modified": "2024-11-18T10:30:00+00:00", "content_html": "

\u524d\u63d0\uff1a\u5728 windows/linux \u4e0a\uff0c\u4f7f\u7528\u540c\u6837\u4e00\u4e2a ffmpeg \u9759\u6001\u7f16\u8bd1\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u5bf9\u540c\u6837\u4e00\u4e2a h264 \u7f16\u7801\u7684 mp4 \u6587\u4ef6\u89e3\u7801\uff0c\u89e3\u7801\u547d\u4ee4\u5982\u4e0b\uff1a\n(1) .\\ffmpeg.exe -hwaccel cuda -i E:\\tmp\\1080p_60_10M.mp4 -f null -\n\u89e3\u7801\u5e27\u7387\u4e3a fps=780\n(2) .\\ffmpeg.exe -i E:\\tmp\\1080p_60_10M.mp4 -f null -\n\u89e3\u7801\u5e27\u7387\u4e3a fps=1617

\n

(1) \u89e3\u7801\u7ed3\u679c:

\n
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\\tmp\\1080p_60_10M.mp4':\n
\n

Metadata:\nmajor_brand : isom\nminor_version : 512\ncompatible_brands: isomiso2avc1mp41\nencoder : Lavf60.3.100\nDuration: 00:01:36.67, start: 0.000000, bitrate: 10533 kb/s\nStream #0:00x1: Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 10528 kb/s, 60 fps, 60 tbr, 15360 tbn (default)\nMetadata:\nhandler_name : VideoHandler\nvendor_id : [0][0][0][0]\nencoder : Lavc60.3.100 libx264\nStream mapping:\nStream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))\nPress [q] to stop, [?] for help\nOutput #0, null, to 'pipe:':\nMetadata:\nmajor_brand : isom\nminor_version : 512\ncompatible_brands: isomiso2avc1mp41\nencoder : Lavf60.22.101\nStream #0:0(und): Video: wrapped_avframe, nv12(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 60 fps, 60 tbn (default)\nMetadata:\nhandler_name : VideoHandler\nvendor_id : [0][0][0][0]\nencoder : Lavc60.40.100 wrapped_avframe\n[out#0/null @ 0000017e54639b80] video:2719KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown\nframe= 5800 fps=780 q=-0.0 Lsize=N/A time=00:01:36.66 bitrate=N/A speed= 13x

\n
(2) \u89e3\u7801\u7ed3\u679c:\n\n Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\\tmp\\1080p_60_10M.mp4':\n
\n

Metadata:\nmajor_brand : isom\nminor_version : 512\ncompatible_brands: isomiso2avc1mp41\nencoder : Lavf60.3.100\nDuration: 00:01:36.67, start: 0.000000, bitrate: 10533 kb/s\nStream #0:00x1: Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 10528 kb/s, 60 fps, 60 tbr, 15360 tbn (default)\nMetadata:\nhandler_name : VideoHandler\nvendor_id : [0][0][0][0]\nencoder : Lavc60.3.100 libx264\nStream mapping:\nStream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))\nPress [q] to stop, [?] for help\nOutput #0, null, to 'pipe:':\nMetadata:\nmajor_brand : isom\nminor_version : 512\ncompatible_brands: isomiso2avc1mp41\nencoder : Lavf60.22.101\nStream #0:0(und): Video: wrapped_avframe, yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 60 fps, 60 tbn (default)\nMetadata:\nhandler_name : VideoHandler\nvendor_id : [0][0][0][0]\nencoder : Lavc60.40.100 wrapped_avframe\n[out#0/null @ 000001f2b2f29c00] video:2719KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown\nframe= 5800 fps=1617 q=-0.0 Lsize=N/A time=00:01:36.66 bitrate=N/A speed=26.9x

\n

\u95ee\u9898\uff1a\u6307\u5b9a\u4e86 -hwaccel cuda \u53c2\u6570\u8fdb\u884c\u89e3\u7801\u7684 fps \u8981\u6bd4\u4e0d\u6307\u5b9a\u8fd9\u4e2a\u53c2\u6570\u8fdb\u884c\u89e3\u7801\u7684\u5e27\u7387\u5c11\u4e86\u4e00\u500d\uff0c\u81ea\u5df1\u7684\u4e3b\u673a\u662f nvidia \u663e\u5361\uff0c\u8fd9\u4e2a\u53ef\u80fd\u662f\u4ec0\u4e48\u539f\u56e0\uff1f

\n", "date_published": "2024-11-18T10:26:55+00:00", "title": "\u8bf7\u6559\u4e00\u4e2a\u5173\u4e8e ffmpeg \u7684\u95ee\u9898", "id": "t/1090588" }, { "author": { "url": "member/zhwguest", "name": "zhwguest", "avatar": "https://cdn.v2ex.com/avatar/b633/f688/433522_large.png?m=1685067457" }, "url": "t/1090239", "title": "\u5982\u4f55\u4e0b\u8f7d\u5b98\u65b9\u7684 ffmpeg \u4e8c\u8fdb\u5236\u53d1\u5e03", "id": "t/1090239", "date_published": "2024-11-17T04:07:07+00:00", "content_html": "

\u9996\u5148\u627e\u5230 ffmpeg \u7684\u5b98\u65b9\u7f51\u7ad9\uff1a https://www.ffmpeg.org/

\n

\u7136\u540e\u6839\u636e\u81ea\u5df1\u7684 os \u548c arch \u627e\u5230\u76f8\u5e94\u7684\u5165\u53e3\u56fe\u6807\uff1b

\n

\u70b9\u51fb\u56fe\u6807\uff0c\u7136\u540e\u63d0\u793a\u8df3\u8f6c\u5230\u7b2c\u4e09\u65b9\u7f51\u7ad9\u8fdb\u884c\u4e0b\u8f7d\uff1f

\n

\u8fd9\u662f\u4ec0\u4e48\u9b54\u5e7b\u64cd\u4f5c\uff1f

\n" }, { "author": { "url": "member/crazystory", "name": "crazystory", "avatar": "https://cdn.v2ex.com/gravatar/9ffe86279d96388407c45e563c051568?s=73&d=retro" }, "url": "t/1068110", "title": "\u89c6\u9891\u6a21\u677f\u66ff\u6362\u56fe\u7247\uff0c\u6709\u507f", "id": "t/1068110", "date_published": "2024-08-27T04:38:37+00:00", "content_html": "

\u7814\u7a76\u4e86\u4e00\u661f\u671f\uff0c\u641e\u4e0d\u5b9a\u4e86\uff0c\u6709\u507f\u8bf7\u5927\u4f6c\u5e2e\u5fd9\u89e3\u51b3\u4e0b\u3002\u4ee5\u4e0b\u662f\u9700\u6c42

\n

\u526a\u6620\u5236\u4f5c 10 \u79d2\u7684\u6a21\u677f\u89c6\u9891\uff0c\u8f6e\u6362 4 \u5f20\u56fe\uff0c\u5177\u6709\u8499\u7248\u548c\u8f6c\u573a\u7279\u6548\u3002\u9700\u8981\u901a\u8fc7 ffmpeg \u5728\u4fdd\u7559\u8499\u7248\u548c\u8f6c\u573a\u7684\u524d\u63d0\u4e0b\u66ff\u6362\u56fe\u7247

\n

vx YW55ZWZlbmdqaW5nbGluZw==

\n" }, { "author": { "url": "member/jifengg", "name": "jifengg", "avatar": "https://cdn.v2ex.com/gravatar/1a9fd366a7d82468595b4275cce70f28?s=73&d=retro" }, "url": "t/1054559", "title": "ffmpeg \u8fc7\u6ee4\u5668 xfade \u81ea\u5b9a\u4e49\u52a8\u753b\u7684\u7814\u7a76", "id": "t/1054559", "date_published": "2024-07-03T07:42:51+00:00", "content_html": "

\u672c\u6587\u65e0\u4efb\u4f55\u63a8\u5e7f\uff0c\u8bf7\u653e\u5fc3\u9605\u8bfb\u3002
\n\u672c\u6587\u65e0\u4efb\u4f55\u63a8\u5e7f\uff0c\u8bf7\u653e\u5fc3\u9605\u8bfb\u3002
\n\u672c\u6587\u65e0\u4efb\u4f55\u63a8\u5e7f\uff0c\u8bf7\u653e\u5fc3\u9605\u8bfb\u3002

\n

\u524d\u524d\u8a00

\n

hello \uff0c\u5144\u5f1f\u4eec\uff0c\u6211\u53c8\u6765\u5206\u4eab\u6211\u7684 ffmpeg \u811a\u672c\u5566\u3002
\n\u4e0a\u6b21\u5206\u4eab\u4e86\u4e00\u4e2a\u4f7f\u7528 ffmpeg \uff0c\u5c06\u591a\u5f20\u56fe\u7247\u8f6c\u6362\u6210\u7c7b\u4f3c\u5e7b\u706f\u7247\u7684\u89c6\u9891\uff0c\u652f\u6301\u591a\u79cd\u8f6c\u573a\u6548\u679c\uff0c\u8bf4\u8fc7\u5728\u7814\u7a76\u81ea\u5b9a\u4e49\u6548\u679c\uff0c\u76ee\u524d\u6709\u70b9\u5c0f\u6210\u679c\uff0c\u4e8e\u662f\u6709\u4e86\u672c\u6587\u3002

\n

\u672c\u6b21\u6ca1\u6709\u65b0\u589e\u811a\u672c\uff0c\u800c\u662f\u589e\u5f3a\u4e86ffmpeg.img2video.js\uff0c\u9884\u7f6e\u4e86\u4e00\u4e9b\u81ea\u5b9a\u4e49\u6548\u679c\uff0c\u5e76\u652f\u6301\u81ea\u5df1\u6dfb\u52a0\u6548\u679c\u3002

\n

\u4ee5\u4e0b\u7684\u90fd\u662f\u672c\u6b21\u7684\u6280\u672f\u5206\u4eab\u3002\u5982\u679c\u4f60\u4e0d\u611f\u5174\u8da3\uff0c\u53ef\u4ee5\u76f4\u63a5\u5230 GitHub \u66f4\u65b0\u811a\u672c\u3002

\n

\u5f00\u6e90\u5730\u5740

\n

GitHub \u5730\u5740\uff1ahttps://github.com/jifengg/ffmpeg-script

\n

\u524d\u8a00

\n

\u4f7f\u7528xfade\u8fc7\u6ee4\u5668\u505a\u89c6\u9891\u8f6c\u573a\u5207\u6362\u6548\u679c\uff0c\u672c\u8eab ffmpeg \u5df2\u7ecf\u63d0\u4f9b\u4e86 56 \u79cd\u6548\u679c\uff0c\u80fd\u6ee1\u8db3\u5927\u90e8\u5206\u9700\u6c42\u3002\u4e0d\u8fc7\uff0c\u66f4\u590d\u6742\u7684\u8fc7\u6e21\u6548\u679c\uff08\u4f8b\u5982\u7ffb\u9875\uff09\u8fd8\u6ca1\u6709\u3002
\n\u6839\u636e\u6587\u6863\uff0c\u4f7f\u7528 transition=custom+expr \uff0c\u53ef\u4ee5\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u6548\u679c\u3002\u4f46\u662f\uff0c\u5b98\u65b9\u6587\u6863\u5e76\u6ca1\u6709\u5bf9expr\u5982\u4f55\u7f16\u5199\u505a\u8be6\u7ec6\u8bf4\u660e\uff0c\u4e5f\u6ca1\u6709 google \u5230\u3002
\n\u56e0\u6b64\uff0c\u5bf9\u5176\u8fdb\u884c\u4e86\u4e00\u756a\u7814\u7a76\uff0c\u5c1d\u8bd5\u5b9e\u73b0\u4e86\u51e0\u79cd\u6548\u679c\u3002\u7b80\u5355\u505a\u4e00\u4e2a\u4f7f\u7528\u6559\u7a0b\uff0c\u5e0c\u671b\u80fd\u591f\u5e2e\u52a9\u5230\u6709\u9700\u8981\u7684\u4eba\u3002

\n

\u6548\u679c\u9884\u89c8\uff08\u70b9\u51fb\u67e5\u770b\u89c6\u9891\uff0c\u89c6\u9891\u5747\u5c0f\u4e8e 1MB \uff09

\n

\u6c34\u6ef4

\n

https://github.com/jifengg/ffmpeg-script/assets/17020523/b3cec5b1-d747-46bd-aae1-924289aaddce

\n

\u767e\u53f6\u7a97

\n

https://github.com/jifengg/ffmpeg-script/assets/17020523/1bef9ae3-41c3-4747-ae41-9056ae4e6892

\n

\u7b80\u6613\u7ffb\u9875

\n

https://github.com/jifengg/ffmpeg-script/assets/17020523/30c810a1-7522-4829-8450-4602c8203853

\n

ffmpeg \u5b98\u65b9 wiki

\n

https://trac.ffmpeg.org/wiki/Xfade

\n

ffmpeg \u5b98\u65b9\u6587\u6863\u7ffb\u8bd1

\n

\u4ee5\u4e0b\u7ffb\u8bd1\u81eaFFmpeg xfade \u5b98\u65b9\u6587\u6863

\n
xfade\n\n\u5c06\u6de1\u5165\u6de1\u51fa\u4ece\u4e00\u4e2a\u8f93\u5165\u89c6\u9891\u6d41\u5e94\u7528\u5230\u53e6\u4e00\u4e2a\u8f93\u5165\u89c6\u9891\u6d41\u3002\u6de1\u5165\u6de1\u51fa\u5c06\u6301\u7eed\u6307\u5b9a\u7684\u65f6\u95f4\u3002\n\u4e24\u4e2a\u8f93\u5165\u5fc5\u987b\u662f\u6052\u5b9a\u5e27\u901f\u7387\uff0c\u5e76\u4e14\u5177\u6709\u76f8\u540c\u7684\u5206\u8fa8\u7387\u3001\u50cf\u7d20\u683c\u5f0f\u3001\u5e27\u901f\u7387\u548c\u65f6\u95f4\u57fa\u51c6\u3002\n\n\u8be5\u8fc7\u6ee4\u5668\u63a5\u53d7\u4ee5\u4e0b\u9009\u9879\uff1a\n\ntransition\n 'custom'\n [\u5ffd\u7565]\n\nduration\n \u8bbe\u7f6e\u4ea4\u53c9\u6de1\u5165\u6de1\u51fa\u6301\u7eed\u65f6\u95f4\uff08\u4ee5\u79d2\u4e3a\u5355\u4f4d\uff09\u3002\u8303\u56f4\u4e3a 0 \u81f3 60 \u79d2\u3002\u9ed8\u8ba4\u6301\u7eed\u65f6\u95f4\u4e3a 1 \u79d2\u3002\n\noffset\n \u8bbe\u7f6e\u76f8\u5bf9\u4e8e\u7b2c\u4e00\u4e2a\u8f93\u5165\u6d41\u7684\u4ea4\u53c9\u6de1\u5165\u6de1\u51fa\u5f00\u59cb\u65f6\u95f4\uff08\u4ee5\u79d2\u4e3a\u5355\u4f4d\uff09\u3002\u9ed8\u8ba4\u504f\u79fb\u91cf\u4e3a 0 \u3002\n\nexpr\n \u8bbe\u7f6e\u81ea\u5b9a\u4e49\u8fc7\u6e21\u6548\u679c\u7684\u8868\u8fbe\u5f0f\u3002\n \u8868\u8fbe\u5f0f\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u53d8\u91cf\u548c\u51fd\u6570\uff1a\n\n X\n Y\n \u5f53\u524d\u6837\u672c\u7684\u5750\u6807\u3002\n\n W\n H\n \u56fe\u50cf\u7684\u5bbd\u5ea6\u548c\u9ad8\u5ea6\u3002\n\n P\n \u8fc7\u6e21\u6548\u679c\u7684\u8fdb\u5c55\u3002\n [\u8bd1\u6ce8] \u8fc7\u6e21\u5f00\u59cb\u65f6\uff0cP=1.0 \uff0c\u8fc7\u6e21\u7ed3\u675f\u65f6\uff0cP=0.0 \u3002\n\n PLANE\n \u76ee\u524d\u6b63\u5728\u5904\u7406\u7684\u5e73\u9762\u3002\n [\u8bd1\u6ce8] \u8fd9\u91cc\u7684\u5e73\u9762\uff0c\u5176\u5b9e\u5c31\u662f\u6307\u50cf\u7d20\u683c\u5f0f\u7684\u5206\u91cf\u3002\n [\u8bd1\u6ce8] \u53d6\u503c\u8303\u56f4\u7531\u8f93\u5165\u6d41\u7684\u50cf\u7d20\u683c\u5f0f pix_fmt \u51b3\u5b9a\uff0c\u5982 yuv420p \uff0c\u5219\u53d6\u503c\u8303\u56f4\u662f 0 \uff0c1 \uff0c2 \uff1b\u5982 rgba \uff0c\u5219\u53d6\u503c\u8303\u56f4\u662f 0 \uff0c1 \uff0c2 \uff0c3 \u3002\n\n A\n \u8fd4\u56de\u7b2c\u4e00\u4e2a\u8f93\u5165\u6d41\u5728\u5f53\u524d\u4f4d\u7f6e\u548c\u5e73\u9762\u7684\u503c\u3002\n\n B\n \u8fd4\u56de\u7b2c\u4e8c\u4e2a\u8f93\u5165\u6d41\u5728\u5f53\u524d\u4f4d\u7f6e\u548c\u5e73\u9762\u7684\u503c\u3002\n\n a0(x,y)\n a1(x,y)\n a2(x,y)\n a3(x,y)\n \u8fd4\u56de\u7b2c\u4e00\u4e2a\u8f93\u5165\u7684\u7b2c\u4e00/\u7b2c\u4e8c/\u7b2c\u4e09/\u7b2c\u56db\u4e2a\u5206\u91cf\u7684 \u4f4d\u7f6e (x,y) \u5904\u7684\u50cf\u7d20\u7684\u503c\u3002\n [\u8bd1\u6ce8] \u4f8b\u5982\uff0c\u50cf\u7d20\u683c\u5f0f\u662f yuv420p \uff0ca0 \u8fd4\u56de\u7684\u662f Y \u5206\u91cf\u3002a1 \u8fd4\u56de\u7684\u662f U \u5206\u91cf\u3002a2 \u8fd4\u56de\u7684\u662f V \u5206\u91cf\u3002\u6ca1\u6709 a3\n\n b0(x,y)\n b1(x,y)\n b2(x,y)\n b3(x,y)\n \u8fd4\u56de\u7b2c\u4e8c\u4e2a\u8f93\u5165\u7684\u7b2c\u4e00/\u7b2c\u4e8c/\u7b2c\u4e09/\u7b2c\u56db\u4e2a\u5206\u91cf\u7684 \u4f4d\u7f6e (x,y) \u5904\u7684\u50cf\u7d20\u7684\u503c\u3002\n
\n

\u7406\u89e3 P

\n

\u4e00\u822c\u6765\u8bf4\uff0cffmpeg \u4e2d\u652f\u6301\u65f6\u95f4\u8f74\u7f16\u8f91\u7684\u8fc7\u6ee4\u5668\uff0c\u90fd\u6709t\u548cn\u53c2\u6570\u53ef\u4ee5\u7528\u5728\u8868\u8fbe\u5f0f\u4e2d\uff0c\u5176\u4e2dt\u8868\u793a\u65f6\u95f4\u79d2\uff0cn\u8868\u793a\u5e27\u6570\u3002
\n\u4f46\u662f xfade \u91cc\u5374\u662f\u7528\u7684 P \uff0c\u5b83\u4e0d\u662ft\u6216n\u3002\u5982\u679c\u4f60\u7406\u89e3\u9519\u4e86\uff0c\u4f1a\u53d1\u73b0\u81ea\u5b9a\u4e49\u6548\u679c\u5b8c\u5168\u6ca1\u6548\u3002
\n\u56e0\u4e3a\uff0c\u5b83\u8868\u793a\u7684\u662f\u8fc7\u6e21\u6548\u679c\u7684\u8fdb\u5ea6\uff0c\u800c\u4e14\uff0c\u91cd\u8981\u7684\u662f\uff0c\u5b83\u662f\u4e2a\u9012\u51cf\u7684\u6570\u3002

\n\n

\u7406\u89e3 X,Y,W,H

\n

X,Y \u8868\u793a\u5750\u6807\uff0c\u662f\u6307\u201c\u5f53\u524d\u6b63\u5728\u8ba1\u7b97\u8868\u8fbe\u5f0f\u7684\u50cf\u7d20\u7684\u5750\u6807\u201d\uff0c\u6309\u7167\u6211\u4eec\u8981\u5b9e\u73b0\u7684\u6548\u679c\uff0c\u51b3\u5b9a\u8be5\u50cf\u7d20\u5bf9\u5e94\u7684\u989c\u8272\u7801\u3002

\n

W,H \u662f\u56fe\u50cf\u7684\u5bbd\u9ad8\uff0c\u8fd9\u4e2a\u5728\u6574\u4e2a\u6e10\u53d8\u8fc7\u7a0b\u662f\u4fdd\u6301\u4e0d\u53d8\u7684\u3002

\n

\u7406\u89e3 PLANE,A,B,a0(x,y),...,b0(x,y),...

\n

a0(x,y)\u8868\u793a\u7b2c\u4e00\u4e2a\u89c6\u9891\u5750\u6807 x,y \u5904\u7684\u50cf\u7d20\u7684\u7b2c\u4e00\u4e2a\u5206\u91cf\u503c\u3002\nPLANE \u8868\u793a\u5f53\u524d\u662f\u8ba1\u7b97\u7684\u7b2c\u51e0\u4e2a\u5206\u91cf\u503c\u3002\nA \u662f\u4e00\u4e2a\u7b80\u5199\uff0c\u5f53 PLANE=0 \u65f6,A=a0(X,Y)\uff1b PLANE=1 \u65f6\uff0cA=a1(X,Y)\uff1b PLANE=2 \u65f6\uff0cA=a2(X,Y)\uff1b\u4ee5\u6b64\u7c7b\u63a8\u3002\nb \u548c B \u540c a \u548c A \u3002

\n
\n

\u6ce8\u610f\uff0c\u65e0\u6cd5\u901a\u8fc7\u7c7b\u4f3ca(plane,x,y)\u7684\u65b9\u6cd5\u6765\u83b7\u5f97\u6307\u5b9a\u5750\u6807\u6307\u5b9a\u5206\u91cf\u7684\u503c\uff0c\u56e0\u6b64\u5728\u50cf\u7d20\u6709\u4f4d\u79fb\u7684\u65f6\u5019\uff0c\u8868\u8fbe\u5f0f\u4f1a\u6bd4\u8f83\u957f\u3002\u5982if(eq(PLANE,0),a0(X,Y),if(eq(PLANE,1),a1(X,Y),if(eq(PLANE,2),a2(X,Y),0)))

\n
\n

\u7406\u89e3 expr

\n

xfade\u7684expr\uff0c\u8fd4\u56de\u4e00\u4e2a\u503c\uff0c\u4f46\u662f\u8fd9\u4e2a\u503c\u662f\u4ec0\u4e48\u542b\u4e49\u5462\uff0c\u4e00\u822c\u4eba\u770b\u6587\u6863\u5f88\u96be\u7406\u89e3\u3002
\n\u4ee5 300x200 \u7684\u8f93\u5165\u6e90\u4e3a\u4f8b\uff0c\u5047\u8bbe\u5176\u50cf\u7d20\u683c\u5f0f\u662f yuv420p \uff0c\u5219\u5176\u5206\u91cf\u4e2a\u6570\u662f 3 \u3002\uff08 ffmpeg \u652f\u6301\u7684\u50cf\u7d20\u683c\u5f0f\u53ca\u683c\u5f0f\u4fe1\u606f\uff0c\u53ef\u4ee5\u901a\u8fc7ffmpeg -pix_fmts\u67e5\u770b\uff09\u3002\n\u50cf\u7d20\u70b9\u662f60000\u4e2a\uff0c\u6bcf\u4e00\u5e27\u7684\u50cf\u7d20\u5206\u91cf\u603b\u6570\u5c31\u662f60000*3=18 \u4e07\u4e2a\u3002
\n\u90a3\u4e48\uff0c\u8fc7\u6e21\u5f00\u59cb\u7684\u7b2c\u4e00\u5e27\uff0cffmpeg \u4f1a\u904d\u5386\u6bcf\u4e2a\u50cf\u7d20\u70b9\u7684\u6bcf\u4e2a\u5206\u91cf\uff0c\u5206\u522b\u8c03\u7528expr\uff0c\u5e76\u8bbe\u7f6e X,Y,PLANE \u7b49\u503c\u3002\u603b\u5171\u8c03\u752818 \u4e07\u6b21\u83b7\u5f97\u5bf9\u5e94\u7684\u503c\uff0c\u6765\u5b8c\u6210\u7b2c\u4e00\u5e27\u7684\u6e32\u67d3\u3002\n\u5982\u679c\u6211\u4eec\u5e0c\u671b\u6bcf\u4e00\u5e27\u5c31\u662f\u663e\u793a\u7b2c\u4e00\u4e2a\u89c6\u9891\u7684\u753b\u9762\uff0c\u90a3\u4e48\u53ef\u4ee5\u5199expr=A\u5373\u53ef\u3002A\u8868\u793a\u7684\u5c31\u662f\u7b2c\u4e00\u4e2a\u89c6\u9891\u5f53\u524d\u50cf\u7d20\u5f53\u524d\u5206\u91cf\u7684\u503c\u3002

\n

\u5c1d\u8bd5 1 \uff0c\u5b9e\u73b0\u6e10\u9690\u6e10\u663e\u6548\u679c

\n

\u5982\u679c\u6211\u4eec\u5e0c\u671b\u5b9e\u73b0\u7b2c\u4e00\u4e2a\u89c6\u9891\u6e10\u6e10\u53d8\u900f\u660e\uff0c\u7b2c\u4e8c\u4e2a\u89c6\u9891\u7531\u900f\u660e\u6e10\u6e10\u663e\u73b0\uff0c\u7c7b\u4f3cxfade\u9ed8\u8ba4\u7684\u6548\u679cfade\uff0c\u90a3\u4e48\u53ef\u4ee5\u5199expr='A*P+B*(1-P)'\u3002
\n\u56e0\u4e3a P \u662f\u4ece 1.0 \u7ebf\u6027\u53d8\u6210 0.0 \u7684\u3002\u6240\u4ee5\u4e00\u5f00\u59cb P=1 \uff0c\u8868\u8fbe\u5f0f\u8ba1\u7b97\u7ed3\u679c=A\uff0c\u770b\u5230\u7684\u5c31\u662f\u53ea\u6709\u7b2c\u4e00\u4e2a\u89c6\u9891\u753b\u9762\uff0c\u5230\u4e00\u534a\u65f6\uff0cP=0.5 \uff0c\u7ed3\u679c=0.5A+0.5B\uff0c\u753b\u9762\u5c31\u662f\u4e24\u4e2a\u89c6\u9891\u5206\u522b\u534a\u900f\u660e\u53e0\u52a0\u5728\u4e00\u8d77\u3002\u6700\u540e P=0.0 \u65f6\uff0c\u7ed3\u679c=B\uff0c\u5c31\u53ea\u5269\u4e0b\u7b2c\u4e8c\u4e2a\u89c6\u9891\u7684\u753b\u9762\u4e86\u3002

\n

\u5c1d\u8bd5 2 \uff0c\u5b9e\u73b0\u64e6\u9664\u6548\u679c

\n

\u540c\u6837\u7684\uff0c\u5982\u679c\u6211\u4eec\u5e0c\u671b\u5b9e\u73b0\u4e00\u4e2a\u4ece\u53f3\u5f80\u5de6\u64e6\u9664\u7684\u6548\u679c\uff08\u56fe\u7247\u5f15\u7528\u81eahttps://trac.ffmpeg.org/wiki/Xfade\uff09\uff1a
\n\"wipeleft\"

\n

\u5206\u6790\u4e00\u4e0b\uff0c\u5206\u5272\u7ebf\u5728\u753b\u9762\u6c34\u5e73\u7ebf\u4e0a\u7684\u4f4d\u7f6e X \uff0c\u9664\u4ee5\u5bbd\u5ea6 W \uff0c\u5176\u5b9e\u5c31\u662f\u7b49\u4e8e P \uff0c\u4e8e\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u8ba9\u5206\u5272\u7ebf\u5de6\u8fb9\u7684\u663e\u793a\u753b\u9762 A \uff0c\u53f3\u8fb9\u7684\u663e\u793a\u753b\u9762 B \u3002\nexpr='if(lt(X/W,P),A,B)'\uff1a\u5f53X/W<P\u7684\u65f6\u5019\uff0c\u8bf4\u660e X \u5728\u5206\u5272\u7ebf\u5de6\u8fb9\uff0c\u4e8e\u662f\u663e\u793a A \uff0c\u5426\u5219\u663e\u793a B \u3002

\n
\n

\u5206\u5272\u7ebf\u4e0a\u663e\u793a A \u8fd8\u662f B \uff0c\u5f71\u54cd\u4e0d\u5927\u3002\u8fd9\u91cc\u662f\u663e\u793a\u4e86 B \uff0c\u5982\u679c\u8981\u663e\u793a A \uff0c\u53ef\u4ee5\u7528lte\u4ee3\u66fflt\u3002

\n
\n

\u5c1d\u8bd5 3 \uff0c\u5b9e\u73b0\u63a8\u8d70\u6548\u679c

\n

\u4ece\u4e0a\u9762\u4e24\u4e2a\u4f8b\u5b50\u4f60\u5927\u6982\u80fd\u7406\u89e3 expr \u8981\u8fd4\u56de\u4ec0\u4e48\u5185\u5bb9\u4e86\u3002\u6211\u4eec\u63a5\u7740\u7b2c\u4e09\u4e2a\u4f8b\u5b50\u3002\n\u5982\u679c\u6211\u4eec\u5e0c\u671b\u5b9e\u73b0\u7684\u662f\u4e00\u4e2a\u4ece\u53f3\u5f80\u5de6\u63a8\u8d70\u7684\u6548\u679c\uff1a
\n\"slideleft\"

\n

\u4f60\u4f1a\u53d1\u73b0\uff0c\u53d8\u5f97\u66f4\u590d\u6742\u4e86\u3002\u4f60\u53ef\u4ee5\u5148\u6682\u505c\u8bd5\u8bd5\u81ea\u5df1\u80fd\u5426\u5199\u51fa\u6765\u3002

\n

\u4e3a\u4ec0\u4e48\u66f4\u590d\u6742\u4e86\uff1f\u4ee5\u5750\u6807(0,0)\u4e3a\u4f8b\uff0c\u4ed6\u663e\u793a\u7684\u50cf\u7d20\u65f6\u523b\u90fd\u5728\u53d8\u5316\uff08\u56e0\u4e3a\u753b\u9762\u5728\u5f80\u5de6\u79fb\u52a8\uff09\u3002
\n\u4f8b\u5982\uff0c\u5728 P=0.8 \u7684\u65f6\u5019\uff0c\u5b83(0,0)\u5e94\u8be5\u662f\u89c6\u9891 A X=W*0.2,Y=0 \u5750\u6807\u5904\u7684\u50cf\u7d20\u503c\u3002\uff08\u8fd9\u91cc\u9700\u8981\u597d\u597d\u7406\u89e3\uff0c\u53c2\u8003\u4e0b\u56fe\u5e2e\u5fd9\u7406\u89e3\uff09

\n

\"image\"

\n

\u5728X/W>P\u7684\u5730\u65b9\uff0c\u5e94\u8be5\u663e\u793a\u89c6\u9891 B \u7684\u753b\u9762\uff0c\u5176\u5750\u6807\u8f6c\u6362\u5173\u7cfb\u662f(X-P*W,Y)\u3002
\n\u6ce8\u610f\uff0c\u6b64\u65f6\u4f60\u6ca1\u6cd5\u518d\u7528\u503cA\u548cB\u4e86\uff0c\u56e0\u4e3a\u5b83\u4eec\u662f\u5750\u6807(X,Y)\u7684\u5206\u91cf\uff0c\u800c\u6211\u4eec\u8981\u5728(X,Y)\u5904\u663e\u793a\u522b\u7684\u5750\u6807\u7684\u50cf\u7d20\uff0c\u8fd9\u4e2a\u6211\u4eec\u5728\u4e0a\u9762\u7406\u89e3 PLANE,A,B,a0(x,y),...,b0(x,y),...\u7684\u5730\u65b9\u8bf4\u8fc7\u4e86\u3002

\n

\u90a3\u4e48\u8fd9\u4e2a\u8868\u8fbe\u5f0f\u8981\u600e\u4e48\u5199\u5462\uff1f

\n
expr='if(lt(X/W,P),^\nif(eq(PLANE,0),a0(X+(1-P)*W,Y),^\nif(eq(PLANE,1),a1(X+(1-P)*W,Y),^\nif(eq(PLANE,2),a2(X+(1-P)*W,Y),0)))^\n,^\nif(eq(PLANE,0),b0(X-P*W,Y),^\nif(eq(PLANE,1),b1(X-P*W,Y),^\nif(eq(PLANE,2),b2(X-P*W,Y),0)))^\n)'\n
\n
\n

\u6211\u6d4b\u8bd5\u7684\u65f6\u5019\u7528\u7684\u662f windows \u7684 bat \u811a\u672c\uff0c\u4e3a\u4e86\u65b9\u4fbf\u7406\u89e3\u548c\u4fee\u6539\uff0c\u7528^\u8fdb\u884c\u4e86\u6362\u884c\u3002\u6ce8\u610f\u4e0d\u8981\u6709\u7a7a\u683c\uff0c\u5426\u5219\u4f1a\u62a5\u9519\u3002
\n\u6d4b\u8bd5\u7684\u65f6\u5019\u7528\u7684\u662f yuv420p \u50cf\u7d20\u683c\u5f0f\uff0c\u56e0\u6b64\u8868\u8fbe\u5f0f\u6ca1\u6709\u7528\u5230 a3 \uff0c\u5982\u679c\u662f\u7528\u4e86 4 \u4e2a\u5206\u91cf\u7684\u50cf\u7d20\u683c\u5f0f\u9700\u8981\u628a a3 \u6309\u7167\u4e0a\u9762\u7684\u683c\u5f0f\u52a0\u8fdb\u53bb\u3002

\n
\n

\u5176\u4e2d\uff0c\u5206\u5272\u7ebf\u5de6\u8fb9\u663e\u793a\u89c6\u9891 A \u7684\u753b\u9762\uff0c\u4e14 x \u5750\u6807\u5de6\u79fb\u4e86(1-P)*W \u4e2a\u50cf\u7d20\uff0c\u56e0\u6b64\u5176 x \u5750\u6807\u8868\u8fbe\u5f0f\u662fX+(1-P)*W\uff1b
\n\u53f3\u8fb9\u663e\u793a\u89c6\u9891 B \u7684\u753b\u9762\uff0c\u4e14 x \u5750\u6807\u53f3\u79fb\u5230\u4e86\u5206\u5272\u7ebf\u53f3\u8fb9\uff0c\u56e0\u6b64\u5176 x \u5750\u6807\u8868\u8fbe\u5f0f\u662fX-P*W\u3002
\n\u56e0\u4e3a\u662f\u6c34\u5e73\u79fb\u52a8\uff0c\u6240\u4ee5 y \u5750\u6807\u4fdd\u6301Y\u5373\u53ef\u3002

\n

\u4e8e\u662f\uff0c\u968f\u7740 P \u4ece 1.0 \u6e10\u53d8\u5230 0.0 \uff0c\u89c6\u9891 A \u5c31\u50cf\u88ab\u89c6\u9891 B \u4ece\u53f3\u8fb9\u63a8\u5230\u4e86\u5de6\u8fb9\uff0c\u5b8c\u6210\u4e86\u4e00\u4e2a\u8fc7\u6e21\u6548\u679c\u3002

\n

\u5c0f\u7ed3

\n

\u73b0\u5728\uff0c\u4f60\u5df2\u7ecf\u4e86\u89e3\u4e86 expr \u8981\u600e\u4e48\u7f16\u5199\u6765\u5b9e\u73b0\u8fc7\u6e21\u6548\u679c\u4e86\u3002\u6211\u8fd8\u5b9e\u73b0\u4e86\u4e00\u4e9b\u5176\u5b83\u6548\u679c\uff0c\u5305\u62ec\u793a\u4f8b\u91cc\u7684\uff0c\u4f60\u53ef\u4ee5\u5728 GitHub \u4e0a\u67e5\u770b\u3002

\n

\u6027\u80fd

\n

\u5728 windows \u4e0b\u521b\u5efa 2 \u4e2a bat \u6587\u4ef6\uff0c\u5206\u522b\u8f93\u5165\u6d4b\u8bd5\u547d\u4ee4\uff1a

\n
@echo off\n@REM \u4f7f\u7528 custom \u5b9e\u73b0 slideleft \u6548\u679c\nffmpeg -y -hide_banner ^\n-f lavfi -i \"pal100bars=r=1/1000\" ^\n-f lavfi -i \"colorchart=r=1/1000\" ^\n-filter_complex ^\n[0:v]format=yuv420p,scale=960:480,fps=25,trim=duration=40[v1];^\n[1:v]format=yuv420p,scale=960:480,fps=25,trim=duration=40.04[v2];^\n[v1][v2]xfade=duration=40:offset=0:transition=custom:^\nexpr='if(lt(X/W,P),^\nif(eq(PLANE,0),a0(X+(1-P)*W,Y),^\nif(eq(PLANE,1),a1(X+(1-P)*W,Y),^\nif(eq(PLANE,2),a2(X+(1-P)*W,Y),0)))^\n,^\nif(eq(PLANE,0),b0(X-P*W,Y),^\nif(eq(PLANE,1),b1(X-P*W,Y),^\nif(eq(PLANE,2),b2(X-P*W,Y),0)))^\n)' ^\n-crf 23 -c:v h264 -pix_fmt yuv420p -movflags +faststart -r 25 -aspect 960:480 ^\nout1.mp4\n
\n
@echo off\n@REM \u4f7f\u7528\u5185\u7f6e\u7684 slideleft \u6548\u679c\nffmpeg -y -hide_banner ^\n-f lavfi -i \"pal100bars=r=1/1000\" ^\n-f lavfi -i \"colorchart=r=1/1000\" ^\n-filter_complex ^\n[0:v]format=yuv420p,scale=960:480,fps=25,trim=duration=40[v1];^\n[1:v]format=yuv420p,scale=960:480,fps=25,trim=duration=40.04[v2];^\n[v1][v2]xfade=duration=40:offset=0:transition=slideleft ^\n-crf 23 -c:v h264 -pix_fmt yuv420p -movflags +faststart -r 25 -aspect 960:480 ^\nout2.mp4\n
\n

\u8fd9\u91cc\u4f7f\u7528\u7684\u52a8\u753b\u65f6\u957f\u662f 40 \u79d2\uff0c\u53ef\u4ee5\u81ea\u884c\u4fee\u6539\u6210 0~60 \u79d2\u3002
\n\u5728\u6211\u7535\u8111\u4e0a\u8fd0\u884c\uff0c\u8017\u65f6\u5206\u522b\u662f\uff1a\u81ea\u5b9a\u4e4917.514 \u79d2,\u5185\u7f6e1.605 \u79d2\u3002
\n\u53ef\u4ee5\u770b\u51fa\uff0c\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u6548\u679c\uff0c\u8fdc\u6bd4\u5185\u7f6e\u6548\u679c\u66f4\u8017\u65f6\u3002\u539f\u56e0\u6211\u4eec\u5728\u201c\u7406\u89e3 expr\u201d\u6709\u63d0\u8fc7\uff0c\u56e0\u4e3a\u6bcf\u4e00\u5e27\u9700\u8981\u8c03\u7528 expr \u6b21\u6570=960\u00d7480\u00d73=1,382,400 \u3002\u4e00\u767e\u591a\u4e07\u6b21\u3002\u800c\u4e14\u662f\u7eaf CPU \u8fd0\u7b97\uff0c\u56e0\u6b64\u6548\u7387\u81ea\u7136\u5e95\u4e0b\u3002

\n

\u597d\u5728\u4e00\u822c\u7684\u8fc7\u573a\u65f6\u957f\u662f 3 \u30014 \u79d2\u5de6\u53f3\uff0c\u5f71\u54cd\u8fd8\u5728\u53ef\u63a5\u53d7\u8303\u56f4\u5185\u3002

\n

\u5982\u679c\u4f60\u5728\u5bfb\u627e\u66f4\u9ad8\u6548\u7684\u81ea\u5b9a\u4e49\u6548\u679c\uff0c\u53ef\u4ee5\u8003\u8651\u4f7f\u7528xfade_opencl\u8fc7\u6ee4\u5668\uff0c\u6216\u8005\u81ea\u884c\u7f16\u8bd1 ffmpeg \uff0c\u52a0\u5165gl-transition\u8fc7\u6ee4\u5668\u3002

\n

\u5176\u5b83\u8f6c\u573a\u8fc7\u6ee4\u5668

\n

xfade_opencl

\n

\u8981\u4f7f\u7528xfade_opencl\uff0c\u9700\u8981\u7f16\u8bd1\u7684\u65f6\u5019\u52a0\u5165--enable-opencl\uff0c\u4e14\u8fd0\u884c\u7684\u673a\u5668\u6709\u652f\u6301 opencl \u7684\u8bbe\u5907\uff08\u4e00\u822c\u6307\u663e\u5361\uff09\u3002
\n\u8981\u67e5\u770b\u5f53\u524d\u673a\u5668\u6709\u54ea\u4e9b opencl \u7684\u8bbe\u5907\uff0c\u53ef\u4ee5\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

\n
ffmpeg -v debug -init_hw_device opencl\n
\n

\u6253\u5370\u51fa\u7c7b\u4f3c\u4fe1\u606f\uff1a

\n
[AVHWDeviceContext @ 0000027894f28400] 1 OpenCL platforms found.\n[AVHWDeviceContext @ 0000027894f28400] 1 OpenCL devices found on platform \"NVIDIA CUDA\".\n[AVHWDeviceContext @ 0000027894f28400] 0.0: NVIDIA CUDA / NVIDIA GeForce RTX *****\n
\n

\u5176\u4e2d0.0\u5c31\u662f\u53ef\u7528\u7684 opencl \u8bbe\u5907\u7f16\u53f7\uff0c\u5728 ffmpeg \u547d\u4ee4\u4e2d\u6307\u5b9a\u4f7f\u7528\u8be5\u8bbe\u5907\uff1a

\n
ffmpeg -y -hide_banner -init_hw_device opencl=ocldev:0.0 -filter_hw_device ocldev ^\n-f lavfi -r 25 -t 40 -i \"pal100bars\" ^\n-f lavfi -r 25 -t 40.04 -i \"colorchart\" ^\n-filter_complex ^\n[0:v]format=yuv420p,scale=960:480,hwupload[v0];^\n[1:v]format=yuv420p,scale=960:480,hwupload[v1];^\n[v0][v1]xfade_opencl=duration=40:offset=0:transition=slideleft,hwdownload,format=yuv420p ^\n-c:v h264_nvenc -pix_fmt yuv420p -movflags +faststart -r 25 -aspect 960:480 ^\nout3.mp4\n
\n

\u6027\u80fd\u6bd4\u81ea\u5b9a\u4e49 xfade \u6548\u679c\u597d\u5f88\u591a\uff0c\u552f\u4e00\u8981\u6c42\u5c31\u662f\u9700\u8981\u652f\u6301 opencl \u7684\u8bbe\u5907\uff08\u4e00\u822c\u6307\u663e\u5361\uff09\u3002
\n\u4e14\uff0cxfade_opencl\u4e5f\u662f\u652f\u6301\u81ea\u5b9a\u4e49\u6548\u679c\u7684\uff0c\u5b98\u65b9\u6587\u6863\u3002
\n\u5185\u7f6e\u7684\u51e0\u4e2a\u6548\u679c\u7684\u6e90\u7801\u53ef\u4ee5\u67e5\u770b GitHub \u4e0a ffmpeg \u7684\u6e90\u7801:https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/opencl/xfade.cl

\n

gl-transition

\n

gl-transitions\u662f\u7531\u5f00\u53d1\u8005 Gilles Lamothe \u521b\u5efa\u7684\uff0c\u5b83\u5c01\u88c5\u4e86\u5927\u91cf\u7684 GPU \u52a0\u901f\u8fc7\u6e21\u6548\u679c\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\u6eb6\u89e3\u3001\u63a8\u62c9\u3001\u65cb\u8f6c\u7b49\u591a\u79cd\u7c7b\u578b\u3002\u8fd9\u4e9b\u8fc7\u6e21\u6548\u679c\u53ef\u4ee5\u8f7b\u677e\u5730\u6574\u5408\u5230\u4f60\u7684\u56fe\u5f62\u5e94\u7528\u7a0b\u5e8f\u4e2d\uff0c\u65e0\u8bba\u4f60\u662f\u5f00\u53d1\u6e38\u620f\u3001\u89c6\u9891\u7f16\u8f91\u8f6f\u4ef6\u8fd8\u662f\u5b9e\u9a8c\u6027\u7684\u827a\u672f\u9879\u76ee\u3002
\n\u5b83\u4f7f\u7528 OpenGL \u8fdb\u884c\u52a0\u901f\uff0c\u56e0\u6b64\uff0c\u4e5f\u9700\u8981\u652f\u6301 OpenGL \u7684\u8bbe\u5907\uff08\u4e00\u822c\u6307\u663e\u5361\uff09\u3002
\n\u5b83\u4e0d\u662f ffmpeg \u4e13\u5c5e\u7684\uff0c\u4f46\u662f\u53ef\u4ee5\u505a\u4e3a\u4e00\u4e2a\u8fc7\u6ee4\u5668\u6dfb\u52a0\u5230 ffmpeg \u4e2d\u3002\u53c2\u8003\u8fd9\u4e2a GitHub \u9879\u76eetransitive-bullshit/ffmpeg-gl-transition\u3002\n\u7f16\u8bd1\u540e\uff0c\u4f60\u5c06\u53ef\u4ee5\u4f7f\u7528\u5176\u5b98\u7f51\u4e0a\u7684\u6240\u6709\u6548\u679c\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u81ea\u5df1\u7f16\u5199\u81ea\u5b9a\u4e49\u7684\u6548\u679c\u3002

\n

\u6027\u80fd\u65b9\u9762\uff0c\u56e0\u4e3a\u6211\u6ca1\u6709\u81ea\u884c\u7f16\u8bd1\u6d4b\u8bd5\uff0c\u6240\u4ee5\u65e0\u6cd5\u7ed9\u51fa\u5177\u4f53\u6570\u636e\u3002

\n

\u5b83\u4f7f\u7528 GLSL \u8bed\u8a00\u7f16\u5199\uff0c\u5982\u679c\u4f60\u770b\u4e86\u4e0a\u9762 OpenCL \u7684\u90e8\u5206\uff0c\u4f60\u4f1a\u53d1\u73b0\u5b83\u4eec\u6709\u5f88\u591a\u5171\u540c\u70b9\u3002
\n\u751a\u81f3\uff0c\u6211\u5728\u7f16\u5199xfade\u81ea\u5b9a\u4e49\u8868\u8fbe\u5f0f\u7684\u65f6\u5019\uff0c\u4e5f\u53c2\u8003\u4e86\u5b83\u7684 GLSL \u4ee3\u7801\u3002\u6bd4\u5982\u6548\u679c\u9884\u89c8\u4e2d\u7684\u6c34\u6ef4\uff0c\u5c31\u662f\u53c2\u8003\u4e86WaterDrop\u3002

\n

\u7ed3\u8bed

\n

\u4e0d\u77e5\u9053\u662f ffmpeg \u5b98\u65b9\u89c9\u5f97 xfade \u7684 expr \u7f16\u5199\u592a\u8fc7\u5bb9\u6613\uff0c\u8fd8\u662f\u89c9\u5f97\u6027\u80fd\u4e0d\u884c\u4e0d\u5efa\u8bae\u4f7f\u7528\uff0c\u53cd\u6b63\u5b98\u65b9\u6587\u6863\u53ca wiki \u90fd\u6ca1\u6709\u793a\u4f8b\uff0c\u4e5f\u6ca1\u6709\u63d0\u53ca\u5982\u4f55\u7f16\u5199\u3002
\n\u6211\u81ea\u5df1\u57fa\u672c\u4e0a\u662f\u81ea\u5df1\u770b\u7740\u6587\u6863\u731c\u6d4b\u3001\u5c1d\u8bd5\uff0c\u6162\u6162\u7684\u6478\u7d22\u51fa\u6765\u4e00\u4e9b\u95e8\u9053\u3002\u60f3\u7740\u7f51\u4e0a\u6ca1\u6709\u4e00\u4e2a\u7c7b\u4f3c\u7684\u6559\u7a0b\uff0c\u4e8e\u662f\u53d8\u5199\u4e86\u8fd9\u4e2a\u6587\u7ae0\u3002
\n\u5982\u679c\u4f60\u53d1\u73b0\u6587\u7ae0\u54ea\u91cc\u6709\u95ee\u9898\uff0c\u6b22\u8fce\u6307\u51fa\uff0c\u5927\u5bb6\u5171\u540c\u8fdb\u6b65\u3002

\n

\u672c\u6587\u5b58\u6863\uff1ahttps://github.com/jifengg/ffmpeg-script/blob/main/docs/ffmpeg.xfade.md

\n" }, { "author": { "url": "member/ruoqin", "name": "ruoqin", "avatar": "https://cdn.v2ex.com/gravatar/81e5fb52e2db4cf79e057c86a4ccd378?s=73&d=retro" }, "url": "t/1047493", "title": "\u5173\u4e8e\u6211\u5728 fcp \u5bfc\u5165\u89c6\u9891\u65f6\u51fa\u73b0\u7684\u65e0\u6cd5\u89e3\u51b3\u7684\u95ee\u9898\uff0c\u8bf7\u6c42\u5404\u4f4d ffmpeg \u5927\u4f6c\u7684\u5e2e\u5fd9", "id": "t/1047493", "date_published": "2024-06-06T13:30:59+00:00", "content_html": "

\uff08\u867d\u7136\u8bf4\u662f fcp \u7684\u95ee\u9898\uff0c\u4f46\u5f52\u6839\u5230\u5e95\u8fd8\u662f\u89c6\u9891\u7f16\u7801\u7684\u95ee\u9898\uff0c\u719f\u6089 ffmpeg \u7684\u670b\u53cb\u505a\u719f\u6089\u4e0d\u8fc7\u89c6\u9891\u7f16\u7801\u4e86\uff09

\n

\u672c\u4eba\u5728\u7528\u7cfb\u7edf macos sonama 14.5 fcp \u7248\u672c\u4e3a 10.6.5\n\u5df2\u77e5 fcp \u652f\u6301\u5bfc\u5165 hevc \u89c6\u9891\uff0c\u56fe\u8bc1 https://imgse.com/i/pkY4h9S\n\u4f7f\u7528\u4e86\u4e24\u4e2a\u76f8\u540c\u5185\u5bb9\u7684\u7d20\u6750\uff0c\u5206\u522b\u4e3a\u4e24\u4f4d\u538b\u5236\u8005\u8fdb\u884c\u7684\u538b\u5236\uff0c\u5176\u4e2d\u4e0a\u56fe\u53ef\u4ee5\u6b63\u5e38\u5bfc\u5165 fcp \uff0c\u4e0b\u56fe\u5e76\u4e0d\u53ef\u4ee5\nhttps://imgse.com/i/pkY47Bn\nhttps://imgse.com/i/pkY45cQ\n\u672c\u4eba\u7422\u78e8\u4e86\u534a\u5929\u4e5f\u4e0d\u660e\u767d\uff0c\u611f\u89c9\u5e94\u8be5\u548c hevc \u95ee\u9898\u4e0d\u5927\uff0c\u53ef\u80fd\u662f\u5176\u4ed6\u9879\u7684\u95ee\u9898\n\u6211\u53c8\u62ff\u4e86\u4e00\u4e2a\u5b8c\u5168\u4e0d\u4e00\u6837\u7684\u89c6\u9891\u8fdb\u884c\u4e86\u8bc1\u660e\uff0c\u8be5\u89c6\u9891\u53ef\u6b63\u5e38\u5bfc\u5165 fcp \uff0cmediainfo \u5982\u56fe https://imgse.com/i/pkY5pu9

\n

\u5982\u679c\u60a8\u6709\u5934\u7eea\uff0c\u9ebb\u70e6\u8bf7\u544a\u8bc9\u6211\uff0c\u6211\u611f\u6fc0\u4e0d\u8c22\uff01

\n" }, { "author": { "url": "member/dzdh", "name": "dzdh", "avatar": "https://cdn.v2ex.com/avatar/1683/7ebf/226307_large.png?m=1757987240" }, "url": "t/1044186", "date_modified": "2024-05-27T01:47:51+00:00", "content_html": "

\u4f2a\u4ee3\u7801\u5982\u4e0b\uff1a

\n
func main() {\n url := \"http://a.mp4\"\n args := strings.Split(\"ffmpeg -y -i pipe:0 -f mpegts pipe:1\", \" \")\n\n ctx, cancel := context.WithCancel(context.Background())\n cmd := exec.CommandContext(ctx, args[0], args[1:]...)\n \n pipe0, _ := cmd.StdinPipe()\n pipe1, _ := cmd.StdoutPipe()\n \n cmd.Start()\n go func () {\n cmd.Wait()\n } \n go func () {\n file := os.Openfile....\n io.Copy(file, pipe1)\n }\n \n io.Copy(pipe0, http.resp.body)\n}\n
\n

\u95ee\u9898\u662f\uff0cwrite \u5b8c\u6210\u4e86\uff0c\u4f46\u662f\u6211\u4e0d\u786e\u5b9a\u8f6c\u7801\u5b8c\u6210\u4e86\u6ca1\u3002\u53bb\u76d1\u542c stderr \u5417\uff1f\u770b stderr \u7684\u5df2\u5b8c\u6210\u8f6c\u7801\u65f6\u957f\u662f\u4e0d\u662f\u7b49\u4e8e\u9884\u671f\uff1f

\n", "date_published": "2024-05-27T01:46:18+00:00", "title": "go + ffmpeg pipe \u600e\u4e48\u786e\u5b9a\u5f53\u524d\u8f6c\u7801\u64cd\u4f5c\u5df2\u7ecf\u7ed3\u675f\uff0c\u53ef\u4ee5\u505c\u4e86", "id": "t/1044186" }, { "author": { "url": "member/cnleoyang", "name": "cnleoyang", "avatar": "https://cdn.v2ex.com/gravatar/ccb2057e7998a47dcc6d7deba85e54c6?s=73&d=retro" }, "url": "t/1042677", "title": "\u7ed9\u4eba\u58f0\u89c6\u9891\u52a0\u5165\u80cc\u666f\u58f0\u97f3\uff0c\u5982\u4f55\u505a\u5230\u81ea\u52a8\u8c03\u6574\u80cc\u666f\u7684\u97f3\u91cf", "id": "t/1042677", "date_published": "2024-05-21T08:21:33+00:00", "content_html": "\u5c31\u662f\u5408\u5e76\u4e24\u4e2a\u97f3\u8f68\uff0c\u671f\u5f85\u7684\u6548\u679c\u662f\uff0c\u5f53\u4eba\u58f0\u4e0d\u8bf4\u8bdd\uff08\u97f3\u91cf\u5c0f\uff09\u7684\u65f6\u5019\uff0c\u5c31\u81ea\u52a8\u63d0\u9ad8\u80cc\u666f\u58f0\u97f3\u7684\u97f3\u91cf\u3002

\u76ee\u524d\u5c1d\u8bd5\u4e86 filter_complex amerge \uff0c\u4f46\u6ca1\u6709\u5b9e\u73b0\u671f\u5f85\u7684\u6548\u679c\u3002\u8bf7\u6559\u5927\u5bb6\u8fd9\u6837\u7684 ffmpeg \u547d\u4ee4\u53ef\u4ee5\u600e\u6837\u5199\uff0c\u8c22\u8c22\u3002" }, { "author": { "url": "member/rqxiao", "name": "rqxiao", "avatar": "https://cdn.v2ex.com/avatar/e36d/2122/422752_large.png?m=1675996273" }, "url": "t/1032560", "date_modified": "2024-04-15T03:20:30+00:00", "content_html": "

\u4f7f\u7528 ffmpeg \u7528 aes \u52a0\u5bc6 m3u8 \u6587\u4ef6\u6d41\u7a0b

\n

1.\u51c6\u5907\u52a0\u5bc6\u5bc6\u94a5

\n

openssl rand 16 > enc.key

\n

2.\u751f\u6210 IV

\n

3 \u521b\u5efa enc.info \u6587\u4ef6

\n

\u7136\u540e\u5229\u7528 ffmpeg \u8fdb\u884c\u52a0\u5bc6\nffmpeg -y
\n-i test.mp4
\n-hls_time 9
\n-hls_key_info_file enc.info
\n-hls_playlist_type vod
\n-hls_segment_filename \"index%d.ts\"
\nplaylist.m3u8

\n

\u7ed3\u679c\u662f\u64ad\u653e\u5668\u4e0d\u80fd\u76f4\u63a5\u6253 ts \u6587\u4ef6\u5f00\u64ad\u653e\u3002\u8fbe\u5230\u4e86\u5bf9 ts \u6587\u4ef6\u52a0\u5bc6\u7684\u6548\u679c\uff1f

\n

\u4f46\u662f\u5047\u8bbe\u524d\u7aef\u53bb\u5b9e\u73b0\u64ad\u653e\u89c6\u9891\u7684\u529f\u80fd\u65f6\uff0c\u4e0d\u8fd8\u662f\u8981\u5411\u540e\u7aef\u83b7\u53d6 m3u8 \u6587\u4ef6\u5417\uff0c\u56e0\u4e3a m3u8 \u6587\u4ef6\u91cc\u6709\u7740\u79d8\u94a5 \u3002\u53ea\u8981\u83b7\u53d6\u5230 m3u8 \u6587\u4ef6\u5c31\u80fd\u64ad\u653e\u4e86\u3002\u4e5f\u5c31\u662f\u8bf4\u53ea\u8981\u80fd\u591f\u83b7\u53d6\u5230 m3u8 \u6587\u4ef6\u5c31\u80fd\u64ad\u653e\u52a0\u5bc6\u7684 ts \u6587\u4ef6\uff0c\u90a3\u5982\u679c\u901a\u8fc7\u6293\u5305\u5de5\u5177\u83b7\u53d6\u5230 m3u8 \u5730\u5740\uff0c\u90a3 ts \u52a0\u5bc6\u4e0d\u662f\u6ca1\u7528\u4e86\u5417

\n", "date_published": "2024-04-15T03:20:18+00:00", "title": "\u4f7f\u7528 ffmpeg \u7528 aes \u52a0\u5bc6 m3u8 \u6587\u4ef6\u7684\u7591\u60d1", "id": "t/1032560" }, { "author": { "url": "member/DTCPSS", "name": "DTCPSS", "avatar": "https://cdn.v2ex.com/avatar/569a/ca58/199749_large.png?m=1721396793" }, "url": "t/1030949", "date_modified": "2024-04-09T05:46:49+00:00", "content_html": "https://bellard.org/tsac/
FFmpeg \u4e4b\u7236 Fabrice Bellard \u53d1\u5e03\u97f3\u9891\u538b\u7f29\u5de5\u5177 TSAC \u3002
\u5bf9\u4e8e 44.1 kHz \u7684\u97f3\u9891\uff0c\u53ef\u538b\u7f29\u81f3 5.5 kb/s \uff08\u5355\u58f0\u9053\uff09\u6216 7.5 kb/s \uff08\u7acb\u4f53\u58f0\uff09\u3002
\u53ef\u5c06\u4e00\u9996 3.5 \u5206\u949f\u7684\u7acb\u4f53\u58f0\u4e50\u66f2\u538b\u7f29\u81f3 192 KiB \u3002

\u8ba8\u8bba\uff1a
https://hydrogenaud.io/index.php/topic,125765", "date_published": "2024-04-09T05:37:16+00:00", "title": "\u628a\u6b4c\u66f2\u538b\u7f29\u81f3 7 kbps\uff0c FFmpeg \u4e4b\u7236\u53d1\u5e03\u97f3\u9891\u538b\u7f29\u5de5\u5177 TSAC", "id": "t/1030949" }, { "author": { "url": "member/qingf", "name": "qingf", "avatar": "https://cdn.v2ex.com/gravatar/a9a2668d5d8dfffd29b296d7a2b595a3?s=73&d=retro" }, "url": "t/991416", "title": "\u6c42\u52a9\u4f7f\u7528 ffmpeg \u538b\u7f29.mov \u89c6\u9891\u8f93\u51fa\u540e\u4e22\u5931\u5143\u6570\u636e\u95ee\u9898\u5982\u4f55\u89e3\u51b3", "id": "t/991416", "date_published": "2023-11-13T03:52:42+00:00", "content_html": "

\u7531\u4e8e iPhone \u4e4b\u524d\u62cd\u6444\u7684 4k60fps \u89c6\u9891\u4f53\u79ef\u6bd4\u8f83\u5927\uff0c\u5e0c\u671b\u7528\u7535\u8111\u538b\u7f29\u540e\u653e\u5728 icloud \u65b9\u4fbf\u4ee5\u540e\u968f\u65f6\u89c2\u770b\uff0c\u5e0c\u671b\u4ec5\u662f\u538b\u7f29\u89c6\u9891\u4f53\u79ef\uff0c\u4fdd\u7559\u4e4b\u524d\u7684\u62cd\u6444\u65f6\u95f4\u3001\u7ecf\u7eac\u5ea6\u3001\u624b\u673a\u578b\u53f7\u7b49\u5143\u6570\u636e\u3002

\n

\u5728\u7f51\u4e0a\u641c\u7d22\u4e00\u756a\u540e\uff0c\u6574\u4e86\u4e2a ffmpeg \u5de5\u5177\u547d\u4ee4\uff0c\u63a2\u7d22\u4e0b\u6765\uff0c\u538b\u7f29\u7684\u529f\u80fd\u6ca1\u6709\u95ee\u9898\u633a ok \u7684\uff0c\u4f46\u662f\u5728\u4fdd\u7559\u5143\u6570\u636e\u7684\u5730\u65b9\u603b\u662f\u5361\u58f3\uff0c\u8f93\u51fa\u7684\u89c6\u9891\u5e26\u4e0d\u4e0a\u539f\u6765\u7684\u7ecf\u7eac\u5ea6\u7b49\u4fe1\u606f\u3002

\n

\u73af\u5883\u662f mac \uff0c\u547d\u4ee4\u5982\u4e0b\uff0c\u5df2\u7ecf\u6dfb\u52a0\u4e86\u7f51\u4e0a\u8bf4\u7684 map_metadata \u548c movflags \u4e24\u4e2a\u53c2\u6570\uff0c\u4f46\u662f\u8f93\u51fa\u7684\u6587\u4ef6\u4e2d\u8fd8\u662f\u6ca1\u6709\u5143\u6570\u636e

\n
ffmpeg -i input.mov -c:v copy -c:a copy -map_metadata 0 -movflags use_metadata_tags output.mp4\n
\n

\u5c1d\u8bd5\u4f7f\u7528\u4e86 hevc \u548c h264 \u597d\u50cf\u4e5f\u90fd\u4e0d\u884c\uff0c\u6709\u8001\u54e5\u53ef\u4ee5\u5e2e\u5fd9\u6307\u5bfc\u4e00\u4e0b\u7684\uff0c\u611f\u6fc0\u4e0d\u5c3d

\n" }, { "author": { "url": "member/1dian01", "name": "1dian01", "avatar": "https://cdn.v2ex.com/avatar/7eda/adde/38416_large.png?m=1448944646" }, "url": "t/984847", "date_modified": "2023-10-24T03:47:37+00:00", "content_html": "", "date_published": "2023-10-24T03:35:27+00:00", "title": "homebrew \u5b89\u88c5\u7684 fmpeg \u8f6c\u7801\u901f\u5ea6\u6bd4\u8f83\u6162\uff1f\u76f4\u63a5\u7f16\u8bd1\u53ef\u4ee5\u63d0\u9ad8\u901f\u5ea6\u5417\uff1f", "id": "t/984847" }, { "author": { "url": "member/nathanleeinph", "name": "nathanleeinph", "avatar": "https://cdn.v2ex.com/gravatar/237d6fca11c6431ec425b8cecdad48b5?s=73&d=retro" }, "url": "t/974227", "title": "\u4f7f\u7528 nodejs \u8c03\u7528\u548c\u5728 macos \u7ec8\u7aef\u91cc\u76f4\u63a5\u8c03\u7528 ffmpeg \u8f6c m3u8\uff0c\u4e24\u8005\u82b1\u8d39\u65f6\u95f4\u76f8\u5dee\u5de8\u5927", "id": "t/974227", "date_published": "2023-09-15T11:15:00+00:00", "content_html": "

\u5bf9\u4e8e\u540c\u4e00\u4e2a m3u8 \u53ca\u5176 ts \u8d44\u6e90\uff0c\u4f53\u79ef\u4e3a 2.8g \u5de6\u53f3\uff0c\u6587\u4ef6\u6570 2760 \u4e2a

\n

\u4f7f\u7528 macOS \u81ea\u5e26\u7ec8\u7aef\u8fd0\u884c\uff1affmpeg -i ./index.m3u8 -c copy test.mp4\n\u548c\u5728 nodejs \u91cc\u4f7f\u7528\u201cfluent-ffmpeg\u201d\u8fd9\u4e2a\u5e93(\u4f9d\u7136\u662f\u4f7f\u7528\u2018/opt/homebrew/Cellar/ffmpeg/6.0/bin/ffmpeg\u2019)\u5904\u7406

\n

\u7ec8\u7aef\u5904\u7406\u4ec5\u4ec5\u9700\u8981 30 \u79d2\u4e0d\u5230

\n

\u800c nodejs \u8fd0\u884c\u5219\u9700\u8981 21 \u5206\u949f

\n

\u6211\u662f nodejs \u5c0f\u767d\uff0c\u6267\u884c\u547d\u4ee4\u7684\u65b9\u5f0f\u662f\u5728 vscode \u8fd9\u4e2a\u7f16\u8f91\u5668\u91cc\u7684\u7ec8\u7aef\u6267\u884c node ./foo.js

\n

\u6709\u4eba\u4e86\u89e3\u8fd9\u4e2a\u5de8\u5927\u5dee\u5f02\u4ea7\u751f\u7684\u539f\u56e0\u5417\uff1f

\n

\u6211\u63a8\u6d4b\u662f\u4e0d\u662f vscode \u6216\u8005 nodejs \u53ea\u4f7f\u7528\u4e86\u5355\u7ebf\u7a0b\u7684\u5173\u7cfb\uff1f\uff1f

\n" }, { "author": { "url": "member/JasonQin", "name": "JasonQin", "avatar": "https://cdn.v2ex.com/avatar/647b/2160/95351_large.png?m=1423027743" }, "url": "t/954076", "title": "FFmpeg \u5982\u4f55\u5f55\u5c4f\u65f6\u6392\u9664\u5f55\u5236\u6307\u5b9a\u7684\u67d0\u4e2a\u7a97\u53e3", "id": "t/954076", "date_published": "2023-07-04T10:08:29+00:00", "content_html": "

\u5c31\u50cf\u67d0\u4e9b\u5c4f\u5e55\u5171\u4eab\u8f6f\u4ef6\u4e00\u6837\uff0c\u5f55\u5236\u6574\u4e2a\u5c4f\u5e55\u7684\u540c\u65f6\u6700\u4e0a\u5c42\u8fd8\u6709\u64cd\u4f5c\u5f55\u5c4f\u5173\u95ed\u4e4b\u7c7b\u7684 UI \uff0c\u8fd9\u4e2a\u662f\u4e0d\u4f1a\u88ab\u5f55\u5236\u8fdb\u53bb\u7684\uff0c\u5982\u4f55\u5b9e\u73b0\u8fd9\u79cd\u529f\u80fd\uff0c\u6211\u67e5\u4e86 FFmpeg \u7684 gdigrab \u53ea\u80fd\u9009 desktop \u6216\u8005 title \u6307\u5b9a\u5f55\u5236\u67d0\u4e00\u4e2a\u7a97\u53e3\uff0c\u6ca1\u6709\u6392\u9664\u529f\u80fd\uff0c\u8bf7\u6559\u4e00\u4e0b\u8fd9\u79cd\u662f\u5982\u4f55\u5b9e\u73b0\u7684\u3002

\n" }, { "author": { "url": "member/datadump", "name": "datadump", "avatar": "https://cdn.v2ex.com/avatar/373a/9420/284506_large.png?m=1724288412" }, "url": "t/950202", "title": "ffmpeg \u6700\u8fd1\u5927\u7248\u672c\u53d1\u5e03\u4e3a\u5565\u8fd9\u4e48\u5feb", "id": "t/950202", "date_published": "2023-06-20T01:48:21+00:00", "content_html": "5.x \u548c 6.x \u597d\u50cf\u90fd\u662f\u8fd9\u4e00\u4e24\u5e74\u51fa\u6765\u7684\u5427\u3002\u542c\u8bf4\u5e74\u5e95 7.x \u6b63\u5f0f\u7248\u3002

\u662f\u63a5\u53e3\u8fd8\u662f\u67b6\u6784\u53d1\u751f\u91cd\u5927\u6539\u53d8\uff1f

\u6709\u6728\u6709\u61c2\u7684\u5144\u5f1f\u8bf4\u4e0b\u3002\u8c22\u8c22\u4e86" }, { "author": { "url": "member/1054850490", "name": "1054850490", "avatar": "https://cdn.v2ex.com/avatar/0568/22f0/554537_large.png?m=1670165418" }, "url": "t/947857", "title": "ffmpeg \u5982\u4f55\u52a0\u5feb\u89e3\u7801\u901f\u5ea6\uff1f\u7b97\u529b\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u4e0d\u5728\u4e4e\u89e3\u7801\u8d28\u91cf", "id": "t/947857", "date_published": "2023-06-12T00:41:03+00:00", "content_html": "`ffmpeg -stats -hwaccel none -i \"1.mp4\" -map v -fps_mode cfr -stats_period 0.04 -f null -
`
\u5982\u4e0a\u8ff0\u4ee3\u7801\u6240\u793a\uff0c\u5982\u4f55\u5728\u540c\u7b49\u7b97\u529b\u6761\u4ef6\u4e0b\uff0c\u52a0\u5feb\u201c\u89e3\u7801\u201d\u901f\u5ea6\uff0c\u6ce8\u610f\uff0c\u8fd9\u91cc\u4e0d\u662f\u7f16\u7801\uff0c\u662f\u89e3\u7801\uff0c\u800c\u4e14\u636e\u6211\u6d4b\u8bd5\uff0c12490F \u5bf9\u6bd4 3080 \u7684\u89e3\u7801\u5668\u4e5f\u5feb\u4e0d\u8fc7 CPU \uff0c\u8fd9\u662f\u56e0\u4e3a\u89c6\u9891\u6587\u4ef6\u9700\u8981\u5728\u663e\u5b58\u548c\u5185\u5b58\u4e4b\u95f4\u9891\u7e41\u4ea4\u6362\uff0c\u53cd\u800c\u5bfc\u81f4\u89e3\u7801\u53d8\u6162\u4e86\u3002\u867d\u7136\u5728 av01 \u4ee5\u53ca 8K \u7684\u60c5\u51b5\u4e0b\u6bd4\u4e0d\u8fc7\u663e\u5361\u7684\u89e3\u7801\uff0c\u4f46\u662f 6 \u6838\u7684 12490f \u5df2\u7ecf\u662f\u6bd4 3080 \u7684\u89e3\u7801\u5668\u5feb\u4e86\uff0c\uff08\u867d\u7136 3080 \u652f\u6301\u53cc\u8def\uff0c\u5355\u8def\u6027\u80fd\u9650\u5236\u4e00\u534a\uff0c\u6682\u4e14\u6309\u4e0b\u4e0d\u8868\uff09\uff0c\u6240\u4ee5\u8ba9\u6211\u6362\u663e\u5361\u89e3\u7801\u52a0\u5feb\u8fd9\u4e2a\u63d0\u8bae\u5df2\u7ecf pass \u4e86

\u6211\u4e3a\u4ec0\u4e48\u8981\u8fd9\u6837\u505a\u662f\u56e0\u4e3a\uff0c\u6211\u9700\u8981\u4e00\u5e27\u4e00\u5e27\u62c6\u5f00\u770b\u770b\u89c6\u9891\u6709\u6ca1\u6709\u635f\u574f\uff0c\u56e0\u4e3a\u6211\u7528\u4e0b\u8f7d\u5668\u4e0b\u8f7d\u7684\u89c6\u9891\u5408\u6210\u7684\u65f6\u5019\u603b\u662f\u51fa\u73b0\u7834\u635f\u7684\u89c6\u9891\u6587\u4ef6\uff0c\u800c\u7528\u91cd\u5c01\u88c5\u67e5\u635f\u5e76\u4e0d\u9002\u7528\u4e8e\u5927\u591a\u573a\u666f\uff0c\u6240\u4ee5\u8fd8\u662f\u56de\u5230\u6700\u7a33\u7684\u4e00\u5e27\u4e00\u5e27\u7684\u62c6\u5305\u770b\uff0c\u53ef\u662f\u8fd9\u4e2a\u65b9\u6848\u8fd8\u662f\u592a\u6162\u4e86\uff0c\u5982\u679c\u5347\u7ea7\u673a\u5668\u4e5f\u4e0d\u592a\u73b0\u5b9e\uff0c\u53ea\u80fd\u662f\u5bfb\u6c42\u6b6a\u8def\u5b50\uff0c\u6211\u770b\u5230\u67d0\u4e9b\u89e3\u7801\u5668\u53ef\u4ee5\u901a\u8fc7\u964d\u4f4e\u89e3\u7801\u8d28\u91cf\u4ece\u800c\u8ba9\u4f4e\u914d\u673a\u5668\u4e5f\u53ef\u4ee5\u6d41\u7545\u64ad\u653e\u9ad8\u8d28\u91cf\u89c6\u9891\u7684\u65f6\u5019\u5c31\u5728\u60f3\uff0c\u6211\u662f\u5426\u4e5f\u53ef\u4ee5\u6309\u7167\u8fd9\u4e2a\u65b9\u6cd5\u6765\uff1f\u6211\u95ee\u8fc7 GPT \uff0c\u4f46\u662f GPT \u7ed9\u51fa\u7684\u7b54\u6848\u662f\u8ba9\u6211\u964d\u4f4e\u5206\u8fa8\u7387\uff0c\u4e5f\u5c31\u662f-s 1280p-720p \u9009\u9879\uff0c\u4f46\u662f\u8fd9\u6837\u5176\u5b9e\u66f4\u6162\u4e86\uff0c\u6211\u89c9\u5f97\u66f4\u50cf\u662f\u91cd\u7f16\u7801\u4e86\u4e00\u6837\uff0c\u867d\u7136\u964d\u4f4e\u4e86\u5206\u8fa8\u7387\uff0c\u53ef\u662f\u4e2d\u95f4\u4e00\u5b9a\u662f\u6709\u4e00\u4e2a\u518d\u8f6c\u7801\u7684\u8fc7\u7a0b\u5bfc\u81f4\u5403\u7684\u635f\u8017\u66f4\u591a\u4e86" }, { "author": { "url": "member/icoming", "name": "icoming", "avatar": "https://cdn.v2ex.com/avatar/d704/0cbe/599328_large.png?m=1703120176" }, "url": "t/933845", "date_modified": "2023-04-19T13:32:26+00:00", "content_html": "

\u7528\u6765\u9650\u5b9a\u6587\u4ef6\u5206\u6bb5\u5927\u5c0f\u7684\u8fd9\u4e2a\u9009\u9879

\n

ChatGPT \u8bf4\u4ece 4.1 \u7248\u672c\uff08 2018 \u5e74 11 \u6708\u53d1\u5e03\u7684\uff09\u5f00\u59cb\u6709\u8fd9\u9009\u9879\uff0c\u4f46\u662f\u6211\u5728\u5b98\u7f51\u4e0b\u8f7d\u7684\u7f16\u8bd1\u597d\u7684\u6ca1\u6709\u8fd9\u4e2a\u9009\u9879\u554a

\n

\u7136\u540e\u6211\u5c31\u60f3\u81ea\u5df1\u7f16\u8bd1\uff0cGit clone \u6e90\u7801\u540e\uff0c\u6309\u7167 ChatGPT \u8bf4\u7684\u914d\u7f6e\u6dfb\u52a0 segment \u652f\u6301\u540e\u7f16\u8bd1\u5b89\u88c5\uff0c\u7ed3\u679c\u8fd8\u662f\u6ca1\u6709\u8fd9\u4e2a\u9009\u9879

\n
./configure --enable-gpl --enable-libx264 --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libaom --enable-version3 --enable-libfdk-aac --enable-nonfree --enable-muxer=segment\n
\n

\u5230\u5e95 FFmpeg \u6709\u6ca1\u6709\u8fd9\u4e2a\u9009\u9879\uff1f\uff1f\uff1f

\n", "date_published": "2023-04-19T13:32:14+00:00", "title": "FFmpeg \u600e\u4e48\u652f\u6301 segment_size \u9009\u9879\uff1f", "id": "t/933845" }, { "author": { "url": "member/LLaMA", "name": "LLaMA", "avatar": "https://cdn.v2ex.com/gravatar/3c9cf5afd0285df55eaa81b8f43c1664?s=73&d=retro" }, "url": "t/927148", "date_modified": "2023-03-26T00:50:21+00:00", "content_html": "", "date_published": "2023-03-25T10:49:12+00:00", "title": "\u4e3a\u4ec0\u4e48 ffmpeg \u7684\u4f53\u79ef\u4f1a\u8fd9\u4e48\u5927\uff1f\u591a\u590d\u6742\u7684\u7b97\u6cd5\u7f16\u8bd1\u540e\u4e5f\u4e0d\u4f1a\u6709\u51e0\u5341 MB \u5427\uff1f", "id": "t/927148" }, { "author": { "url": "member/loken2020", "name": "loken2020", "avatar": "https://cdn.v2ex.com/avatar/d60d/d008/583892_large.png?m=1699249781" }, "url": "t/924379", "date_modified": "2023-03-15T20:30:39+00:00", "content_html": "\u300a FFmpeg \u4f7f\u7528 debug_ts \u6253\u5370\u5168\u8fc7\u7a0b\u7684 pts \u300b
\u7b80\u4ecb\uff1a\u97f3\u89c6\u9891\u5f00\u53d1\u7684\u4e00\u4e2a\u70e6\u607c\u7684\u70b9\uff0c\u662f\u65f6\u95f4\u603b\u662f\u4e0d\u5bf9\u3002\u8fd9\u65f6\u5019\u4f60\u53ef\u4ee5\u6253\u5f00\u00a0debug_ts\u00a0\u9009\u9879\uff0c\u67e5\u770b\u00a0demuxer \uff0c \u89e3\u7801\uff0c\u7f16\u7801\uff0cmuxer\u00a0\u8fc7\u7a0b\u4e2d\u7684 pts \u7684\u4fe1\u606f
https://ffmpeg.xianwaizhiyin.net/ffmpeg/debug_ts.html", "date_published": "2023-03-15T18:44:46+00:00", "title": "FFmpeg \u4f7f\u7528 debug_ts \u6253\u5370\u5168\u8fc7\u7a0b\u7684 pts", "id": "t/924379" }, { "author": { "url": "member/1054850490", "name": "1054850490", "avatar": "https://cdn.v2ex.com/avatar/0568/22f0/554537_large.png?m=1670165418" }, "url": "t/919129", "date_modified": "2023-02-25T07:37:10+00:00", "content_html": "\u6211\u76ee\u524d\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u67e5\u7f3a\u5e27
```
ffmpeg -v 16 -stats -hwaccel cuda -i 1.mkv -map v -fps_mode cfr -stats_period \"0.05\" -f null -
```
\u6211\u6765\u8bb2\u4e00\u4e0b\u539f\u7406\uff0c\u5176\u4ed6\u4e0d\u91cd\u8981\uff0c\u4e3b\u8981\u662f`-fps_mode cfr`\uff0c\u8fd9\u4e2a\u547d\u4ee4\u53ef\u4ee5\u5728\u9047\u5230\u65f6\u95f4\u6233\u5bf9\u4e0d\u4e0a\u7684\u60c5\u51b5\u4e0b\u8865\u5e27\uff0c\u867d\u7136\u662f\u8865\u5e27\uff0c\u4f46\u662f\u8fd9\u4e2a\u8865\u5e76\u4e0d\u662f\u6211\u4eec\u60f3\u8c61\u4e2d\u7684\u90a3\u4e2a\u8865\u8fd0\u52a8\u5e27\uff0c\u800c\u662f\u5c06\u5f53\u524d\u7684\u5e27\u5f53\u505a\u4e0b\u4e00\u5e27\u7ee7\u7eed\u64ad\u653e\u3002

\u6211\u4eec\u5148\u6765\u770b\u770b\u5b98\u65b9\u6587\u6863\u7684\u63cf\u8ff0


\u6211\u6765\u4e3e\u4f8b\uff0c\u5f53\u4e00\u90e8\u89c6\u9891\u5e27\u6570\u4e3a 30 \u5e27\u7684\u65f6\u5019\uff0c\u5f53\u4f60\u8bbe\u5b9a\u4e86 60 \u5e27\u8f93\u51fa\u7684\u65f6\u5019\uff0c\u662f\u4e0d\u662f\u6bcf\u4e00\u79d2\u90fd\u7f3a\u4e86\u4e00\u534a\uff1f\u8fd9\u65f6\u5019\u8fd9\u4e2a\u547d\u4ee4\u5c31\u4f1a\u81ea\u52a8\u7684\u628a\u4e0d\u591f\u7684\u5e27\u81ea\u52a8\u8865\u4e0a\uff0c\u4f46\u662f\u8fd9\u8865\u5e27\uff0c\u66f4\u50cf\u662f\u9694\u884c\u626b\u63cf\u7684\u89c6\u9891\u8f6c\u5230\u9010\u884c\u626b\u63cf\u4e0a\u64ad\u653e\u4f7f\u7528\u7684\"\u53bb\u9694\u884c\u5904\u7406\"\u3002

\u53e6\u4e00\u79cd\u6848\u4f8b\u5c31\u662f\u6211\u7684\u6848\u4f8b\u4e86\uff0c\u5927\u5bb6\u7ecf\u5e38\u4e0b\u8f7d\u6587\u4ef6\u7684\u65f6\u5019\u90fd\u9047\u5230\u8fc7\u4e0d\u5b8c\u6574\u7684\u60c5\u51b5\u5427\uff1f\u6bd4\u5982\u81ed\u540d\u662d\u8457\u7684\"\u767e\u5ea6\u4e91\u76d8\"\uff0c\u4e0b\u8f7d\u6ca1\u5e26\u6821\u68c0\uff0c\u5982\u679c\u662f\u89c6\u9891\u8fd8\u597d\uff0c\u56e0\u4e3a\u89c6\u9891\u7f3a\u4e86\u4e2d\u95f4\u90e8\u5206\u5e76\u4e0d\u5f71\u54cd\u64ad\u653e\uff0c\u5982\u679c\u662f\u6587\u4ef6\u76f4\u63a5\u5c31\u5ba3\u544a\u6574\u4e2a\u6587\u4ef6\u7684\u6b7b\u5211\u4e86\uff0c\u538b\u7f29\u5305\u66f4\u4e0d\u7528\u8bf4\u4e86\uff0c\u6240\u4ee5\u6211\u7684\u95ee\u9898\u5c31\u662f\u4e0b\u8f7d\u89c6\u9891\u7684\u8fc7\u7a0b\u4e2d\uff0c\u7531\u4e8e\u7f51\u7edc\u6ce2\u52a8\u7684\u5f71\u54cd\u7ecf\u5e38\u5bfc\u81f4\u6587\u4ef6\u4e0d\u5b8c\u6574\uff0c\u800c\u6211\u5c31\u662f\u60f3\u8981\u627e\u51fa\u5230\u5e95\u54ea\u4e2a\u89c6\u9891\u6587\u4ef6\u4e0d\u5b8c\u6574\u3002
\u89c6\u9891\u7684\u5143\u6570\u636e\u91cc\uff0c\u5f00\u5934\u5c31\u63cf\u8ff0\u4e86\u8be5\u89c6\u9891\u8be5\u91c7\u7528\u591a\u5c11\u5e27\u7387\u64ad\u653e\uff0c\u5217\u5982\u4e00\u90e8\u89c6\u9891\u81ea\u5df1\u5143\u6570\u636e\u63cf\u8ff0\u4e86\u5e27\u6570\u662f 30F \uff0c\u4f46\u662f\u89c6\u9891\u7684\u4e2d\u95f4\u6570\u636e\u4e22\u5931\u4e86\uff0c\u5c31\u4f1a\u5bfc\u81f4\u4e0b\u56fe\u4e2d\u7684\u540e\u679c

\u7eff\u8272\u7ad6\u7ebf\u5de6\u53f3\u7a7a\u767d\u7684\u5730\u65b9\u5c31\u662f\"\u7f3a\u5e27\"\u7684\u90e8\u5206\uff0c\u5f53\u4f7f\u7528\u4ee5\u4e0a\u547d\u4ee4\u8fdb\u884c\u8865\u5e27\u7684\u65f6\u5019,\u5c31\u4f1a\u51fa\u73b0\u201cdup\u201d\u53c2\u6570\uff0cdup \u540e\u9762\u7684\u6570\u5b57\u53c2\u6570\u5c31\u662f\u6307\u8865\u4e86\u591a\u5c11\u5e27

\u56fe\u4e2d\u53ef\u4ee5\u770b\u5230\u8fd9\u4e2a\u89c6\u9891\u7f3a\u4e86 853 \u5e27\uff0c\u501f\u52a9\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u95f4\u63a5\u7684\u89c2\u5bdf\u89c6\u9891\u7684\u5b8c\u6574\u6027\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u4e5f\u9002\u7528\u4e8e 115 \u4ee5\u53ca\u767e\u5ea6\u4e91\u4e0b\u8f7d\u7684\u89c6\u9891\u6587\u4ef6\u4e0d\u5b8c\u6574\u7684\u7b5b\u9009
\u4f46\u662f\u8fd9\u4e2a\u65b9\u6cd5\u7f3a\u70b9\u5c31\u662f\uff0c\u592a\u6162\u4e86\uff0c\u592a\u592a\u592a\u6162\u4e86\uff01\uff01\uff01\uff01\u6211\u672c\u673a\u914d\u7f6e\u662f 12490f+1660ti \uff0c\u4f46\u662f\u6211\u663e\u5361\u7684\u7f16\u7801\u5668\u8fd8\u6ca1\u6211\u7684 CPU \u5feb\uff0c\u4ee5\u4e0b\u662f\u6211\u7684\u6d4b\u901f

speed \u5c31\u662f\u901f\u5ea6\uff0c\u8d8a\u9ad8\u8d8a\u597d\uff0c\u53ef\u4ee5\u770b\u5230 GPU \u660e\u663e\u4e0d\u5982 CPU \uff0c\u8fd9\u53c8\u662f\u4e3a\u4ec0\u4e48\u5462\uff0c\u6211\u7528 potplayer \u786c\u89e3 1660ti 8K \u7247\u6e90\u5f88\u8f7b\u677e\uff0c\u4f46\u662f 12490f \u89e3\u7801 8K \u6709\u70b9\u5403\u529b\u4e86\uff0c\u6211\u53c8\u770b\u5230\u5b98\u65b9\u6587\u6863\u7684\u4e00\u7bc7\u89e3\u91ca

\u611f\u89c9\u662f\u6211\u6709\u67d0\u4e9b\u5730\u65b9\u6ca1\u8bbe\u7f6e\u597d\u5bfc\u81f4\u7684\u5dee\u5f02\uff0c\u56e0\u4e3a\u6211\u7528 ffmpeg \u786c\u89e3\u7684\u65f6\u5019\u53d1\u73b0\u53ea\u5360\u7528\u4e86 50%-60%\u5de6\u53f3\uff0c\u6839\u672c\u6ca1\u5403\u6ee1\u3002
\u4ee5\u4e0a\u6240\u8ff0\u5b8c\u4e86\uff0c\u6211\u7684\u9700\u6c42\u5c31\u662f\u8ba9\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u66f4\u52a0\u7684\u201c\u7701\u65f6\u95f4\u201d\uff0c\u6bd5\u7adf\u8fd9\u4e2a\u95f4\u63a5\u89c2\u5bdf\u5927\u6cd5\u8fd8\u662f\u592a\u8017\u7b97\u529b\uff0c\u5982\u679c\u80fd\u7a0d\u5fae\u4f18\u5316\u4e00\u4e0b\u4e5f\u597d\uff0c\u6211\u73b0\u5728\u68c0\u7d22 2T \u7684\u89c6\u9891\u7684\u65f6\u5019\uff0c\u901a\u5e38\u90fd\u9700\u8981 5 \u5929\u5de6\u53f3\u7684\u65f6\u95f4\u624d\u68c0\u7d22\u5b8c\uff0c\u8fd9\u901f\u5ea6\u5b9e\u5728\u662f\u592a\u6162\u4e86\uff0c\u6211\u5728\u60f3\uff0c\u5c31\u662f\u80fd\u4e0d\u80fd\u964d\u4f4e\u89e3\u7801\u7684\u8d28\u91cf\u6362\u53d6\u901f\u5ea6\uff0c\u6bd5\u7adf\u6211\u4e5f\u770b\u4e0d\u7740\u8fd9\u4e2a\u753b\u9762\uff0c\u4e0d\u77e5\u9053\u80fd\u4e0d\u80fd\u964d\u4f4e\u4ed6\u7684\u89e3\u7801\u7b97\u529b\u9700\u6c42\u8ba9\u6211\u901f\u5ea6\u63d0\u5347

\u4e0b\u9762\u63d0\u4f9b\u4e00\u4e2a\u635f\u574f\u7684\u89c6\u9891\u6837\u7247\uff0c\u4f9b\u4f60\u5c1d\u8bd5
https://drive.google.com/file/d/1TDbxYD0vri0D8aIJ6a1OSY2abE9tc6Lk/view?usp=share_link", "date_published": "2023-02-25T07:32:56+00:00", "title": "ffmpeg \u5982\u4f55\u66f4\u5feb\u901f\u7684\u67e5\u8be2\u89c6\u9891\u7684\"\u7f3a\u5e27\"", "id": "t/919129" }, { "author": { "url": "member/starryloki", "name": "starryloki", "avatar": "https://cdn.v2ex.com/avatar/3347/31ef/531612_large.png?m=1693464163" }, "url": "t/910059", "date_modified": "2023-01-20T09:16:33+00:00", "content_html": "\u5728\u8be2\u95ee ChatGPT \u4ee5\u53ca\u5bf9\u7ed3\u679c\u5404\u79cd\u4fee\u6b63\u540e\u5f97\u5230\u4e0b\u9762\u7684\u4e00\u6761\u547d\u4ee4:

ffmpeg -i input.ts -max_muxing_queue_size 999999 -pix_fmt yuv420p10le -c:v libx265 -x265-params \"profile=main10:high-tier=true:colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc\" -c:a copy output.mkv

\u968f\u540e\u8fd0\u884c\u63d0\u793a \u201c[mpegts @ 000002098fdd71c0] Could not find codec parameters for stream 0 (Video: avs3 (libuavs3d) ([212][0][0][0] / 0x00D4), yuv420p10le): unspecified size
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options\u201d

\u540e\u7eed\u62a5\u9519 \"[buffer @ 00000209ac41c040] Unable to parse option value \"0x0\" as image size
[buffer @ 00000209ac41c040] Error setting option video_size to value 0x0.
[graph 0 input from stream 0:0 @ 00000209909a7bc0] Error applying options to the filter.
Error reinitializing filters!
Error while filtering: Invalid argument
Finishing stream 0:0 without any data written to it.\"

\u8fd9\u4e2a\u89c6\u9891\u4f7f\u7528 MPC-HC \u64ad\u653e\u5668\u53ef\u4ee5\u6b63\u5e38\u64ad\u653e\uff0cffmpeg \u7684\u89e3\u7801\u5668\u6709 libuavs3d \uff0c\u8bf7\u95ee\u5e94\u8be5\u5982\u4f55\u6b63\u786e\u89e3\u7801\u8fd9\u4e2a\u89c6\u9891\uff1f", "date_published": "2023-01-20T09:15:14+00:00", "title": "\u5982\u4f55\u5c06 AVS3 8KHDR \u89c6\u9891\u8f6c\u7801\u4e3a HEVC 8KHDR \u89c6\u9891\uff1f", "id": "t/910059" }, { "author": { "url": "member/rrubick", "name": "rrubick", "avatar": "https://cdn.v2ex.com/avatar/9bee/a327/102175_large.png?m=1774518297" }, "url": "t/906182", "title": "\u8bf7\u6559\u5927\u4f6c\u4eec\uff0c\u5728\u7ebf\u7f51\u7ad9\u6293\u5230 m3u8 \u80fd\u64ad\u653e\uff0c\u4f46\u662f\u7528 ffmpeg \u4e0b\u8f7d\u7684\u65f6\u5019 \u201c403 forbidden\u201d \u6216\u8005 \u201cOutput file #0 does not contain any stream\u201d \u5e94\u8be5\u600e\u4e48\u89e3\u51b3", "id": "t/906182", "date_published": "2023-01-03T02:24:45+00:00", "content_html": "

\u6709\u7684\u7f51\u7ad9\u80fd\u6b63\u5e38\u4e0b\uff0c\u6709\u7684\u5c31\u4f1a\u62a5\u9519\u3002

\n

\u4f7f\u7528\u547d\u4ee4\u5982\u4e0b\uff1a\nffmpeg -i url -c copy output.mp4

\n" }, { "author": { "url": "member/wapollo9", "name": "wapollo9", "avatar": "https://cdn.v2ex.com/gravatar/ea16cfab62d775b1c782b0074cc141b7?s=73&d=retro" }, "url": "t/894947", "title": "FFmpeg \u4f7f\u7528 qsv \u52a0\u901f\u5931\u8d25", "id": "t/894947", "date_published": "2022-11-13T13:13:09+00:00", "content_html": "

ffmpeg \u547d\u4ee4\u5982\u4e0b

\n
ffmpeg -y -c:v h264_qsv -i input.mp4 -c:v hevc_qsv -low_power 1 output.mp4\n
\n

\u8f93\u51fa\u7684\u9519\u8bef\u4fe1\u606f\u5982\u4e0b

\n
[hevc_qsv @ 0x562ef30a0480] Selected ratecontrol mode is unsupported\n[hevc_qsv @ 0x562ef30a0480] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.\nError initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height\n[aac @ 0x562ef34099c0] Qavg: 65536.000\n[aac @ 0x562ef34099c0] 2 frames left in the queue on closing\nConversion failed!\n
\n

vainfo \u8f93\u51fa\u5982\u4e0b

\n
Trying display: wayland\nTrying display: x11\nerror: can't connect to X server!\nTrying display: drm\nvainfo: VA-API version: 1.16 (libva 2.16.0)\nvainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.4.4 ()\nvainfo: Supported profile and entrypoints\n VAProfileNone : VAEntrypointVideoProc\n VAProfileNone : VAEntrypointStats\n VAProfileMPEG2Simple : VAEntrypointVLD\n VAProfileMPEG2Main : VAEntrypointVLD\n VAProfileH264Main : VAEntrypointVLD\n VAProfileH264Main : VAEntrypointEncSliceLP\n VAProfileH264High : VAEntrypointVLD\n VAProfileH264High : VAEntrypointEncSliceLP\n VAProfileVC1Simple : VAEntrypointVLD\n VAProfileVC1Main : VAEntrypointVLD\n VAProfileVC1Advanced : VAEntrypointVLD\n VAProfileJPEGBaseline : VAEntrypointVLD\n VAProfileJPEGBaseline : VAEntrypointEncPicture\n VAProfileH264ConstrainedBaseline: VAEntrypointVLD\n VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP\n VAProfileVP8Version0_3 : VAEntrypointVLD\n VAProfileHEVCMain : VAEntrypointVLD\n VAProfileHEVCMain : VAEntrypointEncSliceLP\n VAProfileHEVCMain10 : VAEntrypointVLD\n VAProfileHEVCMain10 : VAEntrypointEncSliceLP\n VAProfileVP9Profile0 : VAEntrypointVLD\n VAProfileVP9Profile1 : VAEntrypointVLD\n VAProfileVP9Profile2 : VAEntrypointVLD\n VAProfileVP9Profile3 : VAEntrypointVLD\n VAProfileHEVCMain422_10 : VAEntrypointVLD\n VAProfileHEVCMain444 : VAEntrypointVLD\n VAProfileHEVCMain444 : VAEntrypointEncSliceLP\n VAProfileHEVCMain444_10 : VAEntrypointVLD\n VAProfileHEVCMain444_10 : VAEntrypointEncSliceLP\n
\n

CPU \u548c GPU \u5206\u522b\u5982\u4e0b

\n
CPU: Intel Celeron N5105 (4) @ 2.900GHz\nGPU: Intel JasperLake [UHD Graphics] \n
\n

\u8c22\u8c22\u5404\u4f4d\u4e86

\n" }, { "author": { "url": "member/naldo0193", "name": "naldo0193", "avatar": "https://cdn.v2ex.com/gravatar/bf05e1ab4521e8049ca2a6a234920a56?s=73&d=retro" }, "url": "t/894507", "date_modified": "2022-11-11T07:57:08+00:00", "content_html": "

\u5f85\u5408\u6210\u7684\u56fe\u7247\u53ea\u6709\u4e00\u5f20\uff0c\u97f3\u9891\u957f 7 \u5c0f\u65f6\u5de6\u53f3\n\u8f93\u51fa\u7684\u89c6\u9891\uff0c\u5f00\u5934\u5c11\u51e0\u79d2\uff0c\u8f93\u51fa\u89c6\u9891\u548c\u539f\u97f3\u9891\u58f0\u91cf\u5c11\u4e86\u4e00\u534a\u3002

\n

\u547d\u4ee4\u5982\u4e0b\uff1a\nffmpeg.exe -r 10 -loop 1 -i 5197.jpg -i audio5197.wav -c:v libx264 -x264-params keyint=1:scenecut=0 -c:a aac -b:a 32k -pix_fmt yuvj420p -shortest out.mp4

\n", "date_published": "2022-11-11T07:55:59+00:00", "title": "\u4f7f\u7528 ffmepg \u628a\u56fe\u7247\u548c\u957f\u97f3\u9891\u8f6c\u6362\u4e3a\u89c6\u9891\u7684\u65f6\u5019\uff0c\u89c6\u9891\u548c\u97f3\u9891\u7684\u65f6\u95f4\u5bf9\u4e0d\u4e0a\uff0c\u58f0\u97f3\u4e5f\u51cf\u5c11\u4e86\u4e00\u534a", "id": "t/894507" }, { "author": { "url": "member/JusticeLanding", "name": "JusticeLanding", "avatar": "https://cdn.v2ex.com/avatar/fe75/6da2/287090_large.png?m=1684890894" }, "url": "t/892099", "title": "FFmpeg \u89e3\u7801\u5668\u5982\u4f55\u8bc6\u522b\u7801\u6d41\u683c\u5f0f\u53d8\u4e86\uff1f", "id": "t/892099", "date_published": "2022-11-02T07:03:07+00:00", "content_html": "

\u76ee\u524d\uff0c\u5c0f\u5f1f\u5728\u505a\u57fa\u4e8e ffplay \u7684\u64ad\u653e\u5668\uff0c\u76ee\u524d\u78b0\u5230\u4e2a\u95ee\u9898\u3002

\n

\u6709\u8fd9\u4e48\u4e2a\u573a\u666f\uff0c\u670d\u52a1\u7aef\u90a3\u8fb9\u8ddf\u64ad\u653e\u5668\u4e00\u4e2a ts \u94fe\u63a5\u91cc\uff0c\u6709\u53ef\u80fd\u78b0\u5230 264 \u6570\u636e\u540e\u9762\u76f4\u63a5\u7d27\u8ddf\u7740 265 \u7684\u6570\u636e\u3002

\n

\u800c\u64ad\u653e\u5668\u4e0d\u77e5\u9053\u7801\u6d41\u5207\u6362\u4e86\uff0c264 \u7684 AVCodec \u78b0\u5230 265 \u7684\u6570\u636e\uff0c\u5f53\u7136\u5c31\u62a5\u9519\uff0c\u5bfc\u81f4\u64ad\u653e\u5668\u5361\u4f4f\u3002

\n

\u73b0\u5728\u5728\u60f3\uff0c\u5982\u4f55\u4e0d\u4fee\u6539\u670d\u52a1\u7aef\u7684\u60c5\u51b5\uff0c264 \u89e3\u7801\u5668\u8bc6\u522b\u51fa\u5207 265 \u4e86\uff0c\u8fd8\u6709 265 \u89e3\u7801\u5668\u8bc6\u522b\u51fa\u5207 264 \u4e86\u3002

\n

\u5c1d\u8bd5\u5728 libavcodec \u91cc\u7684 h2645_parse.c \u91cc\u628a\u9519\u8bef\u8bc6\u522b\uff0c\u629b\u51fa\u53bb\uff0c\u4f46\u662f\u53ef\u80fd\u5c0f\u5f1f\u5bf9 ffmepg \u8fd8\u4e0d\u591f\u719f\u6089\uff0c\u6709\u4e9b\u6b63\u5e38\u89e3\u7801 264 \u7684\u60c5\u51b5\u4e5f\u4f1a\u6709\u89e3\u7801\u5931\u8d25\u7684\u62a5\u9519\u3002

\n

\u6240\u4ee5\uff0c\u6709\u5927\u795e\u80fd\u6307\u5bfc\u4e0b\u5417\uff1f\u60f3\u8981\u76f4\u63a5\u53bb\u62e6\u622a\u6bd4\u7279\u6570\u636e\uff0c\u627e\u8d77\u59cb\u7801 0001 \uff0c\u8bc6\u522b 264 \u3001265 \uff0c\u4f46\u662f\u8fd9\u597d\u50cf\u8981 ffmpeg \u5f88\u5e95\u5c42\uff0c\u7a0d\u4e0a\u5c42\u62ff\u5230\u7684\u90fd\u662f pkt \uff0cframe \u3002\u8fd9\u4e5f\u592a\u96be\u4e86

\n" }, { "author": { "url": "member/PuppetFrost", "name": "PuppetFrost", "avatar": "https://cdn.v2ex.com/gravatar/6b4d3bc62895924cacb0318d3a083e76?s=73&d=retro" }, "url": "t/891984", "date_modified": "2022-11-02T02:11:15+00:00", "content_html": "\u6700\u8fd1\u5728\u5229\u7528 ffmpeg \u5904\u7406\u4e00\u4e9b\u5ba2\u670d\u5de5\u5355\u7684 wav \u97f3\u9891\u6587\u4ef6\uff0c\u5df2\u7ecf\u5206\u522b\u5c06\u5ba2\u670d\u4eba\u5458\u548c\u5ba2\u6237\u7684\u97f3\u9891\u5206\u5f00\u4e86\u3002
\u76ee\u524d\u7684\u97f3\u9891\u6ce2\u5f62\u662f\u8fd9\u6837\uff1a https://imgur.com/a/L86Y5aX
\u7ea2\u6846\u5185\u4e3a\u9759\u97f3\u90e8\u5206\u3002
\u73b0\u5728\u60f3\u8981\u5c06\u5176\u4e2d\u6bcf\u4e2a\u6709\u58f0\u97f3\u7684\u90e8\u5206\uff0c\u90fd\u5355\u72ec\u63d0\u53d6\u51fa\u6765\u751f\u6210\u6587\u4ef6\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5ba2\u670d\u4eba\u5458\uff08\u5ba2\u6237\uff09\u8bf4\u7684\u6bcf\u53e5\u8bdd\u90fd\u5355\u72ec\u751f\u6210\u4e00\u4e2a\u72ec\u7acb\u7684 wav \u6587\u4ef6\uff0c\u81ea\u5df1\u5c1d\u8bd5\u4e86\u4e0b silencedetect \u65e0\u679c\uff0c\u8bf7\u95ee\u5404\u4f4d\u5927\u4f6c ffmpeg \u53ef\u4ee5\u505a\u5230\u8fd9\u4e00\u70b9\u4e48\uff1f", "date_published": "2022-11-02T02:10:27+00:00", "title": "ffmpeg \u63d0\u53d6\u97f3\u9891\u4e2d\u6709\u58f0\u90e8\u5206\u5e76\u5355\u72ec\u751f\u6210\u6587\u4ef6", "id": "t/891984" }, { "author": { "url": "member/JusticeLanding", "name": "JusticeLanding", "avatar": "https://cdn.v2ex.com/avatar/fe75/6da2/287090_large.png?m=1684890894" }, "url": "t/890601", "date_modified": "2022-10-28T02:23:47+00:00", "content_html": "

\u5c0f\u5f1f\u76ee\u524d\u57fa\u4e8e ffplay \u81ea\u5df1\u505a\u4e00\u4e2a\u64ad\u653e\u5668\uff0c\u73b0\u5728\u60f3\u505a 32 \u500d\u901f\u5feb\u653e\uff0c\u64ad\u7684\u662f m3u8 \uff0c10 \u79d2\u4e00\u4e2a ts \u5206\u7247\uff0c\u53bb\u6389 sleep \uff0c\u53ea\u89e3\u7801 I \u5e27\uff0c\u6700\u591a\u80fd 20 \u500d\u901f\u3002

\n

\u8fbe\u4e0d\u5230 32 \u500d\u901f\uff0c\u4e8e\u662f\u67e5\u627e\u74f6\u9888\u5728\u54ea\u3002

\n

\u8bd5\u4e86\u975e 10 \u79d2\u5206\u7247\u7684 ts \uff0c\u8fd9\u4e2a ts \u5305\u542b 30 \u5206\u949f\u7684\u89c6\u9891\uff0c\u8fd9\u79cd\u60c5\u51b5\u80fd\u591f\u8fbe\u5230 60 \u500d\u901f\u3002

\n

\u6240\u4ee5\u74f6\u9888\u5e94\u8be5\u662f m3u8 \u91cc\u9762\u6bcf\u9694 10 \u79d2\uff0c\u91cd\u65b0\u8fde ts \uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5f88\u8017\u65f6\u3002

\n

ffmpeg \u597d\u50cf\u6709\u4e2a multiple_requests \u7684\u53c2\u6570\uff0c\u53ef\u4ee5\u590d\u7528\u4e00\u4e2a\u94fe\u63a5\uff0c\u5728 avformat_open_input \u4e4b\u524d\u8c03\u7528\nav_dict_set_int(&opts, \"multiple_requests\", 1, 0)\n\u53ef\u6ca1\u770b\u5230\u6548\u679c\u3002

\n

\u54ea\u4f4d\u5927\u4f6c\u6307\u70b9\u4e0b\uff0c\u6709\u4ec0\u4e48\u529e\u6cd5\u53ef\u7834\uff0c\u8c22\u8c22\uff01

\n", "date_published": "2022-10-28T02:21:55+00:00", "title": "ffplay \u5982\u4f55\u5e76\u884c\u4e0b\u8f7d m3u8", "id": "t/890601" }, { "author": { "url": "member/1054850490", "name": "1054850490", "avatar": "https://cdn.v2ex.com/avatar/0568/22f0/554537_large.png?m=1670165418" }, "url": "t/876873", "title": "\u5982\u4f55\u7528 ffmpeg \u627e\u5230\u635f\u574f\u7684\u89c6\u9891 50 \u5757\u94b1\u60ac\u8d4f\u7b54\u6848", "id": "t/876873", "date_published": "2022-08-31T20:58:30+00:00", "content_html": "\u4e3a\u4e86\u907f\u514d\u540c\u65f6\u51fa\u73b0\u4e24\u4e2a\u7b54\u6848\u7684\u60c5\u51b5\uff0c\u60ac\u8d4f\u6309\u7167\u65f6\u95f4\u5148\u540e\u987a\u5e8f\u7ed9\uff0c\u6700\u597d\u5c31\u662f\u5982\u679c\u6709\u54e5\u4eec\u89c9\u5f97\u81ea\u5df1\u4f1a\u7684\u8bdd\uff0c\u53ef\u4ee5\u8bc4\u8bba\u4e00\u4e0b\u81ea\u5df1\u5728\u5f04\uff0c\u5360\u4e00\u4e0b\u4f4d\uff0c\u907f\u514d\u522b\u7684\u54e5\u4eec\u767d\u5fd9\u6d3b\u3002

\u6211\u7528\u7740 yt-dlp+aria2 \u4e0b\u8f7d\u7740 youtube \u89c6\u9891\uff0c\u89c6\u9891\u540e\u5904\u7406\u662f ffmpeg \uff0c\u56e0\u4e3a\u4e0b\u8f7d\u7684\u89c6\u9891\u591a\u5927\u51e0\u4e07\u90e8\uff0c\u6240\u4ee5\u6709\u4e2a\u95ee\u9898\u53ef\u80fd\u5b58\u5728\u4e86\u5f88\u4e45\u4f46\u662f\u4e00\u76f4\u6ca1\u53d1\u73b0\uff0c\u5c31\u662f\u6709\u4e9b\u89c6\u9891\u635f\u574f\u4e86\uff0c\u5c31\u662f\u524d\u9762\u6b63\u5e38\uff0c\u4f46\u662f\u540e\u9762\u5176\u4e2d\u67d0\u4e9b\u6bb5\u843d\u64ad\u653e\u82b1\u5c4f\uff0c\u4f46\u662f\u6211\u91cd\u65b0\u4e0b\u8f7d\u7684\u65f6\u5019\u53c8\u662f\u597d\u7684\uff0c\u6240\u4ee5\u6211\u731c\u6d4b\u5e94\u8be5\u662f\u5408\u6210 m3u8 \u7684\u65f6\u5019\u51fa\u73b0\u4e86\u9519\u8bef\uff0c\u7531\u4e8e aria2 \u7684\u5173\u7cfb\uff0c\u4e0b\u8f7d\u7684\u89c6\u9891\u662f\u5206\u6bb5\u4e0b\u8f7d\u7684\uff0c\u800c\u4e14\u4e00\u76f4\u662f\u6302\u540e\u53f0\u4e0b\u8f7d\u7684\uff0c\u5e76\u6ca1\u6709\u65e5\u5fd7\uff0c\u5982\u679c\u6709\u5c0f\u4f19\u4f34\u77e5\u9053 yt-dlp \u5982\u4f55\u5f00\u542f\u65e5\u5fd7\u4e5f\u53ef\u4ee5\u544a\u77e5\u3002

\u6211\u73b0\u5728\u5c31\u662f\u6c42\u5982\u4f55\u4ece\u51e0\u4e07\u90e8\u89c6\u9891\u4e2d\uff0c\u81ea\u52a8\u5316\u7684\u8bc6\u522b\u51fa\u635f\u574f\u7684\u90e8\u5206\u89c6\u9891\uff0c\u6211\u4e0b\u9762\u8d34\u4e0a\u635f\u574f\u7684\u89c6\u9891\u4e0b\u8f7d\u94fe\u63a5\uff0c\u53ef\u4ee5\u8bd5\u4e00\u4e0b

https://imgur.com/OXoRgP9
https://imgur.com/clQlBRZ


https://drive.google.com/file/d/1TDbxYD0vri0D8aIJ6a1OSY2abE9tc6Lk/view?usp=sharing
https://drive.google.com/file/d/1Z_kWFZp4YP5q16CixMv_RmlIWIXFTrzb/view?usp=sharing" }, { "author": { "url": "member/yazoox", "name": "yazoox", "avatar": "https://cdn.v2ex.com/avatar/7b39/2690/111562_large.png?m=1635297358" }, "url": "t/866932", "title": "ffmpeg \u5982\u4f55\u538b\u7f29 h.265 \u7684\u89c6\u9891\u4e0d\u4e22\u5e27\uff1f", "id": "t/866932", "date_published": "2022-07-18T02:55:44+00:00", "content_html": "

\u5bb6\u91cc\u7684\u4e24\u4e2a\u6444\u50cf\u5934\uff0c\u8424\u77f3\u7684 C6C & C6CN \uff0c\u4f7f\u7528\u7fa4\u6656\u5f55\u50cf\u5230 nas \u786c\u76d8\u91cc\uff0c\u5373\u4f7f\u6211\u9009\u62e9\u7684\u662f\u201c\u6807\u6e05\u201d\uff0c\u4f46\u662f\u4f53\u79ef\u8fd8\u662f\u592a\u5927\u4e86\u3002\u4e00\u4e2a\u6444\u50cf\u5934\uff0c\u4e00\u5929\u7684\u89c6\u9891\u5c31\u6709 10G \u5de6\u53f3\uff0c\u4e24\u4e2a\u5c31\u662f 20G \u3002

\n

\u6211\u5c1d\u8bd5\u7740\u4e0b\u8f7d\u4e86\u4e00\u4e2a\u89c6\u9891\u6587\u4ef6\uff0c\u5927\u6982 400MB \u5de6\u53f3\uff0c\u7136\u540e\u7528 ffmpeg \u538b\u7f29\u4e86\u4e00\u4e0b\uff08\u538b\u7f29\u540e\u7684\u5206\u8fa8\u7387\uff0c\u6211\u770b\u4e86\u4e00\u4e0b\uff0c\u80fd\u591f\u63a5\u53d7\uff09

\n
ffmpeg -i c:\\temp\\1.mp4 -vf \"scale=iw/4:ih/4\" c:\\temp\\1-1.mp4\n
\n

\u4f53\u79ef\u80fd\u591f\u7f29\u5c0f\u5230 50MB \u5de6\u53f3\u3002\u4f46\u662f\uff0c\u6211\u53d1\u73b0\u538b\u7f29\u540e\u7684\u89c6\u9891\uff0c\u62e8\u653e\u7684\u65f6\u5019\uff0c\u6709\u7684\u5730\u65b9\u4f1a\u201c\u4e22\u5e27\u201d\uff0c\u5982\u56fe\u6240\u793a\u3002\u547d\u4ee4\u884c\u91cc\u9762\u8fd0\u884c\u65f6\uff0c\u4e5f\u4f1a\u6709\u4e00\u4e9b\u9519\u8bef\u63d0\u793a\uff0c\u4e0d\u6e05\u695a\u662f\u4ec0\u4e48\u539f\u56e0\u9020\u6210\u7684\u3002

\n

\u7279\u6765\u8bf7\u6559\u4e00\u4e0b\uff0c\u6709\u6ca1\u6709\u529e\u6cd5\u6b63\u5e38\u538b\u7f29\u4e0d\u51fa\u9519\uff1f ffmpeg \u547d\u4ee4\u54ea\u91cc\u7528\u9519\u4e86\uff1f

\n

\u8c22\u8c22\uff01

\n

\"ffmpeg_PIC_20220714002.jpg\"\n\"ffmpeg_PIC_20220714003.jpg\"

\n" }, { "author": { "url": "member/icemanpro", "name": "icemanpro", "avatar": "https://cdn.v2ex.com/static/img/avatar_large.png" }, "url": "t/863138", "title": "\u6709\u6ca1\u6709 win \u4e0b\u5df2\u7f16\u8bd1\u597d\u7684 FLV \u6807\u51c6\u652f\u6301 H265 \u7684 ffmpeg?", "id": "t/863138", "date_published": "2022-06-30T02:58:41+00:00", "content_html": "" }, { "author": { "url": "member/Awes0me", "name": "Awes0me", "avatar": "https://cdn.v2ex.com/avatar/9ad2/67ac/111002_large.png?m=1767670953" }, "url": "t/861714", "date_modified": "2022-06-23T14:36:18+00:00", "content_html": "

\u6bd4\u5982\u8fd9\u4e2a\uff0c\u4e00\u96c6 1.7G \uff0c1080p \uff0c\u8fd8\u4ee5\u4e3a\u662f\u9ad8\u6e05\uff0c\u70b9\u5f00\u770b\u753b\u8d28\u611f\u89c9\u662f 480p \uff0c\u662f\u6709\u4eba\u6545\u610f\u628a\u4f53\u79ef\u548c\u753b\u9762\u505a\u5927\u9a97\u8f6c\u5b58\u5417\uff1f

\n

\u5927\u660e\u738b\u671d 1566 2007.WEB-DL.Ep01.1080P.H264.AAC.mkv

\n

\"jPpLV0.png\"

\n", "date_published": "2022-06-23T09:30:31+00:00", "title": "\u4e3a\u4ec0\u4e48\u6709\u4e9b\u89c6\u9891\u4f53\u79ef\u8fd9\u4e48\u5927\u4f46\u662f\u753b\u8d28\u8fd9\u4e48\u5dee\uff1f", "id": "t/861714" }, { "author": { "url": "member/info521", "name": "info521", "avatar": "https://cdn.v2ex.com/gravatar/d2eb348108dabb3c43b6327689e44f00?s=73&d=retro" }, "url": "t/859987", "title": "lalserver \u6d41\u5a92\u4f53\uff08\u76f4\u64ad\u97f3\u89c6\u9891\u7f51\u7edc\u4f20\u8f93\uff09\u670d\u52a1\u5668 v0.30.1 2022.6.15", "id": "t/859987", "date_published": "2022-06-16T04:01:06+00:00", "content_html": "https://github.com/q191201771/lal/releases

[feat] HTTP-API\uff1a\u65b0\u589e start/stop_relay_pull \u63a5\u53e3\uff0c\u652f\u6301 rtmp \u548c rtsp \uff0c\u652f\u6301\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\uff0c\u81ea\u52a8\u5173\u95ed\uff0c\u91cd\u8bd5\u6b21\u6570\uff0crtsp \u7c7b\u578b\u7b49\u53c2\u6570


\u6587\u6863
https://pengrl.com/lal/#/" }, { "author": { "url": "member/JusticeLanding", "name": "JusticeLanding", "avatar": "https://cdn.v2ex.com/avatar/fe75/6da2/287090_large.png?m=1684890894" }, "url": "t/856233", "title": "[\u6c42\u52a9] mp4 \u5f55\u5236\uff0c\u600e\u4e48\u624d\u80fd\u4e0d\u7f13\u51b2\u5728\u5185\u5b58\u4e2d", "id": "t/856233", "date_published": "2022-05-30T07:36:26+00:00", "content_html": "

\u76ee\u524d\uff0c\u5c0f\u5f1f\u7684\u624b\u673a\u64ad\u653e\u5668 app \u6709\u4e2a\u89c6\u9891\u5f55\u5236\u529f\u80fd\uff0c\u7528 ffmpeg \u5e93\u5c01\u88c5\u6210 mp4 \u3002

\n

\u73b0\u5728 ffmpeg \u4f1a\u5148\u5c06\u5f55\u5236\u7684\u89c6\u9891\u7f13\u51b2\u5728\u5185\u5b58\u4e2d\uff0c\u7b49\u5230\u505c\u6b62\u5f55\u5236\uff0cffmpeg \u5728\u786c\u76d8\u6700\u5f00\u59cb\u5199\u4e2a mp4 \u5934\u90e8\uff0c\u7136\u540e\u628a\u4e00\u6574\u4e2a\u5185\u5b58\u91cc\u7684\u89c6\u9891\u6570\u636e\u5199\u5165\u786c\u76d8\uff0c\u8fd9\u6837\u5bfc\u81f4\u5185\u5b58\u5360\u7528\u5f88\u5927\uff0c\u800c\u4e14\u8fd8\u6709 OOM \u7684\u98ce\u9669\u3002

\n

\u6240\u4ee5\u60f3\u8981\u627e\u4e2a\u80fd\u5b9e\u65f6\u5c06\u5f55\u5236\u7684\u89c6\u9891\u6570\u636e\u5199\u5165\u78c1\u76d8\u7684\u529e\u6cd5\u3002\u6709\u6ca1\u6709\u5927\u795e\u6307\u70b9\u4e00\u4e8c\uff1f

\n" }, { "author": { "url": "member/JusticeLanding", "name": "JusticeLanding", "avatar": "https://cdn.v2ex.com/avatar/fe75/6da2/287090_large.png?m=1684890894" }, "url": "t/855410", "title": "ffmpeg \u600e\u4e48\u5904\u7406 h265 \u5207 h264 \u7684\u76f4\u64ad\u6d41\uff1f", "id": "t/855410", "date_published": "2022-05-26T04:23:03+00:00", "content_html": "

\u5c0f\u5f1f\u5728\u7528 ffmpeg \u505a\u4e00\u4e2a\u76f4\u64ad\u6d41\u7684\u64ad\u653e\u5668\uff0c\u53d1\u73b0\u5f53\u76f4\u64ad\u6d41\u4e2d 265 \u5207\u6210 264 \uff0c\u64ad\u653e\u5668\u4f1a\u5361\u6b7b\uff0c\u67e5\u4e86\u4e0b\u662f ffmpeg \u7684 265 \u5c01\u88c5\u5668\u6ca1\u6cd5\u76f4\u63a5\u89e3\u6790 264 \u7684\u5c01\u88c5\u5934\u90e8\uff0c\u4e8e\u662f\u627e\u5230\u89e3\u6790\u62a5\u9519\u7684\u5730\u65b9\u662f\u5728 ff_h2645_packet_split \u91cc\u7684 hevc_parse_nal_header \u3002\n\u672c\u4ee5\u4e3a\u628a\u8fd9\u4e2a ret \u4e3a\u8d1f\u7684\u62a5\u9519\u629b\u4e0a\u53bb\u5c31\u80fd\u89e3\u51b3\u4e86\u3002\n\u7ed3\u679c\u6539\u5b8c\u540e\uff0c\u53d1\u73b0\u4e2a\u522b\u624b\u673a\u7684\u6b63\u5e38 265 \u76f4\u64ad\u6d41\u4e5f\u4f1a ret<0 \uff0c\u8fd9\u4e0b\u4e0d\u77e5\u9053\u8be5\u600e\u4e48\u533a\u5206\u662f\u7f16\u7801\u683c\u5f0f\u5207\u6362\u5f15\u8d77\u8fd8\u662f\u4e2a\u7b80\u5355\u7684 warning \u4e86\u3002\n\u6709\u5927\u795e\u80fd\u7ed9\u70b9\u601d\u8def\u5417\uff1f

\n
int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length, void *logctx, int is_nalff, int nal_length_size, enum AVCodecID codec_id)\n{\n ......\n if (codec_id == AV_CODEC_ID_HEVC)\n ret = hevc_parse_nal_header(nal, logctx);\n else\n ret = h264_parse_nal_header(nal, logctx);\n if (ret <= 0 || nal->size <= 0) {\n if (ret < 0) {\n av_log(logctx, AV_LOG_ERROR, \"Invalid NAL unit %d, skipping.\\n\",\n nal->type);\n }\n pkt->nb_nals--;\n }\n ......\n}\n
\n" }, { "author": { "url": "member/gtheone1", "name": "gtheone1", "avatar": "https://cdn.v2ex.com/avatar/ca7f/d285/135491_large.png?m=1650455715" }, "url": "t/848180", "date_modified": "2022-04-20T08:40:15+00:00", "content_html": "ffmpeg -i aa.mp4 -c copy -metadata:s:v:0 rotate=90 bb.mkv

\u9644\u4e0a\u8f93\u51fa\u65e5\u5fd7\uff1a https://netcut.cn/p/e321491f1686d4a5

\u8fd9\u6761\u6267\u884c\u4e4b\u540e\uff0c\u5e76\u6ca1\u6709\u65cb\u8f6c\u6210\u529f\u3002\u56e0\u4e3a potplayer \u64ad\u653e\u8fc7\uff0cffprobe.exe \u4e5f\u64ad\u653e\u8fc7\uff0c\u753b\u9762\u5e76\u6ca1\u6709\u65cb\u8f6c

\u7528 ffprobe -v quiet -print_format json -show_format -show_streams \uff0c\u6765\u67e5\u770b\u8f6c\u6362\u540e\u7684\u89c6\u9891\u7684\u53c2\u6570\uff1a

https://netcut.cn/p/2326a8e35c3a0e22

\u5982\u4e0a\uff0c\u6ca1\u770b\u89c1 rotate \u53c2\u6570\u88ab\u6dfb\u52a0\uff1f\u6309\u7406\u8bf4\uff0c\u4e0d\u662f\u4f1a\u591a\u51fa\u4e00\u884c\"rotate\": \"90\" \u5417\uff1f", "date_published": "2022-04-20T08:32:48+00:00", "title": "\u4e3a\u4ec0\u4e48 ffmpeg \u52a0\u4e0d\u4e0a rotate \u65cb\u8f6c\u53c2\u6570", "id": "t/848180" } ] } ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86